VirtualHost中的自定义PHPINIDir设置影响其他虚拟主机

其中一个客户请求为他的网站个人php.iniconfiguration,所以我已经设置他的VirtualHost如下:

<VirtualHost *:80> DocumentRoot "/home/alex/www.domain.tld" ServerName www.domain.tld AssignUserID alex alex PHPINIDir /home/alex/php.ini </VirtualHost> 

客户端在/ home / alex /下创build了php.ini文件,其中只包含这个设置:

session.save_path = "/home/alex/.php_sessions/"

毕竟他开始抱怨他看到其他客户的网站产生的所有其他会话文件。

在做了一些基本的故障排除之后,我意识到,他的php.ini设置正在影响httpd-vhosts.conf中指定的所有网站。

问题是为什么? 由于PHPINIDir只在一个特定的VirtualHost指定?

单独的虚拟主机不能拥有自己的PHPINIDir因为在apache + mod_php启动时读取php.ini文件,甚至在开始处理请求之前。 无论出于何种原因,不要用这个用法给出警告,这个指令会设置全局的INI目录并继续其快乐的方式。

相反,您必须使用php_valuephp_flagphp_admin_valuephp_admin_flag Apache指令来覆盖此虚拟主机所需的特定设置。 (见这里 )在这种情况下,你会做:

 <VirtualHost *:80> DocumentRoot "/home/alex/www.domain.tld" ServerName www.domain.tld AssignUserID alex alex php_value session.save_path "/home/alex/.php_sessions/" </VirtualHost> 

在这种情况下,它将加载默认的php.ini文件,然后将session.save_path更改为给定的目录,仅用于此虚拟主机。