对PHP手册clearstatcache()相关说明的困惑及技术问询
PHP手册中
file_exists()缓存逻辑的清晰解释 先引用手册原文:
您还需要注意,PHP不会缓存不存在的文件的信息。因此,如果您对一个不存在的文件调用file_exists(),在创建该文件之前它都会返回false。如果您创建了该文件,即使之后删除它,file_exists()仍会返回true。不过unlink()会自动清除缓存。
这段表述确实写得晦涩,拆解后核心逻辑是三个规则:
文件不存在时无缓存
PHP不会缓存「文件不存在」的状态,所以只要文件还没被创建,每次调用file_exists()都会实时检查磁盘,返回false——手册里特意提这点,是为了和后面「文件存在后被缓存」的情况做对比。文件存在后会缓存状态,外部删除不更新缓存
当文件被创建后,file_exists()第一次返回true时,PHP会把这个「文件存在」的状态缓存起来。如果此时文件是被PHP脚本以外的程序删除(比如系统命令、其他进程),PHP不会自动更新缓存,后续调用file_exists()会继续返回缓存里的true。PHP内置
unlink()会自动清缓存
要是用PHP的unlink()函数删除文件,这个函数会自动清除该文件的状态缓存,之后调用file_exists()会重新检查磁盘,返回正确的false。
你猜测的结论完全正确:如果脚本运行期间可能出现外部程序修改文件状态的情况,调用file_exists()前执行clearstatcache(),就能确保拿到实时的文件状态。
内容的提问来源于stack exchange,提问作者Homer
相关产品推荐
相关产品推荐

