一位客户要求为他的网站进行个人 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
?
各个虚拟主机不能有自己的
PHPINIDir
,因为php.ini
文件在 apache+mod_php 启动时被读取,甚至在它开始处理请求之前。无论出于何种原因,该指令不会对这种用法发出警告,而是设置全局 INI 目录并继续其愉快的方式。相反,您必须使用
php_value
、php_flag
和Apache 指令来覆盖您想要为此虚拟主机设置的特定设置。(见这里)在这种情况下,你会这样做:php_admin_value
php_admin_flag
在这种情况下,它将加载默认
php.ini
文件,然后更改session.save_path
到给定目录,仅用于此虚拟主机。