哪种方法在服务器上最便宜?我正在动态创建目录,并希望每个目录都包含一个空的html文件。还有一个衡量差异的方法呢?
$file = text.html;
$newDest = myDir/text.html;
copy($file, $newDest);
VS
$File = "myDir/text.html";
$Handle = fopen($File, 'w');
$Data = '';
fwrite($Handle, $Data);
print "Data Written";
fclose($Handle);
答案 0 :(得分:4)
touch和file_put_contents几乎相同。它们的速度水平相同。我用以下函数做了一些基准测试。
define('MAX_ITERATION', 10000);
function create_empty_fpc($name) {
file_put_contents(dirname(__FILE__)."/create_fpc/$name", "");
}
function create_empty_fopen($name) {
if($fh=fopen(dirname(__FILE__)."/create_fopen/$name", "w"))
fclose($fh);
}
function copy_empty($name) {
copy(dirname(__FILE__).'/empty', dirname(__FILE__)."/copy/$name");
}
function touch_empty($name){
touch(dirname(__FILE__)."/touch/$name");
}
+-------------------------+---------------------------+
| Script name | Execution time in seconds |
+-------------------------+---------------------------+
| With create_empty_fopen | 1.4960081577301 |
| With create_empty_fpc | 1.2142379283905 |
| With copy_empty | 1.4280989170074 |
| With touch_empty | 1.0558199882507 |
+-------------------------+---------------------------+
触摸速度最快。在那之后file_put_contents。复制并创建一个空文件的速度几乎相同。
答案 1 :(得分:3)
由于各种原因,复制操作通常非常昂贵。我每1000次运行以下操作来比较它们:
copy
touch
fopen, fwrite, fclose
fopen, fclose //this still creates the file
fopen //files closed automatically, but this may take up more memory.
touch
的速度始终是任何fopen
方法的两倍(所有速度都相同)。 copy
始终是最慢的。
就内存而言,fopen
可能会使用更多内容,因为您必须存储文件句柄,而touch
和copy
只返回布尔值。
总之,请使用touch
。
答案 2 :(得分:1)
我相信这是最便宜的:
$file = "path/filename.html";
touch($file)
or die("Error creating '$file'.\n");
echo "'$file' created\n";
如何衡量差异:
测量代码的执行时间称为 profiling ,并使用 profiler 完成。可选的xdebug模块provides profiling。
您可以尝试直接在PHP中测量它:
$start = time();
// ...
$end = time();
$executionSeconds = $end - $start;
echo "Completed in $executionSeconds seconds.";
注意:我不希望这一点特别准确或有用。使用分析器是您的最佳选择。