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

PHP中多次调用fileperms获取文件权限结果异常问题咨询

问题原因

该现象确实是PHP内置的文件状态缓存机制导致的。PHP为了降低频繁读取文件状态带来的性能开销,会对fileperms()、stat()、filemtime()、file_exists()等所有文件属性查询类函数的返回结果做请求级缓存:同一次请求内同一个文件路径首次查询后的结果会被暂存,后续重复调用对应函数时会直接返回缓存的旧值,不会重新读取磁盘上的实际文件属性,因此修改文件权限后再调用fileperms()拿到的还是首次查询的旧结果。

解决方案
  • 每次执行修改文件属性的操作(包括chmod、chown、rename、写入文件内容等会变更文件状态的操作)后,调用clearstatcache()函数清空缓存,再执行文件属性查询即可拿到最新值。
  • 如果只需要清空特定文件的缓存,可以传入参数缩小清理范围:clearstatcache(true, '目标文件路径'),相比清空全部缓存的性能开销更小。
修正后的代码示例
chmod('file.txt', 0600); 
if ((fileperms('file.txt') & 0777) === 0600) {} // 首次查询无缓存,判断结果为true

chmod('file.txt', 0660); 
clearstatcache(true, 'file.txt'); // 清空指定文件的状态缓存
if ((fileperms('file.txt') & 0777) === 0660) {} // 此时判断结果为true

chmod('file.txt', 0666); 
clearstatcache(true, 'file.txt'); // 再次清空缓存
if ((fileperms('file.txt') & 0777) === 0666) {} // 此时判断结果为true
补充说明

该缓存为请求级缓存,仅在当前PHP进程处理单请求的生命周期内有效,请求处理结束后缓存会自动销毁,跨请求的文件状态查询不需要额外处理缓存问题。

内容的提问来源于stack exchange,提问作者Daan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:15:08