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
,