解析dedeCMS驗(yàn)證碼的實(shí)現(xiàn)代碼
更新時(shí)間:2013年06月07日 11:59:26 作者:
本篇文章是對(duì)dedeCMS驗(yàn)證碼的實(shí)現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
如下所示:
<?php
$rndstring = '';
for($i=0; $i<4; $i++) $rndstring .= chr(mt_rand(65,90));
//如果支持GD,則繪圖
if(function_exists("imagecreate"))
{
//Firefox部份情況會(huì)多次請(qǐng)求的問題,5秒內(nèi)刷新頁(yè)面將不改變session
$ntime = time();
if(empty($_SESSION['dd_ckstr_last']) || empty($_SESSION['dd_ckstr']) || ($ntime - $_SESSION['dd_ckstr_last'] > 5))
{
$_SESSION['dd_ckstr'] = strtolower($rndstring);
$_SESSION['dd_ckstr_last'] = $ntime;
}
$rndstring = $_SESSION['dd_ckstr'];
$rndcodelen = strlen($rndstring);
//創(chuàng)建圖片,并設(shè)置背景色
$im = imagecreate(50,20);
ImageColorAllocate($im, 255,255,255);
//背景線
$lineColor1 = ImageColorAllocate($im,240,220,180);
$lineColor2 = ImageColorAllocate($im,250,250,170);
for($j=3;$j<=16;$j=$j+3)
{
imageline($im,2,$j,48,$j,$lineColor1);
}
for($j=2;$j<52;$j=$j+(mt_rand(3,6)))
{
imageline($im,$j,2,$j-6,18,$lineColor2);
}
//畫邊框
$bordercolor = ImageColorAllocate($im, 0x99,0x99,0x99);
imagerectangle($im, 0, 0, 49, 19, $bordercolor);
//輸出文字
$fontColor = ImageColorAllocate($im, 48,61,50);
for($i=0;$i<$rndcodelen;$i++)
{
$bc = mt_rand(0,1);
$rndstring[$i] = strtoupper($rndstring[$i]);
imagestring($im, 5, $i*10+6, mt_rand(2,4), $rndstring[$i], $fontColor);
}
header("Pragma:no-cache/r/n");
header("Cache-Control:no-cache/r/n");
header("Expires:0/r/n");
//輸出特定類型的圖片格式,優(yōu)先級(jí)為 gif -> jpg ->png
if(function_exists("imagejpeg"))
{
header("content-type:image/jpeg/r/n");
imagejpeg($im);
}
else
{
header("content-type:image/png/r/n");
imagepng($im);
}
ImageDestroy($im);
exit();
}
else
{
//不支持GD,只輸出字母 ABCD
$_SESSION['dd_ckstr'] = "abcd";
$_SESSION['dd_ckstr_last'] = '';
header("content-type:image/jpeg/r/n");
header("Pragma:no-cache/r/n");
header("Cache-Control:no-cache/r/n");
header("Expires:0/r/n");
$fp = fopen("data/vdcode.jpg","r");
echo fread($fp,filesize("data/vdcode.jpg"));
fclose($fp);
exit();
}
?>
復(fù)制代碼 代碼如下:
<?php
$rndstring = '';
for($i=0; $i<4; $i++) $rndstring .= chr(mt_rand(65,90));
//如果支持GD,則繪圖
if(function_exists("imagecreate"))
{
//Firefox部份情況會(huì)多次請(qǐng)求的問題,5秒內(nèi)刷新頁(yè)面將不改變session
$ntime = time();
if(empty($_SESSION['dd_ckstr_last']) || empty($_SESSION['dd_ckstr']) || ($ntime - $_SESSION['dd_ckstr_last'] > 5))
{
$_SESSION['dd_ckstr'] = strtolower($rndstring);
$_SESSION['dd_ckstr_last'] = $ntime;
}
$rndstring = $_SESSION['dd_ckstr'];
$rndcodelen = strlen($rndstring);
//創(chuàng)建圖片,并設(shè)置背景色
$im = imagecreate(50,20);
ImageColorAllocate($im, 255,255,255);
//背景線
$lineColor1 = ImageColorAllocate($im,240,220,180);
$lineColor2 = ImageColorAllocate($im,250,250,170);
for($j=3;$j<=16;$j=$j+3)
{
imageline($im,2,$j,48,$j,$lineColor1);
}
for($j=2;$j<52;$j=$j+(mt_rand(3,6)))
{
imageline($im,$j,2,$j-6,18,$lineColor2);
}
//畫邊框
$bordercolor = ImageColorAllocate($im, 0x99,0x99,0x99);
imagerectangle($im, 0, 0, 49, 19, $bordercolor);
//輸出文字
$fontColor = ImageColorAllocate($im, 48,61,50);
for($i=0;$i<$rndcodelen;$i++)
{
$bc = mt_rand(0,1);
$rndstring[$i] = strtoupper($rndstring[$i]);
imagestring($im, 5, $i*10+6, mt_rand(2,4), $rndstring[$i], $fontColor);
}
header("Pragma:no-cache/r/n");
header("Cache-Control:no-cache/r/n");
header("Expires:0/r/n");
//輸出特定類型的圖片格式,優(yōu)先級(jí)為 gif -> jpg ->png
if(function_exists("imagejpeg"))
{
header("content-type:image/jpeg/r/n");
imagejpeg($im);
}
else
{
header("content-type:image/png/r/n");
imagepng($im);
}
ImageDestroy($im);
exit();
}
else
{
//不支持GD,只輸出字母 ABCD
$_SESSION['dd_ckstr'] = "abcd";
$_SESSION['dd_ckstr_last'] = '';
header("content-type:image/jpeg/r/n");
header("Pragma:no-cache/r/n");
header("Cache-Control:no-cache/r/n");
header("Expires:0/r/n");
$fp = fopen("data/vdcode.jpg","r");
echo fread($fp,filesize("data/vdcode.jpg"));
fclose($fp);
exit();
}
?>
相關(guān)文章
PHP中static關(guān)鍵字原理的學(xué)習(xí)研究分析
PHP中static關(guān)鍵字原理的學(xué)習(xí)研究分析,學(xué)習(xí)php的朋友可以參考下。2011-07-07
PHP實(shí)現(xiàn)的登錄,注冊(cè)及密碼修改功能分析
這篇文章主要介紹了PHP實(shí)現(xiàn)的登錄,注冊(cè)及密碼修改功能,結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)登陸功能的相關(guān)數(shù)據(jù)庫(kù)操作、ajax交互、數(shù)據(jù)驗(yàn)證及驗(yàn)證碼相關(guān)操作技巧,需要的朋友可以參考下2016-11-11
PHP面向?qū)ο蠓治鲈O(shè)計(jì)的61條軍規(guī)小結(jié)
你不必嚴(yán)格遵守這些原則,違背它們也不會(huì)被處以宗教刑罰。但你應(yīng)當(dāng)把這些原則看成警鈴,若違背了其中的一條,那么警鈴就會(huì)響起 。2010-07-07
PHP實(shí)現(xiàn)簡(jiǎn)單的模板引擎功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)簡(jiǎn)單的模板引擎功能,結(jié)合實(shí)例形式詳細(xì)分析了PHP實(shí)現(xiàn)模板引擎功能的模版類、編譯類、控制器類及模板文件等實(shí)現(xiàn)方法與相關(guān)操作技巧,需要的朋友可以參考下2017-09-09
php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問題排查
這篇文章主要介紹了php5.2的curl-bug 服務(wù)器被php進(jìn)程卡死問題排查,需要的朋友可以參考下2016-09-09
PHP郵件發(fā)送類PHPMailer用法實(shí)例詳解
這篇文章主要介紹了PHP郵件發(fā)送類PHPMailer用法,詳細(xì)的講述了安裝及配置的方法與功能實(shí)現(xiàn)代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09

