Посмотрите на 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");
?>