Скрипту кэша не удается повторно кэшировать

#php #jquery #ajax

#php #jquery #ajax

Вопрос:

Мой скрипт кэша отлично кэширует мои файлы при первом их просмотре, однако, когда я пытаюсь заставить его повторно кэшировать файл, ничего не происходит.

Во-первых, этот код находится в файле с именем header.php включено в начало каждой страницы:

 <?php
    $requestURI = rtrim($_SERVER['REQUEST_URI'], '/');
    if (stripos($requestURI,'/admin') != false) { //Don't cache admin pages
        $cache_time = 0;
    } else{
        $cache_time = 31556926;
    }
    $cache_folder = $_SERVER['DOCUMENT_ROOT'].'/cache/'; 
    $cache_filename = $cache_folder.md5($requestURI).'.txt'; //Create unique name for cache
    $cache_created  = (file_exists($cache_filename)) ? filemtime($cache_filename) : 0;  
    if ($_POST['cache'] != "yes") { // Allow function to be overridden
    if ((time() - $cache_created) < $cache_time) {  
      readfile($cache_filename); // The cached copy is still valid use it.
      die();  
    }  
    }
ob_start( );
?>
  

Он проверяет, существует ли уже кэшированный файл для этой страницы и истек ли срок его действия.

Этот код находится в файле с именем footer.php включено в нижней части каждой страницы:

 <?php
$html = ob_get_clean();
$config = array('indent' => TRUE,
                'drop-empty-paras' => FALSE,
                'output-xhtml' => TRUE,
                'quote-ampersand' => TRUE,
                'indent-cdata' => TRUE,
                'tidy-mark' => FALSE,
                'wrap' => 200);
$tidy = tidy_parse_string($html, $config, 'UTF8'); //Clean HTML output
file_put_contents($cache_filename, $tidy->value); //Create or update cache
mysql_select_db('reithg_UNITS');
$url = $_SERVER['DOCUMENT_ROOT'].$requestURI;
$cache = md5($requestURI);
$query = mysql_query("SELECT * FROM Cache WHERE CACHE = '$cache'") or die(mysql_error());  
$exists = mysql_num_rows($query);

function getIP() //Get the client's IP
{

if (isset($_SERVER["HTTP_CLIENT_IP"]))
{
return $_SERVER["HTTP_CLIENT_IP"];
}
elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
{
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif (isset($_SERVER["HTTP_X_FORWARDED"]))
{
return $_SERVER["HTTP_X_FORWARDED"];
}
elseif (isset($_SERVER["HTTP_FORWARDED_FOR"]))
{
return $_SERVER["HTTP_FORWARDED_FOR"];
}
elseif (isset($_SERVER["HTTP_FORWARDED"]))
{
return $_SERVER["HTTP_FORWARDED"];
}
else
{
return $_SERVER["REMOTE_ADDR"];
}
}
$IP = getIP();
if ($exists != 0) {
$cached = mysql_fetch_row($query);
$cachedID = $cached[0];
mysql_query("UPDATE Cache SET URL = '$url', CACHE = '$cache', UPDATED = NOW(), `UPDATED BY` = '$IP', WHERE ID = $cachedID;") or die(mysql_error());  
} else {
mysql_query("INSERT INTO Cache (ID, URL, CACHE, CREATED, UPDATED, `CREATED BY`, `UPDATED BY`) VALUES('NULL', '$url', '$cache', NOW(), 'NULL', '$IP', 'NULL') ") or die(mysql_error());  
}
echo $tidy;
?>
  

Он создает файл кэша и собирает некоторую информацию о его создании для базы данных.

Затем у меня есть ajax-скрипт, расположенный в другом месте, который генерирует список всех моих кэшированных страниц и отправляет cache = yes via POST каждой из них, что должно принудительно выполнить повторное кэширование. (Останавливает чтение кэшированного файла), но ничего не происходит, и кэшированный файл остается прежним. Вот скрипт jquery после того, как он сгенерирован PHP:

    function recache(){
            var request1 = $.ajax({type: 'POST',url: '../units_and_evidence/flash_delivery.php?id=1',data: 'cache = yes'});
            var request2 = $.ajax({type: 'POST',url: '../',data: 'cache = yes'});
            var request3 = $.ajax({type: 'POST',url: '../units_and_evidence',data: 'cache = yes'});
            var request4 = $.ajax({type: 'POST',url: '../units_and_evidence/flash_delivery.php?id=15',data: 'cache = yes'});
            function successful () {
            alert("Reset cache success");
            }
            function failure () {
            alert("Reset cache failed");
            }
            var recache = $.when(request1,request2,request3,request4).then(successful, failure);
            }
  

Он возвращает successful() функцию, поэтому POST выполнение выполнено успешно, следовательно, это должно быть проблемой с header.php или footer.php

Ответ №1:

Хорошо, я решил это. Проблема заключалась в интервале в data свойстве.

Так data: 'cache = yes' нужно было стать data: 'cache=yes' .