在没有cpu密集代码的情况下仅在PHP中创建新文件

时间:2015-05-20 20:54:13

标签: php performance function performance-testing milliseconds

在我的缓存系统中,我想要它,如果请求新页面,检查文件是否存在,如果不存在,则复制存储在服务器上,如果存在,则它不能被覆盖。

我遇到的问题是我可能正在使用设计缓慢的功能。

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

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

我想要做的是用一组更好的功能代替它,但仍然可以实现相同的功能。包括sitemodification.file在内的所有缓存文件都驻留在ramdisk上。我在退出之前添加了一个flush,希望内容输出更快。

我目前无法使用直接内存寻址,因为要存储的文件大小都不同。

是否有一组我可以使用的函数可以执行我提供的代码至少几毫秒,尤其是加载文件代码?

我正在努力将时间保持在第一个字节低位。

1 个答案:

答案 0 :(得分:0)

首先,首选is_filefile_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);
    }
}

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