配置文件(php.ini)在 PHP 啟動(dòng)時(shí)被讀取。對于服務(wù)器模塊版本的 PHP,僅在 web 服務(wù)器啟動(dòng)時(shí)讀取一次。對于 CGI 和 CLI 版本,每次調(diào)用都會(huì)讀取。
php.ini 的搜索路徑如下(按順序):
PHPIniDir
指令,CGI 和 CLI 中的 -c
命令行選項(xiàng))。
php.ini
文件位置。注冊表目錄所在的位置取決于你的系統(tǒng)是 32 位還是 64 位。32-bit
的 PHP 運(yùn)行在 32-bit 的系統(tǒng)或 64-bit 的 PHP 運(yùn)行在 64-bit 系統(tǒng)時(shí)使用 [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
32-bit 的 PHP 運(yùn)行在 64-bit 的系統(tǒng)上時(shí),則使用 [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
] 替代。
系統(tǒng)版本跟 PHP 版本架構(gòu)一致時(shí),會(huì)按以下順序依次進(jìn)行檢查:
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]
和
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]
,其中的
x,y 和 z 指的是 PHP 主版本號,次版本號和發(fā)行批次。
對于 32 bit 版本的 PHP 運(yùn)行在 64 bit 系統(tǒng)上的情況,則會(huì)按以下順序依次進(jìn)行檢查:
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z]
,
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]
和
[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x]
,其中的
x,y 和 z 指的是 PHP 主版本號,次版本號和發(fā)行批次。如果在其中任何目錄下的
IniFilePath
有鍵值,則第一個(gè)值將被用作
php.ini
的位置(僅適用于 Windows)。
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
內(nèi) IniFilePath
的值(Windows 注冊表位置)。
--with-config-file-path
編譯時(shí)選項(xiàng)指定的位置。
如果存在 php-SAPI.ini(SAPI 是當(dāng)前所用的 SAPI 名稱,因此實(shí)際文件名為 php-cli.ini 或 php-apache.ini 等),則會(huì)用它替代 php.ini。SAPI 的名稱可以用 php_sapi_name() 來測定。
注意:
Apache web 服務(wù)器在啟動(dòng)時(shí)會(huì)把目錄轉(zhuǎn)到根目錄,這將導(dǎo)致 PHP 嘗試在根目錄下讀取 php.ini,如果存在的話。
在 php.ini 中可以使用環(huán)境變量,如下示例:
示例 #1 php.ini 中的環(huán)境變量
; PHP_MEMORY_LIMIT 來自于環(huán)境變量的值 memory_limit = ${PHP_MEMORY_LIMIT}
由擴(kuò)展庫處理的 php.ini 指令,其文檔分別在各擴(kuò)展庫的頁面。內(nèi)核配置選項(xiàng)見附錄。不過也許不是所有的 PHP 指令都在手冊中有文檔說明。要得到自己的 PHP 版本中的配置指令完整列表,請閱讀 php.ini 文件,其中都有注釋。此外,也許從 Git 得到的? 最新版 php.ini 也有幫助。
示例 #2 php.ini 例子
; any text on a line after an unquoted semicolon (;) is ignored [php] ; section markers (text within square brackets) are also ignored ; Boolean values can be set to either: ; true, on, yes ; or false, off, no, none register_globals = off track_errors = yes ; you can enclose strings in double-quotes include_path = ".:/usr/local/lib/php" ; backslashes are treated the same as any other character include_path = ".;c:\php\lib"
在 .ini 文件內(nèi)可能會(huì)引用已存在的 .ini
變量。例如:open_basedir = ${open_basedir}
":/new/dir"
。
可以通過配置,讓 PHP 在讀完 php.ini 后,掃描指定路徑中的附加 .ini 配置文件。編譯時(shí)通過 --with-config-file-scan-dir 參數(shù)來指定要掃描的目錄。掃描路徑也可以通過環(huán)境變量 PHP_INI_SCAN_DIR 來設(shè)置。
通過在掃描路徑配置中加入特定系統(tǒng)的目錄分隔符(Windows、NetWare
和 RISC OS 下是 ;
;其它操作系統(tǒng)下是 :
;該值可以通過
PHP 常量 PATH_SEPARATOR
獲取),還可以設(shè)置多個(gè)掃描路徑。如果
PHP_INI_SCAN_DIR 為空,PHP 一樣會(huì)掃描在編譯時(shí)指定的
--with-config-file-scan-dir 此路徑。
對于每個(gè)目錄而言,PHP 會(huì)以首字符順序?yàn)閮?yōu)先級,掃描該目錄下所有的 .ini
結(jié)尾的配置文件。所有被截入的配置文件,可以通過
php_ini_scanned_files() 函數(shù)來獲取列表,也可以通過 PHP 命令行加入
--ini 參數(shù)來查看。
以下假設(shè) PHP 配置為 --with-config-file-scan-dir=/etc/php.d 并且目錄分隔符為 : $ php PHP 會(huì)加載 /etc/php.d/*.ini 全部配置文件。 $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP 會(huì)加載 /usr/local/etc/php.d/*.ini 全部配置文件。 $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP 會(huì)加載 /etc/php.d/*.ini 下的全部配置文件,然后加載 /usr/local/etc/php.d/*.ini 下的全部配置文件。 $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP 會(huì)加載 /usr/local/etc/php.d/*.ini 下的全部配置文件,然后加載 /etc/php.d/*.ini 下的全部配置文件。