PHP 8.1.12中fstat()的返回结果是否被缓存?
PHP 8.1.12中fstat()的缓存行为测试结论
问题背景
想了解PHP 8.1.12中的fstat()是否会被缓存,官方文档未提及相关信息。
测试说明
- 创建两个脚本,分别单独运行及同时运行(使用排他锁
flock($fp, LOCK_EX)防止互相覆盖) - 在写入5MB数据的循环不同阶段,打印
print_r(fstat($fp))查看结果 - 同时通过
var_dump(realpath_cache_get())检测realpath缓存,并测试clearstatcache()是否能清除相关缓存
*注:需在两个文件中都使用flock,若仅在一个文件中使用,另一个文件可写入未加锁的先运行文件。
测试结果
- 仅
atime(最后访问时间,Unix时间戳)会被缓存 - 该缓存不在realpath缓存范围内,因此
clearstatcache()无法清除,只能通过重启机器或等待缓存超时来刷新 - 本人仅需
fstat返回的size元素,不受此缓存影响 - 遗憾无法提供测试源码,因测试过程中多次修改尝试各种场景
最终结论
fstat()仅atime元素会被缓存,且该缓存不属于realpath缓存,clearstatcache()对其无效。
感谢所有提供帮助的人。
内容的提问来源于stack exchange,提问作者user18302645
相关产品推荐
相关产品推荐

