PHP 認証コードの画像が表示できません
PHP 認証コードの画像が表示できず、赤十字が表示されます。コードは次のとおりです:
image.php
<br> <?php <br /> session_start(); <br /> if(isset($_POST['submit'])){ <br /> if(trim($_POST["test"])==$_SESSION['validationcode']){ <br /> echo '提交成功 <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>
<!-- 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(); ?>
<!-- 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>