PHP перечисляет файлы, которые не существуют

Я использую Grav CMS на сервере Linode Ubuntu 16.04, где PHP7 (php-fpm + nginx) возвращает кэшированные результаты при выводе содержимого каталога. Я впервые столкнулся с проблемой FilesystemIterator, но это не ограничивается этим классом - та же проблема возникает, когда я использую scandir,

Обычно происходит то, что каждый раз, когда я синхронизирую новый контент с сервером, использую ли я rsync или FTP, PHP возвращает старое содержимое определенной папки. Я пытался вызвать clearstatcache, но это не помогло - даже если я вызвал его из соответствующего файла PHP, непосредственно перед сканированием каталога.

touch Использование файлов для обновления их mtime тоже не помогает. Однако перезапуск службы php-fpm работает.

Возможно ли, что PHP кэширует содержимое каталога другим способом? Может ли это быть файловая система, которая так или иначе обманывает PHP?

2 ответа

Решение

Оказывается, проблема, с которой я столкнулся, была связана не с ОС или PHP, а с самой Grav CMS - особенно с тем, как она кэширует объекты страниц. Он не делает недействительными кэшированные страницы, если все, что изменилось, это связанные медиа-файлы. Отключение настройки глобального кэша для Grav помогло решить эту проблему, но я также открыл проблему в репозитории Grav, чтобы посмотреть, является ли это целевым поведением или нет.

Есть, но это не то, что я бы использовал в производстве.

Сначала запустите синхронизацию: $ 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,

Другие вопросы по тегам