You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 19:40:41