php - 文件修改时间检查的成本

标签 php performance filemtime

对于 Linux 下包含少量字节的文件,我只需要处理自上次处理以来发生更改的情况。 我通过调用 PHP clearstatcache(); 检查文件是否已更改。 filemtime(); 定期。 由于整个文件总是很小,因此删除对 filemtime 的调用并通过将内容与过去的内容进行比较来检查文件更改是否会提高性能? 或者就性能而言,最好的方法是什么。

最佳答案

使用filemtime +clearstatcache

增强@Ben_D的测试:

<?php

$file = 'small_file.html';
$loops = 1000000;

// filesize (fast)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
    $file_size = filesize($file);
}
$end_time = microtime(1);
$time_for_file_size = $end_time - $start_time;

// filemtime (fastest)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
    $file_mtime = filemtime($file);
}
$end_time = microtime(1);
$time_for_filemtime = $end_time - $start_time;

// filemtime + no cache (fast and reliable)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
    clearstatcache();
    $file_mtime_nc = filemtime($file);
}
$end_time = microtime(1);
$time_for_filemtime_nc = $end_time - $start_time;

// file_get_contents  (slow and reliable)
$start_time = microtime(1);
for ($i = 0; $i < $loops; $i++) {
    $file_contents = file_get_contents($file);
}
$end_time = microtime(1);
$time_for_file_get_contents = $end_time - $start_time;

// output
echo "
<p>Working on file '$file'</p>
<p>Size: $file_size B</p>
<p>last modified timestamp: $file_mtime</p>
<p>file contents: $file_contents</p>

<h1>Profile</h1>
<p>filesize: $time_for_file_size</p>
<p>filemtime: $time_for_filemtime</p>
<p>filemtime + no cache: $time_for_filemtime_nc</p>
<p>file_get_contents: $time_for_file_get_contents</p>";

/* End of file */

Results

关于php - 文件修改时间检查的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5850180/

相关文章:

linux - 使用 daystart 和 mmin 查找命令

php - 选择 MySQL 表中倒数第二个数字

PHP 用户名/密码安全

javascript - 如何通过ajax发送自动生成的pdf文件

bash - 为什么管道进入 cat 比不管道进入 cat 更快?

php - 获取文件夹中最近更新文件的文件时间

php - 使用 GROUP BY ... HAVING 优化 MySQL 查询时遇到问题

javascript - 为什么使用 while 循环填充新数组的速度如此之快?

c - C 中字符串和整数之间的处理时间

PHP递归文件文件夹扫描按修改日期排序