mirror of
https://github.com/php/presentations.git
synced 2026-03-24 15:42:33 +01:00
49 lines
1.0 KiB
PHP
49 lines
1.0 KiB
PHP
<?php
|
|
function cache_start()
|
|
{
|
|
global $cache_file_name, $age;
|
|
|
|
// a superbly creative way for creating cache files
|
|
$cache_file_name = __FILE__ . '_cache';
|
|
|
|
// default cache age
|
|
if (empty($age)) $age = 600;
|
|
|
|
// check if cache exists and if the cached data is still valid
|
|
if (@filemtime($cache_file_name) + $age > time()) {
|
|
// Yey! cache hit, output cached data and exit
|
|
readfile($cache_file_name);
|
|
unset($cache_file_name);
|
|
exit;
|
|
}
|
|
|
|
// nothing in cache or cache is too old
|
|
ob_start();
|
|
}
|
|
|
|
function cache_end()
|
|
{
|
|
global $cache_file_name;
|
|
|
|
// nothing to do
|
|
if (empty($cache_file_name)) return;
|
|
|
|
// fetch output of the script
|
|
$str = ob_get_clean();
|
|
|
|
// output data to the user, so they don't need to wait
|
|
// for the cache writing to complete
|
|
echo $str;
|
|
|
|
// write to cache
|
|
fwrite(fopen($cache_file_name.'_tmp', "w"), $str);
|
|
// atomic write
|
|
rename($cache_file_name.'_tmp', $cache_file_name);
|
|
}
|
|
|
|
cache_start();
|
|
|
|
// set cache termination code as the exit handler
|
|
// this way we don't need to modify the script
|
|
register_shutdown_function("cache_end");
|
|
?>
|