配置檔案

配置檔案

配置檔案(php.ini)在 PHP 啟動時被讀取。對於伺服器模組版本的 PHP,僅在 web 伺服器啟動時讀取一次。對於 CGICLI 版本,每次呼叫都會讀取。

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:\windowsC:\winnt),或 --with-config-file-path 編譯時選項指定的位置。

如果存在 php-SAPI.ini(SAPI 是目前所用的 SAPI 名稱,因此實際檔名為 php-cli.iniphp-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 下的全部配置檔案。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *