PHP検証コード画像が出力できません
ファイル名 global_func.php
関数_code(){
//確認コードを実行する
//ランダムコードの数
$_rnd_code=4;
for($i=0;$i
$_nmsg.=dechex(mt_rand(0, 15));
}
//セッション中に保存
$_SESSION['code']=$_nmsg;
//長さと高さ
$_width=75;
$_height=25;
//画像を作成します
$_img=imagecreatetruecolor($_width,$_height);
//ホワイト
$_white=imagecolorallocate($_img, 255, 255, 255);
//詰め物
imagefill($_img, 0, 0, $_white);
$_flag=false;
if($_flag){
// 黒、ボーダー
$_black=imagecolorallocate($_img, 0,0,0);
imagerectangle($_img, 0,0, $_width-1,$_height-1,$_black);
}
//線を6本描く
for($i=0;$i
$_rnd_color=imagecolorallocate($_img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height), $_rnd_color);
}
//雪の結晶が続きます
for($i;$i
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
imagestring($_img,1, mt_rand(1, $_width),mt_rand(1,$_height), '*', $_rnd_color);
}
//検証コードを出力する
for($i=0;$i
$_rnd_color=imagecolorallocate($_img, mt_rand(0, 100), mt_rand(0, 150), mt_rand(0, 200));
Imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10), mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//出力画像
header('Content-Type:image/png');
imagepng($_img);
//破壊
imagedestroy($_img);
}
global_func.php ファイル内で function _code(); を呼び出すと、エラーが表示され、赤いバツが表示されます。
code.php
_code();
code.phpに直接書いて使えます。
code.php
//ランダムコードの数
$_rnd_code=4;
for($i=0;$i
$_nmsg.=dechex(mt_rand(0, 15));
}
//セッション中に保存
$_SESSION['code']=$_nmsg;
//長さと高さ
$_width=75;
$_height=25;
//画像を作成します
$_img=imagecreatetruecolor($_width,$_height);
//ホワイト
$_white=imagecolorallocate($_img, 255, 255, 255);
//塗りつぶし
imagefill($_img, 0, 0, $_white);
$_flag=false;
if($_flag){
// 黒、ボーダー
$_black=imagecolorallocate($_img, 0,0,0);
imagerectangle($_img, 0,0, $_width-1,$_height-1,$_black);
}
//線を6本描く
for($i=0;$i
$_rnd_color=imagecolorallocate($_img, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255));
imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height), $_rnd_color);
}
//雪の結晶が続きます
for($i;$i
$_rnd_color=imagecolorallocate($_img,mt_rand(200,255), mt_rand(200,255), mt_rand(200,255));
imagestring($_img,1, mt_rand(1, $_width),mt_rand(1,$_height), '*', $_rnd_color);
}
//検証コードを出力する
for($i=0;$i
$_rnd_color=imagecolorallocate($_img, mt_rand(0, 100), mt_rand(0, 150), mt_rand(0, 200));
Imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10), mt_rand(1,$_height/2),$_SESSION['code'][$i],$_rnd_color);
}
//出力画像
header('Content-Type:image/png');
imagepng($_img);
//破壊
imagedestroy($_img);
この検証コードを関数にカプセル化せずに直接実行すると、検証コードを使用でき、すべてが正常に動作します。
しかし、関数_code()を使用すると、_code()を呼び出した後のHTMLに赤いバツが表示されます。理由はわかりません
------解決策---------------------
header('Content-Type:image/png') のせいでしょうか
BOM ヘッダーは、ブラウザーが期待するファイル タイプに影響します
------解決策---------------------
関数として書いても呼び出して問題ありません。
関数_code(){
//確認コードを実行する
}
?>
別のページ
include("./test/test.php");
_code();
------解決策---------------------
phpのエラーメッセージを開けば原因が分かります