有php-fpm和opcache(从php.net下载和编译)
opcache.enable = 1 opcache.use_cwd = 1 zend_extension=opcache.so
php-fpmconfiguration文件运行在chroot中,即/home/user1/www/index.php – > /www/index.php,/home/user2/www/index.php – > /www/index.php,whats what index .php在两种情况下都可以看到。
user1已经安装了wordpress。 user2有自定义的index.php。
user1的index.php是在user2的index.php之前执行的。
在这种情况下,当我从user2文件夹调用index.php我看到从user1文件夹index.php的编译输出。
目前的解决scheme:我可以运行不同的PHP每个用户或者我必须杀死我的美丽的结构/ home / user1 / www到/ home / user1 / user1www /原因opcache需要看到不同的path。 或者我禁用opcache,但它影响性能。
有没有办法保持/ home / user1 / www,/ home / user2 / www等,让opcache正常工作?
这是一个着名的bug: https : //bugs.php.net/bug.php?id=69090这是多年来的。 但不是了。
所以,更新你的PHP版本,并将其添加到php.ini:
opcache.validate_root
这将使得每个用户的caching密钥是唯一的,所以即使在两个不同的chroot中有两个“/htdocs/wp-config.php”,从现在开始,他们将得到两个不同的caching条目。
不,你需要在chroot里有独特的path来实现你的目标。 发生这个问题是因为整个PHP-FPM worker在chroot中工作,但是它使用的是全局OPCache。 在chroot里面,只是在文件名的开头看不到/www 。
这可以通过使用池名和文件名作为caching键在PHP代码库中解决。 但是,由于chroot是一个特殊情况,据我所知还没有实现。
当我为一个项目实现chroot PHP-FPM时,我做了一个如下的结构:
/srv/www/domain.com/domain.com/docroot
chroot目录是/srv/www/domain.com 。 这样在文件名的chroot中总是有一个唯一的标识符,这样就不会发生caching键冲突。