Я использую базовую систему кэширования на своем сайте на основе этой ссылки
Он до сих пор хорошо работал на все, что я хочу сделать.
$cachefile = 'cache/'. basename($_SERVER['QUERY_STRING']) . '.html'; $cachetime = 1440 * 60; if (file_exists($cachefile) && (time() - $cachetime < filemtime($cachefile))) { include($cachefile); echo "<!-- Cached ".date('jS FYH:i', filemtime($cachefile))." -->"; exit; } ob_start(); // My html/php code here $fp = fopen($cachefile, 'w'); // open the cache file for writing fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file fclose($fp); // close ob_end_flush(); // Send to browser
Тем не менее, у меня есть несколько страниц с более подробными запросами mysql, я потратил довольно много времени на его оптимизацию, однако для выполнения этой задачи все еще требуется около 10 секунд, когда я запрашиваю ее в mysql и даже дольше на веб-сайте. И иногда кажется, что время, когда я получаю сообщение ниже.
The proxy server received an invalid response from an upstream server. The proxy server could not handle the requestGET http://www.example.com Reason: Error reading from remote server
Это не огромная проблема, потому что я использую систему кеширования выше только первого человека, который нажимает на нее, в течение дня получает задержку, а остальное время пользователи получают кэшированную страницу, поэтому на самом деле это довольно быстро для них ,
Я хочу избавиться от необходимости быть первым человеком каждый день, чтобы перейти на страницу и автоматизировать этот процесс, поэтому в 17:00 (на сервере) каждый день файл записывается в кеш.
Как мне это лучше всего достичь?
Я предлагаю вам использовать Php Speedy, или это может помочь:
<?php function getUrl () { if (!isset($_SERVER['REQUEST_URI'])) { $url = $_SERVER['REQUEST_URI']; } else { $url = $_SERVER['SCRIPT_NAME']; $url .= (!empty($_SERVER['QUERY_STRING']))? '?' . $_SERVER[ 'QUERY_STRING' ] : ''; } return $url; } //getUrl gets the queried page with query string function cache ($buffer) { //page's content is $buffer $url = getUrl(); $filename = md5($url) . '.cache'; $data = time() . '¦' . $buffer; $filew = fopen("cache/" . $filename, 'w'); fwrite($filew, $data); fclose($filew); return $buffer; } function display () { $url = getUrl(); $filename = md5($url) . '.cache'; if (!file_exists("/cache/" . $filename)) { return false; } $filer = fopen("cache/" . $filename, 'r'); $data = fread($filer, filesize("cache/" . $filename)); fclose($filer); $content = explode('¦', $data, 2); if (count($content)!= 2 OR !is_numeric($content['0'])) { return false; } if (time()-(100) > $content['0']) { // 100 is the cache time here!!! return false; } echo $content['1']; die(); } // Display cache (if any) display(); // if it is displayed, die function will end the program here. // if no cache, callback cache ob_start ('cache'); ?>
Просто включите этот скрипт в любом месте, где вам нужно кэшировать, и установите задание cron для автоматического его запуска.