У меня возникла проблема, когда мы запускаем обновление для нашего веб-приложения.
После того, как скрипт обновления завершит работу и получит доступ к веб-приложению через браузер, мы получим ошибки об отсутствии файлов в require_once (), потому что мы переместили некоторые файлы, а в PHP все еще сохраняется старая структура каталогов.
Если у нас есть 120 секунд по умолчанию для истечения срока действия realpath_cache_ttl, тогда все разрешается само по себе, но это не приемлемо по очевидным причинам.
Поэтому я попытался использовать clearstatcache с ограниченным успехом. Я создал отдельный файл (clearstatcache.php), который вызывает только эту функцию (это файл из одной строки), и поместил вызов в наш скрипт установки с помощью curl:
<?php
clearstatcache(true);
Это не похоже на работу, однако, если я вызываю этот файл через браузер, он сразу же начинает работать.
Я использую PHP версии 5.3
Я начал изучать различия заголовка запроса между моим браузером и curl, и единственное, что я могу видеть, это может иметь значение, это файл cookie PHPSESSID.
Итак, мой вопрос, имеет ли значение текущий PHPSESSID (я не думаю, что это должно). Я делаю что-то не так с моим скриптом? Я использую
curl -L http://localhost/clearstatcache.php
РЕДАКТИРОВАТЬ: После дальнейших исследований я решил, что это, вероятно, связано с несколькими запущенными процессами Apache. clearstatcache очищает только кэш текущего процесса apache - когда браузер делает запрос, другой запрос apache обрабатывает запрос, и этот процесс все еще имеет старый кэш.