Bagaimana cara mengeksekusi blok kode dalam PHP sekali sehari di file template utama? Bukan cron

Saya memiliki blok kode PHP yang menghasilkan file sitemap.xml saya. Masalahnya adalah, ini menghasilkan file setiap kali halaman situs dimuat. Kodenya ada di file template utama saya.

Bagaimana saya bisa memberitahu PHP untuk hanya mengeksekusi kode ini, katakanlah, sekali sehari, bukan setiap kali template dimuat?

Saya tidak ingin menggunakan tab cron karena kodenya harus ada di file template. File template ditarik untuk beberapa domain di akun yang sama. Jadi saya perlu memberi syarat pada blok kode yang mengatakan 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.

Saya tahu itulah gunanya cron, tetapi perlu dilakukan di PHP.

PEMBARUAN

Jadi inilah yang saya buat berdasarkan Travesty3 jawaban.

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

(generate sitemap code here)

}

Ini berfungsi dengan baik. Peta situs sekarang hanya dibuat sekali sehari hanya jika situs tersebut memiliki setidaknya 1 pengunjung per hari.

Namun jika situs tersebut memiliki banyak lalu lintas yang menjadi perhatian awal saya untuk melakukan hal ini, bukankah memeriksa filemtime file peta situs.xml akan menyebabkan jumlah overhead yang hampir sama di server dengan pembuatan file peta situs di setiap permintaan?


person Mike    schedule 02.10.2014    source sumber
comment
Dengan asumsi Anda memiliki database yang berjalan, Anda dapat menyimpan stempel waktu ke dalam database Anda, sehingga Anda selalu dapat melakukan ping kembali ketika Anda harus memperbarui. (Lebih baik daripada melakukan ping ke sistem file)   -  person Dave Chen    schedule 02.10.2014
comment
saat ini hanya menggunakan array dan tidak ada database.   -  person Mike    schedule 02.10.2014
comment
Saya tidak mengerti mengapa jawaban Travesty3 tidak berhasil. Cukup periksa waktu modifikasi terakhir di peta situs.xml, dan jika sudah kedaluwarsa, lakukan pembaruan.   -  person Dave Chen    schedule 02.10.2014
comment
oh, saya sedang memeriksanya di halaman sebenarnya yang dimuat. Segera kembali dengan hasil.   -  person Mike    schedule 02.10.2014
comment
Jebakan dalam hal ini adalah ketika tidak ada yang mengunjungi situs web Anda. Namun Anda tidak perlu khawatir peta situs akan kedaluwarsa.   -  person Dave Chen    schedule 02.10.2014
comment
Persisnya mengapa saya menunjukkan bahwa menggunakan database akan lebih hemat biaya dibandingkan sistem file. Anda harus menggunakan database untuk server besar. Saya hanya dapat memikirkan dua metode, metode yang Anda miliki saat ini (tetapi pindahkan ke database), atau sistem otomatis untuk melakukan ini untuk Anda (yaitu cron).   -  person Dave Chen    schedule 02.10.2014


Jawaban (1)


Anda dapat memeriksa filemtime pada file yang dihasilkan dan hanya membuatnya saat memuat halaman jika sudah lebih dari 24 jam.

Selain itu, Anda dapat menggunakan cron untuk menjalankan skrip PHP atau memanggil URL. Jadi ada juga itu.

person Travesty3    schedule 02.10.2014
comment
kesepakatan dengan filemtime adalah memeriksa kapan file terakhir diubah. Saya perlu memeriksa kapan halaman terakhir dilihat oleh pengguna web. Tidak saat terakhir kali saya memodifikasi file. - person Mike; 02.10.2014
comment
menggunakan saran Anda. Saya memperbarui pertanyaan saya dengan hasil dan kekhawatiran lainnya. Maukah Anda meninjau kembali pertanyaan saya dan memberikan pemikiran Anda. - person Mike; 02.10.2014