其中一位客户要求为他的网站提供个人 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_value
、php_flag
和php_admin_value
php_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
为给定的目录,仅针对此虚拟主机。