2

这样做:

php -r 'unlink("path"); clearstatcache(); echo file_exists("path");'

其中 path 是我的 linux 机器上文件的完整绝对路径。1即使文件明显不存在,命令也会返回“ ”。你可以运行这个命令一百万次,它总是会告诉你文件在那里。

跑步:

ls path

告诉你没有这样的文件。

是什么赋予了?

更新:我知道 clearstatcache()。在这种情况下,这无济于事。此外,我正在使用 cli 运行它。从运行到运行没有任何变化。我也在运行 ubuntu 11.10 的 64 位 VM 上。

路径只是文件系统上的一个路径:/var/www/yo.txt。www 是一个 nfs 共享挂载,不确定是否与它有关。该文件已从远程计算机中删除,但本地计算机似乎知道它不存在。目录上的“ls”不显示任何文件,并且带有路径声明的 ls 表示该文件不存在。该文件只有几 kb,没什么大不了的。

4

1 回答 1

1

PHP 说的是它知道的真相。罪魁祸首是 NFS 属性缓存。您可以clearstatcache整天打电话,但没有任何效果:NFS 负责。

我探索了另一个 SO 答案中发生了什么,但简短的答案是:调整您的 NFS 挂载选项以提供更快的答案(尝试noac)或使用opendir()并使closedir()NFS 缓存无效然后调用clearstatcache(),例如:

php -r 'unlink("path"); $d = dirname("path"); opendir($d); closedir($d); clearstatcache(); echo file_exists("path");'
于 2017-01-18T16:39:34.077 回答