配置檔案
配置檔案(php.ini)在 PHP 啟動時被讀取。對於伺服器模組版本的 PHP,僅在 web 伺服器啟動時讀取一次。對於 CGI 和 CLI 版本,每次呼叫都會讀取。
php.ini 的搜索路徑如下(按順序):
-
SAPI 模組所指定的位置(Apache 2 中的
PHPIniDir
指令,CGI 和 CLI 中的-c
命令列選項)。 - PHPRC 環境變數。
-
可以為不同版本的 PHP 指定不同的
php.ini
檔案位置。註冊表目錄所在的位置取決於你的系統是 32 位還是 64 位。32-bit 的 PHP 執行在 32-bit 的系統或 64-bit 的 PHP 執行在 64-bit 系統時使用[(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
32-bit 的 PHP 執行在 64-bit 的系統上時,則使用[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]
] 替代。 系統版本跟 PHP 版本架構一致時,會按以下順序依次進行檢查:[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 主版本號,次版本號和發行批次。 對於 32 bit 版本的 PHP 執行在 64 bit 系統上的情況,則會按以下順序依次進行檢查:[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 主版本號,次版本號和發行批次。如果在其中任何目錄下的IniFilePath
有鍵值,則第一個值將被用作php.ini
的位置(僅適用於 Windows)。 -
[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]
內IniFilePath
的值(Windows 註冊表位置)。 - 目前工作目錄(對於 CLI)。
- web 伺服器目錄(對於 SAPI 模組)或 PHP 所在目錄(Windows 下其它情況)。
-
Windows 目錄(C:\windows
或 C:\winnt),或
--with-config-file-path
編譯時選項指定的位置。
如果存在 php-SAPI.ini(SAPI 是目前所用的 SAPI 名稱,因此實際檔名為 php-cli.ini 或 php-apache.ini 等),則會用它替代 php.ini。SAPI 的名稱可以用 php_sapi_name() 來測定。
注意:
Apache web 伺服器在啟動時會把目錄轉到根目錄,這將導致 PHP 嘗試在根目錄下讀取 php.ini,如果存在的話。
在 php.ini 中可以使用環境變數,如下示例:
示例 #1 php.ini 中的環境變數
; PHP_MEMORY_LIMIT 來自於環境變數的值 memory_limit = ${PHP_MEMORY_LIMIT}
由擴充套件庫處理的 php.ini 指令,其文件分別在各擴充套件庫的頁面。內核配置選項見附錄。不過也許不是所有的 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 檔案內可能會引用已存在的 .ini
變數。例如:open_basedir = ${open_basedir}
":/new/dir"
。
掃瞄路徑配置
可以通過配置,讓 PHP 在讀完 php.ini 后,掃瞄指定路徑中的附加 .ini 配置檔案。編譯時通過 --with-config-file-scan-dir 參數來指定要掃瞄的目錄。掃瞄路徑也可以通過環境變數 PHP_INI_SCAN_DIR 來設定。
通過在掃瞄路徑配置中加入特定系統的目錄分隔符(Windows、NetWare
和 RISC OS 下是 ;
;其它操作系統下是 :
;該值可以通過
PHP 常量 PATH_SEPARATOR
獲取),還可以設定多個掃瞄路徑。如果
PHP_INI_SCAN_DIR 為空,PHP 一樣會掃瞄在編譯時指定的
--with-config-file-scan-dir 此路徑。
對於每個目錄而言,PHP 會以首字元順序為優先順序,掃瞄該目錄下所有的 .ini
結尾的配置檔案。所有被截入的配置檔案,可以通過
php_ini_scanned_files() 函式來獲取列表,也可以通過 PHP 命令列加入
--ini 參數來檢視。
以下假設 PHP 配置為 --with-config-file-scan-dir=/etc/php.d 並且目錄分隔符為 : $ php PHP 會載入 /etc/php.d/*.ini 全部配置檔案。 $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP 會載入 /usr/local/etc/php.d/*.ini 全部配置檔案。 $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP 會載入 /etc/php.d/*.ini 下的全部配置檔案,然後載入 /usr/local/etc/php.d/*.ini 下的全部配置檔案。 $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP 會載入 /usr/local/etc/php.d/*.ini 下的全部配置檔案,然後載入 /etc/php.d/*.ini 下的全部配置檔案。