將 PHP 升級至 8.0 以上版本(例如 PHP 8.3)後,執行或啟動伺服器時可能會遇到類似以下的警告訊息:
PHP Warning: PHP Startup: Unable to load dynamic library 'php_xmlrpc.dll' (tried: C:\Program Files\PHP\v8.3\ext\php_xmlrpc.dll (找不到指定的模組。), C:\Program Files\PHP\v8.3\ext\php_php_xmlrpc.dll.dll (找不到指定的模組。)) in Unknown on line 0
原因分析
此錯誤通常源自以下兩個主要原因:
- 擴充套件(Extension)命名規則變更在舊版 PHP(PHP 7.x 及更早版本)中,設定檔常寫為
extension=php_gd2.dll或帶有php_前綴。從 PHP 8.0 開始,官方簡化了指定方式,只需填寫擴充套件簡稱(例如extension=gd)。若仍使用舊式檔名,PHP 在自動補充路徑時會產生如php_php_...dll.dll的重複路徑而找不到檔案。 - 部分舊版擴充套件已被移除(以 XMLRPC 為例)
xmlrpc擴充套件已於 PHP 8.0 起從核心移除並移至 PECL。因此 PHP 8.3 預設的ext/目錄下已不再提供php_xmlrpc.dll。
解決步驟
步驟 1:開啟 php.ini 設定檔
找到目前 PHP 8.3 環境所使用的 php.ini 檔案(例如:C:\Program Files\PHP\v8.3\php.ini)。
步驟 2:修正或停用問題擴充套件
以系統管理員權限開啟 php.ini:
若為舊版命名格式問題(如 GD 繪圖庫):搜尋 gd,將舊式的設定修正為新版標準格式:
舊寫法:
extension=php_gd2.dll
請改為:
extension=gd
若為已移出核心的擴充套件(如 XMLRPC):
搜尋 xmlrpc,若無特殊需要,直接在行首加上分號 ; 將其註解停用:
;extension=php_xmlrpc.dll
;extension=xmlrpc
步驟 3:確認擴充套件目錄 (extension_dir)
確認 php.ini 中的 extension_dir 指令已正確啟用並指向正確路徑:
extension_dir = "ext"
(或使用絕對路徑:extension_dir = "C:\Program Files\PHP\v8.3\ext")
步骤 4:重啟 Web 伺服器 / PHP 服務
儲存 php.ini 後,重啟 Apache、Nginx、IIS 或重開 PHP CLI 環境,以使新的設定生效。
The PHP startup warnings require php.ini cleanup:
date.timezone = Asia/Taipei
extension=gd
Remove duplicate entries for curl , mysqli , mbstring , openssl , ldap , and pdo_mysql .
Also remove or install matching extensions:
- xmlrpc : unavailable in standard PHP 8.3; comment it out unless separately installed.
- pdo_sqlsrv_82_nts_x64 : replace with the PHP 8.3 NTS x64 driver, or remove it if unused.
Do not suppress these with error_reporting(0) ; correcting php.ini will eliminate the startup log noise