Php частичное кэширование - PullRequest
2 голосов
/ 02 апреля 2012

Я хочу частично кэшировать некоторые файлы php. например

<?
echo "<h1>",$anyPerdefinedVarible,"</h1>";
echo "time at linux is: ";
// satrt not been catched section
echo date();
//end of partial cach
echo "<div>goodbye $footerVar</div>";
?>

Так что кешированная страница должна быть как (Cached.php)

<h1>This section is fixed today</h1>
<? echo date(); ?>
<div>goodbye please visit todays suggested website</div>

Это может быть сделано с помощью шаблонов, но я хочу это напрямую. Потому что я хочу альтернативное решение.

1 Ответ

4 голосов
/ 02 апреля 2012

Посмотрите на php ob_start (), он может буферизовать весь вывод и сохранить его. http://php.net/manual/en/function.ob-start.php

Дополнение: Посмотрите на http://www.php.net/manual/en/function.ob-start.php#106275 для функции, которую вы хотите :) Редактировать: Вот еще версия simpeler: http://www.php.net/manual/en/function.ob-start.php#88212:)


Вот несколько простых, но эффективных решений:

template.php

<?php
    echo '<p>Now is: <?php echo date("l, j F Y, H:i:s"); ?> and the weather is <strong><?php echo $weather; ?></strong></p>';
    echo "<p>Template is: " . date("l, j F Y, H:i:s") . "</p>";
    sleep(2); // wait for 2 seconds, as you can tell the difference then :-)
?>

actualpage.php

<?php    
    function get_include_contents($filename) {
        if (is_file($filename)) {
            ob_start();
            include $filename;
            return ob_get_clean();
        }
        return false;
    }

    // Variables
    $weather = "fine";

    // Evaluate the template (do NOT use user input in the template, look at php manual why)
    eval("?>" . get_include_contents("template.php"));
?>

Вы можете сохранить содержимое template.php или actualpage.php с помощью http://php.net/manual/en/function.file-put-contents.php в некоторый файл, например cached.php. Затем вы можете позволить actualpage.php проверять дату cached.php и, если она слишком старая, сделать ее новую или, если она достаточно молода, просто повторить actualpage.php или пересмотреть template.php без перекомпоновки шаблона.


После комментариев, здесь для кеширования шаблона:

<?php    
    function get_include_contents($filename) {
        if (is_file($filename)) {
            ob_start();
            include $filename;
            return ob_get_clean();
        }
        return false;
    }

    file_put_contents("cachedir/cache.php", get_include_contents("template.php"));

?>

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

<?php
    // Variables
    $weather = "fine";

    include("cachedir/cache.php");
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...