Есть php-fpm и opcache (загружены и скомпилированы с php.net)
opcache.enable = 1
opcache.use_cwd = 1
zend_extension=opcache.so
Профили php-fpm запускаются в chroot, т.е. /home/user1/www/index.php -> /www/index.php, /home/user2/www/index.php -> /www/index.php, какой индекс .php см. в обоих случаях.
user1 установил wordpress. user2 имеет собственный index.php.
index.php пользователя user1 был выполнен до index.php пользователя user2.
В таком случае, когда я вызываю index.php из папки user2, я вижу скомпилированный вывод index.php из папки user1.
Текущее решение: я могу запускать разные PHP для каждого пользователя ИЛИ я должен убить свою красивую структуру / home / user1 / www до / home / user1 / user1www /, потому что opcache должен видеть разные пути. Или я отключаю opcache, но это влияет на производительность.
Есть ли способ сохранить / home / user1 / www, / home / user2 / www и т. Д. И позволить opcache работать правильно?
Это известная ошибка: https://bugs.php.net/bug.php?id=69090 который присутствовал годами. Но не больше.
Итак, обновите свою версию php и добавьте это в php.ini:
opcache.validate_root
Это сделает ключи кеша уникальными для каждого пользователя, поэтому, даже если есть два "/htdocs/wp-config.php" в двух разных chroot'ах, отныне они будут получать две разные записи кеша.
Нет, для достижения цели вам нужны уникальные пути внутри chroot. Эта проблема возникает из-за того, что весь рабочий PHP-FPM работает внутри chroot, но использует глобальный OPCache. Внутри chroot он просто не видит ничего, кроме /www
в начале имени файла.
Это можно исправить в базе кода PHP, используя в качестве ключа кеша имя пула и имя файла. Однако, поскольку chroot - это особый случай, насколько мне известно, он не реализован.
Когда я реализовывал chroot PHP-FPM для одного проекта, я создал такую структуру, как:
/srv/www/domain.com/domain.com/docroot
Где был каталог chroot /srv/www/domain.com
. Таким образом, внутри chroot всегда есть уникальный идентификатор для имени файла, чтобы не возникало конфликтов ключей кеша.