Назад | Перейти на главную страницу

Выполненные файлы PHP устарели до тех пор, пока не будут «затронуты» (Symlink NFS смонтирует как корневой веб-сайт)

У нас есть приложение PHP с 3 веб-серверами (под управлением Nginx и Apache). Корневой каталог веб-сервера - это каталоги с символическими ссылками, которые указывают на монтирование NFS. Например:

web01 имеет монтирование NFS в /data/webapp, который связан с /home/webapp. Apache обслуживает контент из /home/webapp/www.

Мы также используем ACP для нашего кеша кода операции PHP. Когда мы развертываем код, мы отправляем архивный файл на сервер NFS и извлекаем его.

После обновления RedHat 6, когда мы развертываем наш код, веб-сервер выполняет "устаревшие" файлы PHP до тех пор, пока touch выполняется на файлах PHP. Мы думали что APC может вызывать проблему, но проблема существует даже после очистки кеша кода операции.

Есть идеи о том, как диагностировать, почему выполняется устаревший код PHP?

Это похоже на проблему редактирования файлов на месте. Если вы столкнетесь с этим с помощью nginx, я бы порекомендовал изучить вашу конфигурацию для open_file_cache параметр, но почти то же самое происходит внутри apache2 или php. Сервер кэширует дескрипторы файлов и полностью упускает момент, когда изменения файла не делают кеш недействительным.

Если запущен apache, вы можете исправить это один раз, выполнив команду htcacheclean и убедившись, что контент был обновлен. Если это так, вам нужно слишком внимательно изучить руководство по кэширование диска. Если нет, вам следует продолжить удаление модулей php.