在我的缓存系统中,我希望当一个新页面被请求时,检查一个文件是否存在,如果它不存在,则在服务器上存储一个副本,如果它存在,则不能覆盖它
我遇到的问题是,我可能使用了设计得很慢的函数。
这是我当前实现的保存文件的一部分:
if (!file_exists($filename)){$h=fopen($filename,"wb");if ($h){fwrite($h,$c);fclose($h);}}
这是我加载文件的实现的一部分:
if (($m=@filemtime($file)) !== false){
if ($m >= filemtime("sitemodification.file")){
$outp=file_get_contents($file);
header("Content-length:".strlen($outp),true);echo $outp;flush();exit();
}
}
我想做的是用一组更好的函数来取代它,这意味着性能,但仍然实现相同的功能。所有缓存文件,包括站点修改。文件驻留在ramdisk上。我在退出前添加了刷新,希望能更快地输出内容。
我现在不能使用直接内存寻址,因为要存储的文件大小各不相同。
是否有一组我可以使用的函数,可以执行我提供的代码至少几毫秒,特别是加载文件的代码?
首先,选择is_file而不是file_exists
,并使用file_put_contents
:
if ( !is_file($filename) ) {
file_put_contents($filename,$c);
}
然后,使用适合这种工作的函数,readfile:
if ( ($m = @filemtime($file)) !== false && $m >= filemtime('sitemodification.file')) {
header('Content-length:'.filesize($file));
readfile($file);
}
}
您应该看到一些改进,但请记住,文件访问速度很慢,并且在发送任何内容之前检查三次文件访问