VirtualHost 中的自定义 PHPINIDir 设置会影响其他 VirtualHosts

VirtualHost 中的自定义 PHPINIDir 设置会影响其他 VirtualHosts

其中一位客户要求为他的网站提供个人 php.ini 配置,因此我将他的 VirtualHost 设置如下:

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

客户端在 /home/alex/ 下创建了 php.ini 文件,其中仅包含以下设置:

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

完成此操作后,他开始抱怨他看到了其他客户网站生成的所有其他会话文件。

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

问题是为什么?因为PHPINIDir仅在一个特定的 内指定VirtualHost

答案1

各个虚拟主机无法拥有自己的文件,PHPINIDir因为该php.ini文件在 apache+mod_php 启动时就被读取了,甚至在它开始处理请求之前。无论出于什么原因,此指令不会给出警告,而是会设置全局 INI 目录并继续运行。

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

<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为给定的目录,仅针对此虚拟主机。

相关内容