Apache-2.2

VirtualHost 中的自定義 PHPINIDir 設置會影響其他 VirtualHost

  • July 26, 2019

其中一位客戶要求為他的網站進行個人 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_valuephp_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到給定目錄,僅針對此虛擬主機。

引用自:https://serverfault.com/questions/461702