PHP: кэшировать аккуратно проанализированную строку - PullRequest
0 голосов
/ 19 августа 2011

В верхней части моей страницы у меня есть этот фрагмент кода для проверки кэша и запуска буферизации вывода:

ob_start( );
    $cache_time = 3600; 
    $cache_folder = $_SERVER['DOCUMENT_ROOT'].'/cache'; 
    $cache_filename = $cache_folder.md5($_SERVER['REQUEST_URI']);
    $cache_created  = (file_exists($cache_filename)) ? filemtime($cache_filename->filename) : 0;  

    if ((time() - $cache_created) < $cache_time) {  
      readfile($cache_filename); 
      die();  
    }  

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

$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');
file_put_contents($cache_filename, $tidy);
echo $tidy;

Кто-нибудь знает, что делать?

1 Ответ

0 голосов
/ 19 августа 2011

В вашем коде были ошибки:

  • $ cache_filename - это строка, а не объект
  • объект $ tiny () - нельзя просто поместить в файл - вам нужно принять значение

Я исправил их, взяв пример справочной страницы php :

<?php
    $cache_time = 10; 
    $cache_folder = '/tmp/'; 
    $cache_filename = $cache_folder.md5($_SERVER['REQUEST_URI']);
    $cache_created  = (file_exists($cache_filename)) ? filemtime($cache_filename) : 0;  
    var_dump(time() - $cache_created);
    if ((time() - $cache_created) < $cache_time) {  
      readfile($cache_filename); 
      exit();  
    } 
?>

<?php
ob_start();
?>

<html>
  <head>
   <title>test</title>
  </head>
  <body>
   <p>error<br>another line</i>
  </body>
</html>

<?php

$buffer = ob_get_clean();
$config = array('indent' => TRUE,
                'output-xhtml' => TRUE,
                'wrap' => 200);

$tidy = tidy_parse_string($buffer, $config, 'UTF8');

$tidy->cleanRepair();
file_put_contents($cache_filename, $tidy->value);
echo $tidy;
?>
...