為了讓 PHP 能夠看到擴充套件,在 php.ini 中指定擴充套件目錄位址時,需要指定根目錄。例如 extension_dir = "php/ext"
在 Windows 上載入 PHP 擴充套件有兩種方法:編譯到 PHP 中,或載入 DLL。載入預先編譯的擴充套件是最簡單且首選的方式。
要載入擴充套件,它必須以 .dll 檔案的形式在系統上可用。所有擴充套件都會由 PHP Group 自動定期編譯(下載請參閱下一節)。
要將擴充套件編譯到 PHP 中,請參閱從原始碼建置文件。
要編譯獨立的擴充套件(也就是 DLL 檔案),請參閱從原始碼建置文件。如果 PHP 發行版本和 PECL 中都沒有 DLL 檔案,則可能需要先編譯它才能使用擴充套件。
PHP 擴充套件通常稱為 php_*.dll(其中星號代表擴充套件的名稱),它們位於 PHP\ext 資料夾下。
PHP 搭載了大多數開發者最常用到的擴充套件。這些擴充套件稱為 *內建* 擴充套件。
然而,如果內建擴充套件無法提供所需的功能,您或許可以在 » PECL 找到符合需求的擴充套件。PHP 擴充套件社群庫 (PECL) 是一個 PHP 擴充套件的儲存庫,提供所有已知擴充套件的目錄,並提供下載和開發 PHP 擴充套件的平台。
如果已針對特定用途開發了擴充套件,它可能會被託管在 PECL 上,以便其他有相同需求的人可以受益。這樣做的一個好處是,它有機會收到回饋、(希望是) 感謝、錯誤回報,甚至修正/修補程式。在提交擴充套件到 PECL 託管之前,請閱讀 » PECL 提交。
通常每個 DLL 會有多個版本可供下載
等等。
請記住,擴充套件設定應該與所使用的 PHP 執行檔的所有設定相符。以下的 PHP 程式碼會顯示 *所有* PHP 設定
範例 #1 呼叫 phpinfo() 函式
<?php
phpinfo();
?>
或者從命令列執行
drive:\path\to\php\executable\php.exe -i
載入 PHP 擴充套件最常見的方法是在 php.ini 設定檔中加入它。請注意,許多擴充套件已經存在於 php.ini 中,只需要移除分號即可啟用它們。
請注意,從 PHP 7.2.0 開始,可以使用擴充套件名稱代替擴充套件的檔名。由於這與作業系統無關且更容易操作,尤其是對於新手來說,這已成為指定要載入擴充套件的建議方法。為了與先前版本相容,仍然支援使用檔名。
;extension=php_extname.dll
extension=php_extname.dll
; As of PHP 7.2.0, prefer: extension=extname zend_extension=another_extension
然而,有些網頁伺服器會造成混淆,因為它們使用的 php.ini 並非與 PHP 執行檔放在一起。要找出實際的 php.ini 位置,請在 phpinfo() 的輸出中尋找其路徑。
Configuration File (php.ini) Path C:\WINDOWS
Loaded Configuration File C:\Program Files\PHP\8.2\php.ini
啟用擴充套件後,儲存 php.ini,重新啟動網頁伺服器,然後再次檢查 phpinfo()。新的擴充套件現在應該會有它自己的區段。
如果擴充套件沒有出現在 phpinfo() 中,則應檢查記錄檔以了解問題的來源。
如果從命令列 (CLI) 使用 PHP,則可以直接在螢幕上讀取擴充套件載入錯誤。
如果 PHP 與網頁伺服器一起使用,則記錄檔的位置和格式會因軟體而異。請閱讀網頁伺服器的文件以找到記錄檔,因為這與 PHP 本身無關。
常見問題包括 DLL 及其相依 DLL 的位置、php.ini 中的 "extension_dir" 設定值,以及編譯時期設定不相符。
如果問題出在編譯時期設定不相符,則下載的 DLL 可能不正確。請嘗試使用正確的設定重新下載擴充套件。同樣地,phpinfo() 可以提供很大的幫助。
為了讓 PHP 能夠看到擴充套件,在 php.ini 中指定擴充套件目錄位址時,需要指定根目錄。例如 extension_dir = "php/ext"
除了 ferdnyc 和 dario 的有用評論之外:幾週前,我在新的 Windows 11 系統上使用 PHP 8.1(作為模組)搭配 Apache 完成了設定,運作良好。
今天我想安裝 PECL 擴充套件 php-amqp。這個擴充套件附帶兩個額外的檔案,據說要放在 PHP 的主要目錄中。從命令提示字元執行時一切正常,但使用 Apache 時,擴充套件安裝失敗,顯示「無法載入動態程式庫 'amqp'」。
我嘗試了 100 種在 php.ini 和 http.conf 中標記路徑的方法:c:、C:、\、\\、/、"。我還在根目錄下安裝了一個新的 PHP,以避免路徑中的空格。但都沒有用。
在閱讀 dario 的評論時,我偶然發現他提到了「路徑環境變數」。我檢查了 Windows 的設定,發現我已將 PHP 的路徑新增到「使用者」的路徑設定中,但沒有新增到「系統」的路徑設定中。這就是為什麼它在命令提示字元中可以正常運作,但在以服務方式啟動 Apache 時卻無法運作的原因。將路徑新增到系統路徑設定後,它就能正常運作了。
在 Windows 上,將擴充套件的相依檔案放到您選擇的目錄中,但要放在 PHP 安裝目錄之外。將該目錄新增到 PHP 使用的路徑環境變數中。將 <extension_name>.dll 新增到 PHP 的 extension_dir 中,並更新 php.ini(除非您只是使用 PHP 的 CLI 進行測試)。
這在「解決問題」一節中略有提及,但在 Windows 上安裝 PHP 擴充套件時,(非擴充套件)DLL 檔案位置錯誤通常是一個問題。
許多 PHP 擴充套件不僅附帶擴充套件 DLL,還附帶該擴充套件所需的補充 DLL。(例如,php_luasandbox.dll 附帶 lua5.1.dll,即它所沙盒化的 lua 直譯器。)這些其他 DLL 應與 php.exe 執行檔放在同一個目錄中,而不是放在擴充套件目錄中。
因此,如果 php_luasandbox.dll 安裝在 C:\PHP8.1\ext\php_luasandbox.dll,則直譯器應位於 C:\PHP8.1\lua5.1.dll。這讓 PHP 執行檔 C:\PHP8.1\php.exe 可以在需要時找到這些額外的 DLL。