PHP 出力セッション検証コードが画像と同期していません。画像は常に 1 つ先にあります。解決してください。

WBOY
リリース: 2016-06-13 12:48:48
オリジナル
984 人が閲覧しました

PHP 出力セッションの検証コードが画像と同期していません。画像は常に 1 つ先を行っています。解決してください。

この投稿は、2012-04-18 20:07:42 に Xdawei によって最終編集されました PHP 出力セッション検証コードが画像と同期していません。画像は常に 1 段階速くなります。解決してください。

<br />
<?<br />
session_start();<br />
function random($len)<br />
{<br />
$srcstr="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";<br />
mt_srand();<br />
$strs="";<br />
for($i=0;$i<$len;$i++){<br />
$strs.=$srcstr[mt_rand(0,35)];<br />
}<br />
return strtoupper($strs);<br />
}<br />
$str=random(4); <br />
$width = 50; <br />
$height = 25; <br />
@header("Content-Type:image/png");<br />
$_SESSION["captcha"] = $str;<br />
//echo $str;<br />
$im=imagecreate($width,$height);<br />
$back=imagecolorallocate($im,0xFF,0xFF,0xFF);<br />
$pix=imagecolorallocate($im,187,230,247);<br />
$font=imagecolorallocate($im,41,163,238);<br />
mt_srand();<br />
for($i=0;$i<1000;$i++)<br />
{<br />
imagesetpixel($im,mt_rand(0,$width),mt_rand(0,$height),$pix);<br />
}<br />
imagestring($im, 5, 7, 5,$str, $font);<br />
imagerectangle($im,0,0,$width-1,$height-1,$font);<br />
imagepng($im);<br />
imagedestroy($im);<br />
$_SESSION["captcha"] = $str;<br />
?><br />
<br />
ログイン後にコピー


<br />
<img src="captcha.php" width="60" height="22" border="1" onclick= "this.src='captcha.php?act=captcha&'+Math.random()" style="cursor: pointer; vertical-align:middle" title="看不清?点击更换!" /><br />
ログイン後にコピー

-----解決策--------------------------------
この問題は非常に奇妙です、最善です。唯一の方法は分離することです。
これを試してみてください
checkcode.class.php
<br>
<?php<br>
/**<br>
* 確認コードを生成<br>
* クラスの使用法<br>
* $checkcode = 新しいチェックコード();<br>
* $checkcode->doimage();<br>
* //認証を取得します<br>
* $_SESSION['code']=$checkcode->get_code();<br>
session_start();<br>
include './checkcode.class.php';<br>
$checkcode = 新しいチェックコード('C:WINDOWSFontsARIAL.TTF');<br>
$checkcode->doimage();<br>
$_SESSION['code']=$checkcode->get_code();<br>
​*/<br>
クラスチェックコード {<br>
//検証コードの幅<br>
public $width=130;<br>
<br>
//認証コードの高さ<br>
パブリック $height=50;<br>
<br>
//フォントアドレスを設定 <br>
プライベート $font;<br>
<br>
//フォントの色を設定します<br>
パブリック $font_color;<br>
<br>
//ランダム生成係数を設定します<br>
public $charset = 'abcdefghkmnprstuvwyzABCDEFGHKLMNPRSTUVWYZ23456789';<br>
<br>
//背景色を設定します<br>
public $background = '#EDF7FF';<br>
<br>
//確認コードを生成する文字数<br>
パブリック $code_len = 4;<br>
<br>
//フォントサイズ<br>
パブリック $font_size = 20;<br>
<br>
//検証コード<br>
プライベート $コード;<br>
<br>
//画像メモリ<br>
プライベート $img;<br>
<br>
//テキストの X 軸が始まる場所<br>
プライベート $x_start;<br>
<br>
関数 __construct($fontpath) {<br>
$this->font =$fontpath;<br>
}<br>
/**<br>
* ランダムな認証コードを生成します。 <br>
​*/<br>
保護された関数 creat_code() {<br>
$code = '';<br>
$charset_len = strlen($this->charset)-1;<br>
for ($i=0; $icode_len; $i ) {<br>
$code .= $this->charset[rand(1, $charset_len)];<br>
}<br>
$this->code = $code;<br>
}<br>
<br>
/**<br>
* 確認コードを取得<br>
​*/<br>
パブリック関数 get_code() {<br>
return strto lower($this->code);<br>
}<br>
<br>
/**<br>
* 写真を生成<br>
​*/<br>
パブリック関数 doimage() {<br>
$code = $this->creat_code();<br>
$this->img = imagecreatetruecolor($this->width, $this->height);<br>
if (!$this->font_color) { <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート