當前位置: 首頁> 最新文章列表> 利用header() 返回圖片(如CAPTCHA 驗證碼)

利用header() 返回圖片(如CAPTCHA 驗證碼)

M66 2025-05-28

在PHP 中,如果你想要通過瀏覽器顯示圖片或者生成動態圖片(如驗證碼),你需要藉助header()函數來設置響應頭,從而告訴瀏覽器返回的是一個圖像類型,而不是普通的文本或HTML 頁面。

在這篇文章中,我們將介紹如何使用PHP 的header()函數生成並返回驗證碼圖片。驗證碼廣泛應用於網站註冊、登錄等場景,用於防止機器人自動提交表單。

1. 生成驗證碼圖片的基本步驟

生成驗證碼圖片通常需要以下幾個步驟:

  1. 生成隨機驗證碼字符:驗證碼的內容可以是數字、字母或數字與字母的組合。

  2. 創建圖像資源:使用PHP 的imagecreate()imagecreatetruecolor()函數創建一個空白圖像。

  3. 繪製文字:在圖片上繪製驗證碼字符,通常會使用imagettftext()imagestring()函數。

  4. 設置響應頭:使用header()函數告知瀏覽器圖片類型。

  5. 輸出圖片:通過imagepng()imagejpeg()等函數將圖片輸出到瀏覽器。

  6. 銷毀圖像資源:使用imagedestroy()函數釋放圖像資源。

2. 代碼示例

以下是一個使用PHP 創建並返回驗證碼圖片的代碼示例:

 <?php
// 設置響應頭,告訴瀏覽器返回的是一個圖片
header("Content-Type: image/png");

// 創建一個空白圖像,寬度為 120px,高度為 40px
$width = 120;
$height = 40;
$image = imagecreate($width, $height);

// 設置背景色和文字顏色
$background_color = imagecolorallocate($image, 255, 255, 255); // 白色背景
$text_color = imagecolorallocate($image, 0, 0, 0); // 黑色文字

// 生成隨機驗證碼字符
$characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$captcha_text = substr(str_shuffle($characters), 0, 5);

// 在圖片上繪製驗證碼文字
imagestring($image, 5, 30, 10, $captcha_text, $text_color);

// 輸出圖片
imagepng($image);

// 銷毀圖像資源,釋放內存
imagedestroy($image);
?>

3. 代碼解析

  1. 設置響應頭: header("Content-Type: image/png");這一行設置了響應頭,告訴瀏覽器返回的內容是PNG 格式的圖片。可以根據需求更改為其他圖片格式,比如JPEG ( image/jpeg )。

  2. 創建圖像資源imagecreate($width, $height);創建了一個指定寬度和高度的空白圖片,返回一個圖像資源。

  3. 設置顏色imagecolorallocate($image, 255, 255, 255);imagecolorallocate($image, 0, 0, 0);用於定義圖像的背景色(白色)和文字顏色(黑色)。

  4. 生成隨機驗證碼substr(str_shuffle($characters), 0, 5);這行代碼會從一個字符集中隨機選取5 個字符作為驗證碼。

  5. 繪製文字imagestring($image, 5, 30, 10, $captcha_text, $text_color);負責將生成的驗證碼文字繪製到圖像上。

  6. 輸出圖片imagepng($image);將圖像輸出到瀏覽器,瀏覽器會自動顯示為一張圖片。

  7. 銷毀圖像資源imagedestroy($image);用於釋放圖像資源,避免內存洩漏。

4. 完整代碼與URL 替換

如果在生成驗證碼時,你需要引用外部資源,如字體、圖片等,可能會涉及URL 地址。在這種情況下,我們可以將URL 的域名替換成m66.net ,例如: