在 [HOST=...] 中,應該只使用伺服器名稱列表中的第一個伺服器名稱。
例如,如果您有
server_name example.com, example2.com;
並且會在瀏覽器中使用 www.example.com,
則在 php.ini 中使用 [HOST=example.com] 適用於這兩個網址。
PHP 並非查看 HOST 請求標頭(如同我預期的那樣),而是查看 SERVER_NAME 參數(預設為名稱列表中的第一個,無論 HOST 是什麼)。
此列表包含您可以設定的 php.ini 章節,以便根據每個主機或路徑設定您的 PHP 設定。這些章節是選用的。
這些區段並不會直接影響 PHP。它們是用於將其他 php.ini 指令歸類在一起,並讓它們作用於特定主機或特定路徑。
這些區段僅在 CGI/FastCGI 模式下使用,且不能設定 extension 和 zend_extension 指令。
名稱 | 可變更性 | 變更記錄 |
---|---|---|
[HOST=] | INI_SYSTEM |
|
[PATH=] | INI_SYSTEM |
以下是設定指令的簡短說明。
[HOST=<host>]
此區段允許您定義一組 php.ini 指令,這些指令將在指定的主機上生效。
範例 #1 為 dev. 域名啟用完整的螢幕錯誤回報
[HOST=dev.site.com] error_reporting = E_ALL display_errors = On
[PATH=<path>]
此區段允許您定義一組 php.ini 指令,這些指令將在腳本從指定的路徑執行時生效。
範例 #2 為受保護的區域新增安全性腳本
[PATH=/home/site/public/secure] auto_prepend_file=security.php
在 [HOST=...] 中,應該只使用伺服器名稱列表中的第一個伺服器名稱。
例如,如果您有
server_name example.com, example2.com;
並且會在瀏覽器中使用 www.example.com,
則在 php.ini 中使用 [HOST=example.com] 適用於這兩個網址。
PHP 並非查看 HOST 請求標頭(如同我預期的那樣),而是查看 SERVER_NAME 參數(預設為名稱列表中的第一個,無論 HOST 是什麼)。
在 Apache 2.4 和 php-fpm 7.1.16 下,這個 HOST 和 PATH 區段在 php.ini 中似乎不適用於 php_value 或 php_admin_value open_basedir 或 include_path 指令。
phpinfo() 在主要值和區域值中顯示「無」。
抱歉,我之前的註釋有誤。我看了一些錯誤的教學。
正確的語法是:directive = 'value'
而不是像這樣:php_value[directive] = "somevalue"
如果您使用的系統使用單獨的 PHP ini 檔案來載入擴充功能(Debian、Fedora 和大多數其他發行版都是如此),則 [PATH=] 或 [HOST=] 將會阻止載入在這些 ini 檔案中定義的擴充功能(extension= 和 zend_extension=)。
當我將 hosts.ini 新增到 /etc/php5/cgi/conf.d(Debian 的預設值)時,我遇到了一些麻煩,因為我想為某個主機名稱定義一些預設值。手冊說明 extension= 和 zend_extension= 不允許在 [HOST=] 和 [PATH=] 中使用(見上文)。我發現您可以透過在定義後新增 [PHP] 來輕鬆解決此問題。
例如 hosts.ini
[HOST=dev.example.com]
display_errors = on
[PHP]
這會將區段改回 [PHP],其中允許使用 extension= 和 zend_extension=。
剛開發了可能是第一個 php.ini hack,可以在使用 mod_php 時,只在 PHP 5.3 之前解析新增的指令。
<?php
# 預設停用 eAccelerator
eaccelerator.enable = 0
# 現在,為了避免與 Zend Optimizer+ 的不相容性,我們
# 只想在 PHP 5.2 或更低版本中啟用 eAccelerator。
[HOST=*]
eaccelerator.enable = 1
?>
這裡發生了什麼事?在 PHP 5.3 中,引入了用於根據每個主機設定 PHP 的 php.ini 區段。
https://php.dev.org.tw/manual/en/ini.sections.php
這些區段僅在 CGI/FastCGI 模式下有效,然而,在使用 mod_php 時,PHP 5.2 和 PHP 5.3 解析 php.ini 檔案的方式似乎仍然存在差異:PHP 5.3 會忽略 [HOST=*] 行下面的所有內容,而 PHP 5.2 則不會。
在上面的例子中,PHP 5.3 只讀取「eaccelerator.enable = 0」,然後在無效的指令 [HOST=*] 處停止。然而,PHP 5.2 似乎忽略了無效的指令,並解析了整個設定檔,最終得到「eaccelerator.enable = 1」。
請注意,您無法在 [PATH=](可能還有 [HOST=])區段中有效地設定 syslog.*,因為系統日誌記錄器每個 php-fpm 工作進程只初始化一次,而不是每個請求初始化一次。
新增 PATH= 僅適用於指定的路径,不包含子目錄,您必須為每個子目錄新增一個 PATH= 值。
此外,某些設定即使 phpinfo 辨識並將每個資料夾的值顯示為「local」值,而將預設值顯示為「master」值,也無效。
「fastcgi.impersonate」始終使用主要設定。