首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Windows Server PHP GD 庫啟用後 phpinfo 未顯示的排查方案

     編輯:PHP 綜合知識

現象描述

在 Windows Server 上啟用 PHP GD 擴展(已在 php.ini 取消註釋 extension=gd 或 extension=php_gd2.dll),重啟 IIS/Apache 後,phpinfo() 頁面的 Configure Command 欄位未出現 --with-gd 或 --enable-gd 相關編譯參數,且 gd 區塊缺失,函數 imagecreatetruecolor() 呼叫報錯 Call to undefined function。

Configure Command 實際輸出範例

cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web" "--with-pdo-oci=C:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8=C:\php-sdk\oracle\instantclient10\sdk,shared" "--with-oci8-11g=C:\php-sdk\oracle\instantclient11\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--disable-static-analyze" "--with-pgo"

可見編譯參數中缺少 GD 相關選項(--with-gd、--with-freetype-dir 等)。

可能原因分析

1. PHP 版本為非 GD 內建編譯版本(最常見)

  • Windows 官方釋出的 PHP 二進制包(Non Thread Safe / Thread Safe ZIP)已內建 GD,無需編譯參數即可使用
  • Configure Command 僅反映編譯時參數,不代表運行時擴展狀態
  • 關鍵看 phpinfo() 是否有 gd 區塊、GD Support => enabled

2. 擴展檔案缺失或版本不匹配

  • PHP 7.2+ 擴展檔名為 php_gd.dll(舊版 php_gd2.dll)
  • 檢查 extension_dir 路徑下是否存在對應 .dll
  • Thread Safe (TS) / Non Thread Safe (NTS) 必須與 PHP 核心一致
  • VC 編譯版本(VC14/VS15/VS16)必須一致

3. php.ini 載入失效

  • 修改的 php.ini 非實際生效檔案(查看 Loaded Configuration File)
  • extension=gd 前有分號、拼寫錯誤、或寫在 [ExtensionList] 區塊外
  • 未重啟 Web 伺服器(IIS 需重啟應用程式池、Apache 需重啟服務)

4. 依賴 DLL 缺失(FreeType、libpng、libjpeg、zlib)

  • Windows PHP GD 依賴多個外部 DLL,需在 PATH 環境變量包含 PHP 目錄
  • 或將依賴 DLL 複製到 System32 / Apache bin / PHP 根目錄
  • 使用 Depend.exe (Dependency Walker) 分析 php_gd.dll 缺失依賴

5. 權限問題

  • IIS_IUSRS / IUSR 無 extension_dir 讀取權限
  • PHP 目錄 ACL 設定不當

系統化排查步驟

步驟 1:確認 php.ini 生效與擴展語法

; php.ini 確認項目
extension_dir = "C:/php/ext"          ; 實際 ext 目錄
extension=gd                          ; PHP 7.2+ 統一名稱
; extension=php_gd2.dll               ; PHP 5.x/7.0-7.1 舊名稱

執行 php -m | findstr gd(命令列模式)快速驗證模組載入。

步驟 2:命令列測試 GD 函數

php -r "var_dump(function_exists('imagecreatetruecolor'));"
# bool(true) 表示擴展已載入
# bool(false) 表示未載入,查看錯誤訊息

步驟 3:檢查錯誤日誌

  • PHP 錯誤日誌:error_log 指定路徑
  • Windows 事件檢視器 → Windows Logs → Application
  • 常見錯誤:Unable to load dynamic library 'gd'、The specified module could not be found

步驟 4:依賴檢查

# 下載 Dependency Walker (depends.exe)
# 開啟 php_gd.dll 查看紅色缺失 DLL
# 常見缺失:libpng16.dll, libjpeg-9.dll, freetype6.dll, zlib1.dll

步驟 5:環境變量與權限

# 將 PHP 安裝目錄加入系統 PATH
setx PATH "%PATH%;C:\php" /M

# IIS 應用程式池身分設定為有權限的使用者
# 或授予 IIS_IUSRS 目錄讀取/執行權限

版本對應對照表(關鍵)

PHP 版本擴展檔名內建 GD備註
5.2 - 5.6php_gd2.dll否需手動啟用
7.0 - 7.1php_gd2.dll是官方包內建
7.2 - 7.4php_gd.dll是改名 gd2→gd
8.0+php_gd.dll是預設啟用

快速修復清單

  1. 確認 php -m 有 gd
  2. 確認 phpinfo() 顯示 GD Support => enabled
  3. 若無,檢查 extension_dir、DLL 存在性、TS/NTS/VC 版本一致性
  4. 補齊依賴 DLL 至 PATH 目錄
  5. 重啟 Web 伺服器驗證

總結

Configure Command 無 GD 參數不代表 GD 不可用,Windows 官方二進制包已內建編譯。真正判斷標準是 phpinfo() 的 GD 區塊與 function_exists('gd_info')。排查核心在於:正確的 php.ini + 正確版本的 DLL + 完整的依賴鏈 + 正確的權限。按步驟逐項驗證,多數情況可在 10 分鐘內解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved