我在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?
答案 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以查看这是否为有意行为。