จะรันบล็อกโค้ดใน PHP วันละครั้งในไฟล์เทมเพลตหลักได้อย่างไร ไม่ใช่ครอน

ฉันมีบล็อกโค้ด PHP ที่สร้างไฟล์ sitemap.xml ของฉัน ปัญหาคือมันสร้างไฟล์ทุกครั้งที่โหลดหน้าเว็บไซต์ รหัสอยู่ในไฟล์เทมเพลตหลักของฉัน

ฉันจะบอกให้ PHP รันโค้ดนี้เพียงวันละครั้ง แทนที่จะโหลดเทมเพลตทุกครั้งที่โหลดได้อย่างไร

ฉันไม่ต้องการใช้แท็บ cron เพราะโค้ดต้องอยู่ในไฟล์เทมเพลต ไฟล์เทมเพลตถูกดึงมาจากหลายโดเมนในบัญชีเดียวกัน ดังนั้นฉันจึงต้องใส่เงื่อนไขในบล็อกของโค้ดที่ระบุว่า only run this code when a page is loaded but only during a certain time frame each day, like from 12 noon to 4pm or something like that

ฉันรู้ว่านั่นคือสิ่งที่ cron มีไว้ แต่จำเป็นต้องทำใน PHP

อัปเดต

นี่คือสิ่งที่ฉันคิดขึ้นมาจากคำตอบ Travesty3

$time  = time();
$sitemap = $_SERVER['DOCUMENT_ROOT'].'/sitemap.xml';
if ($time - filemtime($sitemap) >= 1*24*60*60) { // 1 days

(generate sitemap code here)

}

มันใช้งานได้ดี ขณะนี้แผนผังไซต์ถูกสร้างขึ้นเพียงวันละครั้งเท่านั้นหากไซต์มีผู้เยี่ยมชมอย่างน้อย 1 ต่อวัน

แต่หากไซต์มีปริมาณการเข้าชมจำนวนมาก ซึ่งเป็นข้อกังวลเดิมของฉันในการทำเช่นนี้ตั้งแต่แรก จะไม่ตรวจสอบ filemtime ของไฟล์ sitemap.xml ทำให้มีค่าใช้จ่ายบนเซิร์ฟเวอร์เกือบเท่ากันกับการสร้างไฟล์แผนผังไซต์บน แต่ละคำขอ?


person Mike    schedule 02.10.2014    source แหล่งที่มา
comment
สมมติว่าคุณใช้งานฐานข้อมูลอยู่ คุณสามารถบันทึกการประทับเวลาลงในฐานข้อมูลของคุณได้ เพื่อให้คุณสามารถ Ping กลับได้ตลอดเวลาเมื่อคุณควรอัปเดต (ดีกว่าส่ง Ping ระบบไฟล์)   -  person Dave Chen    schedule 02.10.2014
comment
ปัจจุบันใช้เฉพาะอาร์เรย์และไม่มีฐานข้อมูล   -  person Mike    schedule 02.10.2014
comment
ฉันไม่เห็นว่าเหตุใดคำตอบของ Travesty3 จึงไม่ได้ผล เพียงตรวจสอบเวลาที่แก้ไขล่าสุดบน sitemap.xml และหากเวลานั้นล้าสมัย ให้ทำการอัปเดต   -  person Dave Chen    schedule 02.10.2014
comment
โอ้ ฉันกำลังตรวจสอบมันในหน้าจริงที่กำลังโหลดอยู่ กลับมาพร้อมกับผลลัพธ์   -  person Mike    schedule 02.10.2014
comment
ข้อผิดพลาดนี้คือเมื่อไม่มีใครเยี่ยมชมเว็บไซต์ของคุณ แต่คุณไม่จำเป็นต้องกังวลว่าแผนผังเว็บไซต์จะล้าสมัยอีกต่อไป   -  person Dave Chen    schedule 02.10.2014
comment
เหตุใดฉันจึงชี้ให้เห็นว่าการใช้ฐานข้อมูลจะมีค่าใช้จ่ายน้อยกว่าระบบไฟล์ คุณควรใช้ฐานข้อมูลสำหรับเซิร์ฟเวอร์ขนาดใหญ่ตั้งแต่แรกอยู่แล้ว ฉันคิดได้เพียงสองวิธีเท่านั้น วิธีปัจจุบันที่คุณมี (แต่ย้ายไปยังฐานข้อมูลแทน) หรือระบบอัตโนมัติที่จะทำสิ่งนี้ให้คุณ (เช่น cron)   -  person Dave Chen    schedule 02.10.2014


คำตอบ (1)


คุณสามารถตรวจสอบ filemtime บนไฟล์ที่สร้างขึ้น และสร้างเฉพาะเมื่อโหลดหน้าเว็บหาก มันเก่ากว่า 24 ชั่วโมงแล้ว

นอกจากนี้คุณยังสามารถใช้ cron เพื่อรันสคริปต์ PHP หรือเรียก URL ได้อีกด้วย ก็มีเช่นกัน

person Travesty3    schedule 02.10.2014
comment
การจัดการกับ filemtime คือจะตรวจสอบว่าไฟล์ถูกแก้ไขครั้งล่าสุดเมื่อใด ฉันต้องตรวจสอบว่าผู้ใช้เว็บเข้าชมเพจครั้งล่าสุดเมื่อใด ไม่ใช่ตอนที่ฉันแก้ไขไฟล์ครั้งล่าสุด - person Mike; 02.10.2014
comment
ใช้ข้อเสนอแนะของคุณ ฉันอัปเดตคำถามพร้อมผลลัพธ์และข้อกังวลอื่น คุณช่วยกลับมาทบทวนคำถามของฉันและให้ความคิดของคุณอีกครั้งได้ไหม - person Mike; 02.10.2014