PHP列出了不存在的文件

时间:2016-09-29 08:36:43

标签: php ubuntu grav

我在Linode Ubuntu 16.04服务器上运行http://ericasadun.com/2015/05/11/swift-vs-void/,其中PHP7(php-fpm + nginx)在列出目录内容时返回缓存结果。我第一次遇到Grav CMS的问题,但不仅限于该类 - 当我使用FilesystemIterator时会出现同样的问题。

基本上发生的事情是,每当我将新内容同步到服务器时,无论我使用rsync还是FTP,PHP都会返回特定文件夹的旧内容。我试过调用scandir,但它没有在我扫描目录之前,即使我从适当的PHP文件中调用它也没有帮助。

touch将文件更新为mtime也无济于事。但是,重新启动php-fpm服务确实有效。

PHP是否有可能以其他方式缓存目录的内容?是不是文件系统以某种方式欺骗PHP?

2 个答案:

答案 0 :(得分:1)

但是我不会在制作中使用它。

首先运行同步:$ sync 此命令将尚未写入磁盘的任何高速缓存数据写入磁盘。

免费的pagecache:echo 1 > /proc/sys/vm/drop_caches

免费dentries和inode:echo 2 > /proc/sys/vm/drop_caches

免费的pagecache,dentries和inode:echo 3 > /proc/sys/vm/drop_caches

话虽如此,我也会看一下realpath_cache

答案 1 :(得分:0)

事实证明,我所遇到的问题不是由于操作系统或PHP,而是由于Grav CMS本身 - 特别是它如何缓存页面对象。如果已更改的所有内容都是关联的媒体文件,则它不会使缓存的页面无效。关闭Grav的全局缓存设置有助于解决此问题,但我还打开了an issue on the Grav repo以查看这是否为有意行为。