ホームページ > バックエンド開発 > PHPチュートリアル > PHP 検証コードの画像が表示されない場合の解決策

PHP 検証コードの画像が表示されない場合の解決策

WBOY
リリース: 2016-06-13 13:51:20
オリジナル
1019 人が閲覧しました

PHP 認証コードの画像が表示できません
PHP 認証コードの画像が表示できず、赤十字が表示されます。コードは次のとおりです:



image.php

PHP コード
 <br>  <?php <br /> 	session_start(); <br /> 	if(isset($_POST[&#39;submit&#39;])){ <br /> 		if(trim($_POST["test"])==$_SESSION[&#39;validationcode&#39;]){ <br /> 			echo &#39;提交成功 <br>'; <br> 		}else{  <br> 			echo ' <font color="red">验证码输入错误!! </font> <br>'; <br> 		} <br> 	} <br> ?> <br>  <html> <br> 	 <head> <br> 		 <title>Image </title> <br> 		 <meta http-equiv="content-type" content="text/html;charset=gb2312"> <br> 		 <script> <br> 			function newgdcode(obj,url) { <br> 				//后面传递一个随机参数,否则在IE7和火狐下,不刷新图片 <br> 				obj.src = url+ '?nowtime=' + new Date().getTime(); <br> 			} <br> 		 </script> <br> 	 </head> <br> 	 <body> <br> 		 <img src="imgcode.php" alt="看不清楚,换一张" style="cursor: pointer;" onClick="javascript: newgdcode(this,this.src);" /> <br> 		 <form method="POST" action="image.php"> <br> 			 <input type="text" name="test"> <br> <br> 			 <input type="submit" name="submit" value="提交"> <br> 		 </form> <br> 	 </body> <br>  </html> <br> 
ログイン後にコピー



imgcode.php
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
    session_start();
    require_once('ValidationCode.php');

    $image = new ValidationCode(60,20,4);    

    $image->showImage();
    $_SESSION['validationcode'] =$image->getCheckCode(); 
?>

ログイン後にコピー



ValidationCode.php
PHP コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
<?php
     /* クラス ValidationCode は、Validationcode.php という名前のファイルで宣言されています */
     /* このクラスのオブジェクトを通じて、検証コード画像と検証コード文字列を動的に取得できます */
    クラス ValidationCode {
        private $width; // 検証コード画像の幅
        private $height; //検証コード画像の高さ
        private $codeNum //検証コードの文字数
        private $checkCode //検証コード文字;
        private $image //検証コードキャンバス;

        /* コンストラクターは検証コード オブジェクトをインスタンス化し、一部のメンバー属性を初期化するために使用されます */
        /* パラメータ幅: 検証コード画像の幅を設定します。デフォルトの幅値は 60 ピクセルです */
        /* パラメーターの高さ: 検証コード画像の高さを設定します。デフォルトの高さの値は 20 ピクセルです */
        /* パラメータ codeNum: 検証コードの文字と数字の数を設定します。デフォルトの数は 4 です */
        function __construct($width=60, $height=20, $codeNum=4) {
            $this->width=$width //メンバー属性の幅を初期化します。
            $this->height=$height; //メンバー属性の高さを初期化します。
            $this->codeNum=$codeNum; //メンバー属性 codeNum を初期化します。
            $this->checkCode=$this->createCheckCode() //メンバー属性 checkCode を初期化します。
        }
        function showImage(){ //このメソッドにアクセスして画像をブラウザに出力します
            $this->getCreateImage(); //内部メソッドを呼び出してキャンバスを作成し、初期化します
            $this->outputText(); //ランダムな文字列を画像に出力します。
            $this->setDisturbColor(); //画像に干渉ピクセルを設定します。
            $this->outputImage(); // 対応する形式で画像を生成して出力します
        }
        function getCheckCode(){ //このメソッドにアクセスして、ランダムに作成された検証コード文字列を取得します
            return $this->checkCode //メンバー属性 $checkCode によって保存された文字列を返します。
        }
        private function getCreateImage(){ //画像リソースの作成と背景の初期化に使用されます
            $this->image=imageCreate($this->幅,$this->高さ);
            $back=imageColorAllocate($this->image, 255, 255, 255);
            $border=imageColorAllocate($this->image, 0, 0, 0);
            imageRectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
        }
        private function createCheckCode(){ //ユーザーが指定した数の文字列をランダムに生成します
            for($i=0;$icodeNum;$i++) {
                $number=rand(0,2);
                スイッチ($number){
                    ケース 0: $rand_number=rand(48,57); //数値
                    ケース 1: $rand_number=rand(65,90); //大文字
                    ケース 2: $rand_number=rand(97,122); //小文字
                }
                $ascii=sprintf("%c",$rand_number);
                $ascii_number=$ascii_number.$ascii;
            }
            $ascii_number を返します;
        }
        private function setDisturbColor() { //干渉ピクセルを設定し、異なる色の 100 ポイントを画像に出力します
            for ($i=0;$iimage, rand(0,255), rand(0,255), rand(0,255));
                    imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
            }
        }
        private function OutputText() { //ランダムな色、ランダムな配置、ランダムな文字列を画像に出力
            for ($i=0;$icodeNum;$i++) {
                    $bg_color = imagecolorallocate($this->image, rand(0,255), rand(0,128), rand(0,255));
                    $x = フロア($this->width/$this->codeNum)*$i+3;
                    $y = rand(0,$this->height-15);
                 imagechar($this->image, 5, $x, $y, $this->checkCode[$i], $bg_color);
               }
        }

        private function OutputImage(){ //GD がサポートする画像タイプを自動的に検出し、画像を出力します
            if(imagetypes() & IMG_GIF){ //GIF 形式の画像を生成する関数が存在するかどうかを判断します
                header("Content-type: image/gif"); //ヘッダー情報を送信し、MIME タイプを image/gif に設定します
                imagegif($this->image); //画像をGIF形式でブラウザに出力します。
            }elseif(imagetypes() & IMG_JPG){ //JPG形式の画像を生成する関数が存在するかどうかを判定
                header("Content-type: image/jpeg"); //ヘッダー情報を送信し、MIME タイプを image/jpeg に設定します
                imagejpeg($this->image, "", 0.5); //画像をJPEN形式でブラウザに出力します。
            }elseif(imagetypes() & IMG_PNG){ //PNG 形式の画像を生成する関数が存在するかどうかを判断します
                header("Content-type: image/png"); // ヘッダー情報を送信し、MIME タイプを image/png に設定します
                imagepng($this->image); //画像をPNG形式でブラウザに出力します。
            }elseif(imagetypes() & IMG_WBMP){ //WBMP形式の画像を生成する関数が存在するかどうかを判定
                 header("Content-type: image/vnd.wap.wbmp"); // ヘッダーを image/wbmp として送信します
                 imagewbmp($this->image); //画像をWBMP形式でブラウザに出力します。
            }else{ //サポートされている画像タイプがない場合
                die("PHP はイメージの作成をサポートしていません!"); //イメージを出力せず、エラー メッセージを出力してプログラムを終了します。
            }
        }
        function __destruct(){ //オブジェクトの終了時に画像リソースを破棄し、メモリを解放します
             imagedestroy($this->image); // GD ライブラリのメソッドを呼び出して画像リソースを破棄します
        }
    }
?>

 <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート