1. 程式人生 > >PHP網頁中因為 要生成驗證碼而出現 影象“http://localhost/**.php”因其本身有錯無法顯示

PHP網頁中因為 要生成驗證碼而出現 影象“http://localhost/**.php”因其本身有錯無法顯示

我的網頁,要在使用者登入的位置出現驗證碼,程式如下:

<?php
      header("Content-type:image/jpeg");
      ob_end_flush();
      $image_width=90;
      $image_height=30;
      srand(microtime()*100000);
      $string="abcdefghigklmnopqrstuvwxyz123456789";
      for($i=0;$i<4;$i++){
      $new_number.=$string[rand(0,strlen($string)-1)];
      }
      $_SESSION['check_code_orginal']=$new_number;
      
      $num_image=imagecreate($image_width,$image_height);
      $white=imagecolorallocate($num_image,0,0,0);
      $gray=imagecolorallocate($num_image,200,200,200);
      imagefill($num_image,0,0,$gray);
      $li=imagecolorallocate($num_image,220,220,220);
      for($i=0;$i<3;$i++){
      imageline($num_image,rand(0,30),rand(0,21),rand(20,40),rand(0,21),$li);
      }
      for($i=0;$i<90;$i++){
      imagesetpixel($num_image,rand()*70,rand()*30,$gray);
      }
      for($i=0;$i<strlen($_SESSION['check_code_orginal']);$i++){
      $font=mt_rand(3,5);
      $x=mt_rand(1,8)+$image_width*$i/4;
      $y=mt_rand(1,$image_height/4);
      $color=imagecolorallocate($num_image,mt_rand(0,100),mt_rand(0,155),mt_rand(0,200));
      imagestring($num_image,$font,$x,$y,$_SESSION['check_code_orginal'][$i],$color);
      }
      $picture="image/check_code.jpg";
      touch($picture);
      imagejpeg($num_image,$picture);
      imagedestroy($num_image);
      
?>
       <img src='image/check_code.jpg'>

因為網頁上還有其他內容,所以,      header("Content-type:image/jpeg");  位置已經被佔用,驗證碼不能出現了,就會出現影象“http://localhost/**.php”因其本身有錯,無法顯示”             那麼,解決這個問題的最簡單的辦法就是,直接刪除    header("Content-type:image/jpeg");  

如果網頁上沒有其他內容,我們也可以在    header("Content-type:image/jpeg"); 之前加上 ob_clean();

即: ob_clean();

        header("Content-type:image/jpeg"); 

以上是我在程式中碰到的問題,解決方法就是直接刪除  header("Content-type:image/jpeg");  程式便可以運行了。至於原因,不知道我以上的理解的正確否,只是拿來供大家參考。

附一段別人的生成驗證碼的程式:

<?php 
session_start(); 
//session_register("login_check_number");   
//先成生背景,再把生成的驗證碼放上去 
$img_height=70;//先定義圖片的長、寬 
$img_width=25; 
$authnum=''; 
//生產驗證碼字元 
$ychar="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z"; 
$list=explode(",",$ychar); 
for($i=0;$i<4;$i++){ 
    $randnum=rand(0,35); 
    $authnum.=$list[$randnum]; 

//把驗證碼字元儲存到session 
$_SESSION["login_check_number"] = $authnum;   
 
$aimg = imagecreate($img_height,$img_width);    //生成圖片 
imagecolorallocate($aimg, 255,255,255);            //圖片底色,ImageColorAllocate第1次定義顏色PHP就認為是底色了 
$black = imagecolorallocate($aimg, 0,0,0);        //定義需要的黑色 
 
for ($i=1; $i<=100; $i++) { 
    imagestring($aimg,1,mt_rand(1,$img_height),mt_rand(1,$img_width),"@",imagecolorallocate($aimg,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255))); 

 
//為了區別於背景,這裡的顏色不超過200,上面的不小於200 
for ($i=0;$i<strlen($authnum);$i++){ 
    imagestring($aimg, mt_rand(3,5),$i*$img_height/4+mt_rand(2,7),mt_rand(1,$img_width/2-2), $authnum[$i],imagecolorallocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200))); 

imagerectangle($aimg,0,0,$img_height-1,$img_width-1,$black);//畫一個矩形 
ob_clean();  //關鍵程式碼,防止出現'影象因其本身有錯無法顯示'的問題。
Header("Content-type: image/PNG"); 


ImagePNG($aimg);//生成png格式 
ImageDestroy($aimg); 
?>