<?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");
?>