session_start();
//ランダムコードの数
$_rnd_code = 4;
//($i=0;$i
) のランダムコードを作成します。 $ _rnd_code;$i++){
$_nmsg .= dechex(mt_rand(0,15))
}
//セッションに保存
$_SESSION['code']= $_nmsg;
//長さと高さを設定します
$_width=75;
//画像を作成します
$_img = imagecreatetruecolor ($_width,$_height);
//White
$_white = imagecolorallocate($_img,255,255,255);
//Fill
imagefill($_img,0, 0,$_white);
//黒枠
$_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,rand(0,$_width),rand(0,$_height),rand(0,$_width), rand (0,$_height),$_rnd_color);
}
//検証コードを出力します
for($i=0;$i
}
確認コードを作成しましたが、出力された 4 文字はすべて同じでした。何が起こっているか見てみましょう。
次のようになります
imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1, 10) ,mt_rand(1,$_height/2),$_SESSION['code'][ $i],$_black);
呼び出しスタック
# 時間メモリ関数の場所
1 0.0006 146856 {main}( ) ..demo.php:0
( ! ) 警告: 不正な文字列オフセット '$i'デモ .php の 42 行目
Call Stack
# Time Memory Function Location
1 0.0006 146856 {main}( ) ..demo.php:0
( ! ) 警告: 違法文字列オフセット '$i' (demo.php の 42 行目)
呼び出しスタック
# 時間メモリ関数の場所
1 0.0006 146856 {main}( ) ..demo.php:0
( ! ) 警告: 42 行目のデモ.php の文字列オフセット '$i' が不正です
呼び出しスタック
# 時間メモリ関数の場所
1 0.0006 146856 {main}( ) ..demo.php:0
( ! ) 警告: 42 行目のデモ.php の文字列オフセット '$i' が不正です
呼び出しスタック
# 時間メモリ関数の場所
1 0.0006 146856 {main}( ) 。 .demo .php:0
これを次のように変更してください
<?phpheader('content-type:image/jpeg');session_start();//随机码的个数$_rnd_code = 4;$_nmsg = '';//创建随机码for($i=0;$i<$_rnd_code;$i++){$_nmsg .= dechex(mt_rand(0,15));}//保存在session里$_SESSION['code']=$_nmsg;//设置长和高$_width=75;$_height=25;//创建一张图像$_img = imagecreatetruecolor($_width,$_height);//白色$_white = imagecolorallocate($_img,255,255,255);//填充imagefill($_img,0,0,$_white);//黑色边框$_black = imagecolorallocate($_img,0,0,0);imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);//随机六个线条for($i=0;$i<6;$i++){$_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));imageline($_img,rand(0,$_width),rand(0,$_height),rand(0,$_width),rand(0,$_height),$_rnd_color);}//输出验证码for($i=0;$i<strlen($_SESSION['code']);$i++){imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION['code'][$i],$_black);}imagejpeg($_img);?>