在使用 PHP 進行動態繪圖或驗證碼生成時,瀏覽器經常出現「圖片無法顯示」或顯示破圖圖示的情況。這通常不是 GD 庫本身的問題,而是環境配置或輸出控制不當導致的。以下整理三大常見原因及對應解決方案,助你快速定位問題。
首先檢查 php.ini 配置文件,搜尋 extension=php_gd2.dll(Windows 環境)或 extension=gd(Linux 環境),確保行首的分號 ; 已移除。修改後必須重啟 Web 服務(Apache/Nginx 或 PHP-FPM)才能生效。可通過 phpinfo() 或命令列 php -m | grep gd 驗證模組是否載入成功。
繪圖腳本輸出圖片二進制數據前,絕對不能有任何 HTML、空白行、BOM 頭或 echo/print 輸出。哪怕一個不可见的空格也會破壞圖片標頭,導致瀏覽器解析失敗。建議:
<?php 必須位於文件最開頭,前面零字元。?>,避免後續換行被輸出。即使代碼看似無輸出,框架、中介層或之前的 include 文件可能已向緩衝區寫入數據。在發送 header('Content-Type: image/png') 之前,呼叫 ob_clean() 或 ob_end_clean() 清空現有緩衝區,確保圖片數據純淨。此技巧同樣適用於文件下載場景,解決下載檔案損壞、無法打開的問題。
<?php
// 正確的繪圖輸出骨架
ob_clean(); // 清除之前的輸出緩衝
header('Content-Type: image/png');
$im = imagecreatetruecolor(200, 80);
// ... 繪圖邏輯 ...
imagepng($im);
imagedestroy($im);
Call to undefined function imagecreatetruecolor() 等致命錯誤。掌握以上三點,90% 的 PHP 繪圖不顯示問題均可迎刃而解。核心原則:環境就緒、輸出純淨、緩衝乾淨。