0

私のコードの何が問題なのですか。

test2.php ファイルに画像が表示されない

ファイル: test2.php:

<img src = "test.php" />

ファイル: test.php

session_start();

$md5_hash = md5(rand(0,999)); 
$security_code = substr($md5_hash, 15, 5); 

$_SESSION["security_code"] = $security_code;

$width = 100;
$height = 20;
header("Content-type: image/png");

$image = ImageCreate($width, $height);  

$white = ImageColorAllocate($image, 255, 255, 255);
$black = ImageColorAllocate($image, 0, 0, 0);
$grey = ImageColorAllocate($image, 204, 204, 204);

ImageFill($image, 0, 0, $black); 

//Add randomly generated string in white to the image
ImageString($image, 3, 30, 3, $security_code, $white); 

//Throw in some lines to make it a little bit harder for any bots to break 
imageRectangle($image,0,0,$width-1,$height-1,$grey); 
imageline($image, 0, $height/2, $width, $height/2, $grey); 
imageline($image, $width/2, 0, $width/2, $height, $grey); 

imagepng($image);
imagedestroy($image);
4

2 に答える 2

1

コードはここで正常に動作します。<?phpほとんどの場合、header() が失敗してエラー メッセージを吐き出す前に何らかの出力がある可能性があります。または、gd-lib がありません。

PS: その画像はあまり良いキャプチャではありません。ReCAPTCHAを使用することは、おそらくより良い解決策です。

于 2010-05-12T14:46:28.170 に答える
0

実行に失敗するスクリプトにエラーがあるか、画像データを破損する追加の出力があると思います。これは、PHP ブロックの前の単一の空白文字 (header失敗の原因) または PHP エラー メッセージである可能性があります。

エラー処理を追加してみてください。headerコールの直前にコールを移動しimagepng、HTTP ヘッダーがまだ送信されていないかどうかをテストします( を参照headers_sent)。

if (!headers_sent()) {
    header("Content-type: image/png");
    imagepng($image);
} else {
    echo 'Internal Error';
}
imagedestroy($image);

次に、スクリプトを直接呼び出して、出力を直接確認します。

于 2010-05-12T14:56:37.997 に答える