只在PHP中创建新文件,不需要cpu密集型代码


creating only new files in PHP without cpu intensive code

在我的缓存系统中,我希望当一个新页面被请求时,检查一个文件是否存在,如果它不存在,则在服务器上存储一个副本,如果它存在,则不能覆盖它

我遇到的问题是,我可能使用了设计得很慢的函数。

这是我当前实现的保存文件的一部分:

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);
    }
}

您应该看到一些改进,但请记住,文件访问速度很慢,并且在发送任何内容之前检查三次文件访问