这样做:
php -r 'unlink("path"); clearstatcache(); echo file_exists("path");'
其中path是我的linux机器上文件的完整绝对路径。命令返回“1
”,即使该文件显然不存在。你可以运行这个命令一百万次,它总会告诉你文件在那里。
运行:
ls path
告诉你没有这样的文件。
是什么给了什么?更新: 我知道clearstatcache()。在这种情况下,这没有帮助。另外,我正在用cli运行它。从运行到运行没有任何变化。我也在运行ubuntu 11.10的64位虚拟机上运行。
Path只是文件系统上的一个路径:/var/www/yo.txt。 www是一个nfs共享挂载,不确定它是否与它有关。该文件已从远程计算机中删除,但本地计算机似乎知道它不在那里。目录中的“ls”显示没有文件,并且带有路径声明的ls表示该文件不存在。该文件只有几kb,没什么大不了的。
答案 0 :(得分:1)
PHP说实话它知道。罪魁祸首是NFS属性缓存。你可以整天打电话给clearstatcache
,不起作用:NFS负责。
我探讨了in another SO answer发生了什么,但简短的回答是:调整NFS挂载选项以便为您提供更快的答案(尝试noac
)或使用opendir()
和closedir()
使NFS缓存无效,然后调用clearstatcache()
,如:
php -r 'unlink("path"); $d = dirname("path"); opendir($d); closedir($d); clearstatcache(); echo file_exists("path");'