同事 xjb 遇到一個經典問題:透過 Web 方式(Apache)執行 PHP 腳本可正常連接 MySQL,但在 DOS 命令列(CLI)下執行同一支腳本卻報錯:
Fatal Error: undefined function mysql_connect()
php.ini 中已啟用 extension=php_mysql.dll,測試腳本僅包含簡單的連線測試。
| 執行方式 | 結果 |
|---|---|
| Web (https://localhost/test.php) | 顯示「連接成功」 |
| CLI (d:/php/php.exe test.php) | 報錯:undefined function mysql_connect() |
編寫 phpinfo() 腳本分別在兩種環境下執行,仔細比對輸出資訊,發現關鍵差異:
C:\WINDOWS\php.iniD:\php\php.ini原來兩個目錄下都存在 php.ini,而 D:\php\php.ini 未啟用 MySQL 擴展模組。CLI 模式讀取的是安裝目錄下的設定檔,導致擴展未載入。
php.ini(如 D:\php\php.ini)php.ini(如 C:\WINDOWS\php.ini)作為唯一設定檔在 Windows 下安裝 PHP 時,將安裝目錄下的
php.ini複製到 Windows 目錄後,務必刪除或重命名原安裝目錄下的 php.ini,避免不同執行環境(Web/CLI)載入不同設定檔導致行為不一致。
問題的成因往往非常簡單,但排查過程卻相當耗時。善用 phpinfo() 比對環境差異,是解決此類問題的關鍵技巧。