0

我在 Linode Ubuntu 16.04 服务器上运行Grav CMS,其中 PHP7(php-fpm + nginx)在列出目录内容时返回缓存结果。我第一次遇到这个问题FilesystemIterator,但它不限于那个类——当我使用scandir.

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

touch'ing 文件来更新他们的 mtime 也无济于事。但是,重新启动 php-fpm 服务确实有效。

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

4

2 回答 2

1

有,但我不会在生产中使用它。

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

免费页面缓存: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

于 2016-09-29T08:53:08.230 回答
0

事实证明,我遇到的问题不是由于操作系统或 PHP,而是由于 Grav CMS 本身——特别是它缓存页面对象的方式。如果所有更改的是关联的媒体文件,它不会使缓存页面无效。关闭 Grav 的全局缓存设置有助于解决此问题,但我还在 Grav 存储库上打开了一个问题,以查看这是否是 inteded 行为。

于 2016-09-29T09:22:43.150 回答