2024 日本 PHP 研討會

php.ini 章節列表

此列表包含您可以設定的 php.ini 章節,以便根據每個主機或路徑設定您的 PHP 設定。這些章節是選用的。

這些區段並不會直接影響 PHP。它們是用於將其他 php.ini 指令歸類在一起,並讓它們作用於特定主機或特定路徑。

這些區段僅在 CGI/FastCGI 模式下使用,且不能設定 extensionzend_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

新增註釋

使用者貢獻的註釋 8 則註釋

public at grik dot net
15 年前
在 [HOST=...] 中,應該只使用伺服器名稱列表中的第一個伺服器名稱。

例如,如果您有
server_name example.com, example2.com;
並且會在瀏覽器中使用 www.example.com,
則在 php.ini 中使用 [HOST=example.com] 適用於這兩個網址。

PHP 並非查看 HOST 請求標頭(如同我預期的那樣),而是查看 SERVER_NAME 參數(預設為名稱列表中的第一個,無論 HOST 是什麼)。
robinhook at mail dot com
6 年前
在 Apache 2.4 和 php-fpm 7.1.16 下,這個 HOST 和 PATH 區段在 php.ini 中似乎不適用於 php_value 或 php_admin_value open_basedir 或 include_path 指令。
phpinfo() 在主要值和區域值中顯示「無」。
robinhook at mail dot com
6 年前
抱歉,我之前的註釋有誤。我看了一些錯誤的教學。
正確的語法是:directive = 'value'
而不是像這樣:php_value[directive] = "somevalue"
crash at lubyte dot de
14 年前
如果您使用的系統使用單獨的 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=。
leo
13 年前
剛開發了可能是第一個 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」。
dasloch at absatzen dot de
4 年前
請注意,您無法在 [PATH=](可能還有 [HOST=])區段中有效地設定 syslog.*,因為系統日誌記錄器每個 php-fpm 工作進程只初始化一次,而不是每個請求初始化一次。
z dot himdi at bita dot nl
13 年前
我注意到在 Windows IIS 7 伺服器上,[PATH=] 並未被監聽。然而,[HOST=] 有效。
robert dot johnson at icap dot com
14 年前
新增 PATH= 僅適用於指定的路径,不包含子目錄,您必須為每個子目錄新增一個 PATH= 值。

此外,某些設定即使 phpinfo 辨識並將每個資料夾的值顯示為「local」值,而將預設值顯示為「master」值,也無效。

「fastcgi.impersonate」始終使用主要設定。
To Top