<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 />
ログイン後にコピー
-----解決策--------------------------------この問題は非常に奇妙です、最善です。唯一の方法は分離することです。
これを試してみてください
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>
ログイン後にコピー