ホームページ >バックエンド開発 >PHPチュートリアル >PHPで生成した認証コード画像が表示されない問題の解決方法

PHPで生成した認証コード画像が表示されない問題の解決方法

WBOY
WBOYオリジナル
2016-06-13 12:11:051119ブラウズ

phpで生成した認証コードの画像が表示されない問題の解決方法

最近、他の人のPCでは認証コードが表示されるのに、表示できないという問題に遭遇しました。自分のコンピュータ上で。ずっとその理由を探していました(笑)、やっと分かりました!ここで共有しましょう:

プログラム:


$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 $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 をクリアすると、コードも先頭行から記述されるため、コードに問題が発生する可能性があります。いくつか調べた結果、実行できるようにするには、プログラムを変更して、ヘッダーの前に ob_clean() ステートメントを追加する必要があることがわかりました。

がヘッダー出力の前に追加されます:

ob_clean( ); //「画像自体のエラーにより表示できない」問題を防ぐためのキーコード。
header("Content-type:image/jpeg");

この問題は解決されました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。