【发布时间】:2022-11-17 04:47:25
【问题描述】:
【问题讨论】:
-
如果它不说,那么你就不能指望它。你可以检查源代码。
-
看this commit,我觉得答案是肯定的。
-
很多不同的答案,有点困惑
标签: php caching documentation
【问题讨论】:
标签: php caching documentation
我做了一个快速演示出现表明它是不是缓存。然而,看到编辑,也
$filename = __DIR__.'/test.txt';
@unlink($filename);
touch($filename);
echo 'STAT - Size before write: '.stat($filename)['size'], PHP_EOL;
file_put_contents($filename, 'test');
echo 'STAT - Size after write: '.stat($filename)['size'], PHP_EOL;
clearstatcache();
echo 'STAT - Size after cache clear: '.stat($filename)['size'], PHP_EOL;
@unlink($filename);
touch($filename);
$fp = fopen($filename, 'wb');
echo 'FSTAT - Size before write: '.fstat($fp)['size'], PHP_EOL;
fwrite($fp, 'test');
echo 'FSTAT - Size after write: '.fstat($fp)['size'], PHP_EOL;
clearstatcache();
echo 'FSTAT - Size after cache clear: '.fstat($fp)['size'], PHP_EOL;
输出:
STAT - Size before write: 0
STAT - Size after write: 0
STAT - Size after cache clear: 4
FSTAT - Size before write: 0
FSTAT - Size after write: 4
FSTAT - Size after cache clear: 4
编辑
根据@Barmar,我再次运行了测试,这次只有一个 fstat 调用,然后是一个睡眠(10),然后我用 vim 手动快速更新文件,然后最后一个 fstat 调用(全部在同一个请求),然后那个返回缓存.
然后我再次运行它,这次在最后一个 fstat 之前使用 clearstatcache(),它没有改变。我还尝试了 w 和 r 模式对 fopen 的测试,结果相同。
所以似乎确实有某种缓存,但我不认为它是统计缓存。
【讨论】:
stat 进行比较,这是我看到大多数人遇到麻烦的地方,因为本地 FS 更改并不总是很明显。但我刚刚用 sleep 进行了测试,用 vim 快速写入文件,然后检查统计信息,显示它已缓存。