如何解決php 生成驗證碼圖片不顯示問題


最近遇到一個問題,就是驗證碼在別人的電腦上可以顯示,但是我自己的電腦上去不能。原因找了好久,哈哈,終於找到了!現在給大家分享一下:

程序:

<?php
   
$w = 80; //設置圖片寬和高
$h = 26;
$str = Array(); //用來存儲隨機碼
$string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//隨機挑選其中4個字符,也可以選擇更多,注意循環的時候加上,寬度適當調整
for($i = 0;$i < 4;$i++){
   $str[$i] = $string[rand(0,35)];
   $vcode .= $str[$i];
}
session_start(); //啟用超全局變量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //第一次調用設置背景色
$black = imagecolorallocate($im,0,0,0); //邊框顏色
imagefilledrectangle($im,0,0,$w,$h,$white); //畫一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black); //畫一矩形框
//生成雪花背景
for($i = 1;$i < 200;$i++){
   $x = mt_rand(1,$w-9);
   $y = mt_rand(1,$h-9);
   $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagechar($im,1,$x,$y,"*",$color);
}
//將驗證碼寫入圖案
for($i = 0;$i < count($str);$i++){
   $x = 13 + $i * ($w - 15)/4;
   $y = mt_rand(3,$h / 3);
   $color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
   imagechar($im,5,$x,$y,$str[$i],$color);
}
header("Content-type:image/jpeg"); //以jpeg格式輸出,注意上面不能輸出任何字符,否則出錯
imagejpeg($im);
imagedestroy($im);
?>
驗證過,在別人的電腦上能運行,但是我自己的電腦卻無法運行。顯示的結果如下:


原因如下:

 首先要聲明一下的是,我以為是gd2庫沒有打開,但用phpinfo查看了,發現打開了。清除了bom,代碼也是頂行開始寫的,因此問題可能出現在代碼上。后來經過研究,發現還是要更改一下程序,要在header前面加上ob_clean()這個語句,這樣就可以運行了。

加在header輸出之前:

ob_clean();  //關鍵代碼,防止出現'圖像因其本身有錯無法顯示'的問題。
header("Content-type:image/jpeg"); 

這樣問題就得到了解決。

鑒於有些人說我這里有問題,我把改正的代碼和結果給大家看看:

<?php
   
$w = 80; //設置圖片寬和高
$h = 26;
$str = Array(); //用來存儲隨機碼
$string = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";//隨機挑選其中4個字符,也可以選擇更多,注意循環的時候加上,寬度適當調整
for($i = 0;$i < 4;$i++){
   $str[$i] = $string[rand(0,35)];
   $vcode .= $str[$i];
}
session_start(); //啟用超全局變量session
$_SESSION["vcode"] = $vcode;
$im = imagecreatetruecolor($w,$h);
$white = imagecolorallocate($im,255,255,255); //第一次調用設置背景色
$black = imagecolorallocate($im,0,0,0); //邊框顏色
imagefilledrectangle($im,0,0,$w,$h,$white); //畫一矩形填充
imagerectangle($im,0,0,$w-1,$h-1,$black); //畫一矩形框
//生成雪花背景
for($i = 1;$i < 200;$i++){
   $x = mt_rand(1,$w-9);
   $y = mt_rand(1,$h-9);
   $color = imagecolorallocate($im,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
   imagechar($im,1,$x,$y,"*",$color);
}
//將驗證碼寫入圖案
for($i = 0;$i < count($str);$i++){
   $x = 13 + $i * ($w - 15)/4;
   $y = mt_rand(3,$h / 3);
   $color = imagecolorallocate($im,mt_rand(0,225),mt_rand(0,150),mt_rand(0,225));
   imagechar($im,5,$x,$y,$str[$i],$color);
}
ob_clean();//原來的程序沒有這一欄
header("Content-type:image/jpeg"); //以jpeg格式輸出,注意上面不能輸出任何字符,否則出錯
imagejpeg($im);
imagedestroy($im);


?>

顯示結果如下:


這樣的話,結果是不是很明顯了?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM