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

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

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

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

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

0

Решение

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

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

1

Другие решения

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

0

По вопросам рекламы [email protected]