я бегу Grav CMS на сервере Linode Ubuntu 16.04, где PHP7 (php-fpm + nginx) возвращает кэшированные результаты при выводе содержимого каталога. Я впервые столкнулся с проблемой FilesystemIterator
, но это не ограничивается этим классом — та же проблема возникает, когда я использую scandir
.
В основном происходит то, что каждый раз, когда я синхронизирую новый контент с сервером, использую ли я rsync или FTP, PHP возвращает старое содержимое определенной папки. Я пытался вызвать clearstatcache
, но это не помогло — даже если я вызвал его из соответствующего файла PHP, непосредственно перед сканированием каталога.
touch
Использование файлов для обновления их mtime тоже не помогает. Однако перезапуск службы php-fpm работает.
Возможно ли, что PHP кэширует содержимое каталога другим способом? Может ли это быть файловая система, которая каким-то образом обманывает PHP?
Есть, но это не то, что я бы использовал в производстве.
Сначала запустите синхронизацию: $ sync
Эта команда записывает любые данные кэша, которые не были записаны на диск, на диск.
Бесплатный кеш страниц:echo 1 > /proc/sys/vm/drop_caches
Бесплатные зубные и иноды: echo 2 > /proc/sys/vm/drop_caches
Бесплатный pagecache, dentries и inode: echo 3 > /proc/sys/vm/drop_caches
При этом я бы тоже посмотрел на realpath_cache
,
Оказывается, проблема, с которой я столкнулся, была связана не с ОС или PHP, а с самой Grav CMS — особенно с тем, как она кэширует объекты страниц. Он не делает недействительными кэшированные страницы, если все, что изменилось, это связанные медиа-файлы. Отключение настройки глобального кэша для Grav помогло решить эту проблему, но я также открыл вопрос о Grav репо чтобы увидеть, если это целое поведение или нет.