Apache-2.2
VirtualHost 中的自定義 PHPINIDir 設置會影響其他 VirtualHost
其中一位客戶要求為他的網站進行個人 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
<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
到給定目錄,僅針對此虛擬主機。