PHP登录带图片,PHP登录注册完整图片验证码实现
通過上一篇 PHP gd簡單畫圖學習后。這篇將繼續探索實現PHP圖片驗證碼的實現。效果圖如下
為什么需要驗證碼?
驗證碼設計。驗證碼一使用于用戶注冊和登錄。主要是防止機器批量注冊用戶或機器頻繁測試登錄
此處的核心點有兩個。第一是圖片驗證碼實現。第二是如果在驗證頁面檢驗輸入的驗證碼是否正確
首先我們先實現驗證碼
新建一個cfv(Verification Code).php文件,為單獨生成驗證碼文件
創建一個150*40px的畫布,以及設置需要的顏色等:
$img = imagecreatetruecolor(150,40);
$white = imagecolorallocate($img,240,241,218);
$gray = imagecolorallocate($img,100,233,12);
$orange = imagecolorallocate($img,168,170,19);
imagefill($img,0,0,$white);//填充畫布
合并一個從0-9,a-z,A-Z數組,$arr = array_merge(range(0,9),range(a,z),range(A,Z));
打亂數組 shuffle($arr);
從數組里面取出4個,并且以" "空格連接,組成驗證碼需要的字符串 $str = join(" ",array_slice($arr,0,4));
畫驗證碼文字到畫布上 imagettftext($img,20,0,10,30,$gray,"my.TTF",$str);
imagettftext (resource$image ,float$size ,float$angle ,int$x ,int$y ,int$color ,string$fontfile ,???string$text ) $image:畫布 $size:字體大小 $angle:字體偏轉角度 $x:字體左下x坐標 $y:字體左下y坐標 $color 字體顏色 $fontfile()在C:\Windows\Fonts下任意取一個.TTF文件$text 驗證碼文字
為了防止機器頻繁測試。所以得增加干擾線 。如下增加了30條干擾線
for ($i=0; $i <30 ; $i++) {
imagearc($img, mt_rand(0,150), mt_rand(0,40), mt_rand(0,30), mt_rand(0,30), mt_rand(0,360), ? ? ?? ???????????????? mt_rand(0,360), $orange);}
最后畫出該驗證碼圖像,并且釋放資源?? imagejpeg($img);imagedestroy($img);
創建表單,這兒隨便創建了一個表單。代碼直接上圖
最后是驗證提交的表單驗證碼信息是否正確
由于我們驗證的php和驗證碼的php文件不同,所以改怎么在驗證碼圖片中獲取文字作比較?此處停留思考1分鐘^-^
這時候我們需要借助Session,關于Session詳細運用,這兒不做深究。只略講一下這兒的Session運用
開啟Session session_start();需要在驗證碼最上面開啟。注意這句代碼前不能有輸出比如echo......
把驗證碼字符串存入Session? $_SESSION['vcode']=$str;
在驗證的php文件中取出Session $scode = $_SESSION['vcode']
checkrgis.php 里面需要拿到表單傳入的驗證碼,在和Session的驗證碼做比較。這樣即可驗證。代碼如下
session_start();
$scode = $_SESSION['vcode'];
$pvfc = $_POST['vfc'];
$code = strtolower(str_replace(" ","",$scode));
$fvc = strtolower(str_replace(" ","",$pvfc));
注意:獲得的用戶輸入的驗證碼和Session的驗證碼都需要把空格全部消除,在轉小寫后比較。對應上面4,5句代碼
源碼下載地址https://pan.baidu.com/s/1k4xn8zdLC9yKvFEGUryN4g? 提取碼?st8f
總結
以上是生活随笔為你收集整理的PHP登录带图片,PHP登录注册完整图片验证码实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php sprintf %1,PHP s
- 下一篇: php怎么统计数量,怎样做PHP人数在线