PHP實現驗證碼
(1)常見的驗證碼哪些?
圖像類型、語音類型、視頻類型、短信類型等
(2)使用驗證碼的好處在哪裏?
①防止惡意的破解密碼
如一些黑客為了獲取到用戶信息,通過不同的手段向服務器發送數據,驗證猜測用戶信息的準確性。
②防止惡意的刷票,論壇灌水
這種在論壇中長期存在灌水的現象,比如貼吧,不斷發送帖子。現在百度貼吧已經針對用戶發帖的時間做了一個時間的限制,當一定時間內發帖過多是無法繼續發帖的。
③防止惡意的請求
如用戶提交一個表單信息,通過不斷向後臺請求數據信息造成服務器資源的浪費,以及惡意的攻擊。
④趣味性
這一點屬於個人觀點,當我們提交表單的時候,如遇到一些有趣的驗證碼方式,能夠增強用戶對網站的喜愛程度。
⑤獲取用戶信息
這一點在現目前的站點中是屢見不鮮的事情了。如我們註冊一個站點的賬號,需要通過手機驗證碼才可以註冊成功。網站在拿到用戶的電話號碼之後會給手機號主發送一些營銷信息。
(3)環境配置
只需要本地安裝了PHP的GD擴展庫即可使用。如何查看呢,創建一個PHP文件在該文件中寫入<?php phpinfo();?>,訪問該文件,如果查看到了GD庫已經安裝了,則可以使用。
沒有的,自行安裝,百度很多教程。
【四】圖像處理函數
(1)獲取圖像信息
①getimagesize():獲取圖像尺寸,類型等信息
獲取圖像大小及相關信息,成功返回一個數組,失敗則返回 FALSE 並產生一條 E_WARNING 級的錯誤信息
<?php $array = getimagesize("images/flower_1.jpg"); print_r($array); ?>
瀏覽器顯示:
Array ( [0] => 350 //圖像寬度的像素值 [1] => 318 //圖像高度的像素值 [2] => 2 //圖像的類型,返回的是數字
//1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),
//9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM
[3] => width="350" height="318" //寬度和高度的字符串,可以直接用於 HTML 的 <image> 標簽 [bits] => 8 //圖像的每種顏色的位數,二進制格式 [channels] => 3 //圖像的通道值,RGB 圖像默認是 3 [mime] => image/jpeg //圖像的 MIME 信息,此信息用來在 HTTP Content-type 頭信息中發送正確的信息,如:header("Content-type: image/jpeg"); )
②imagesx():獲取圖像寬度
獲取圖像的寬度,單位為像素,返回值為整型
③imagesy():獲取圖像高度
用於獲取圖像的高度,語法及用法同 imagesx()
imagesx()和imagesy()參數為如 imagecreatetruecolor()、imagecreatefromjpeg() 等函數返回的圖像資源
<?php $img = imagecreatefromjpeg(‘./upload/01.jpg‘); // echo "$img";輸出Resource id #3 echo "圖像寬度:",imagesx( $img ),"<br />"; echo "圖像高度:",imagesy( $img ); ?>
(2)創建圖像
①imagecreate():創建一幅空白圖像
如果我們要對圖像進行處理,就如其它圖像處理軟件一樣,需要創建一塊畫布。imagecreate() 和 imagecreatetruecolor() 函數用於創建一幅空白圖像。
參數 x ,y 分別為要創建圖像的寬度和高度像素值,返回一個圖像資源
<?php header("Content-type: image/png"); //創建圖像 $im = imagecreate(200, 50) or die("創建圖像資源失敗"); //圖片背景顏色 $bg = imagecolorallocate($im, 255, 255, 255); //文字顏色 $text_color = imagecolorallocate($im, 0, 0, 255); //水平畫一行字,要輸出中文等需要 TTF 字體支持的請使用 magettftext() 函數 imagestring($im, 5, 0, 0, "Hello world!", $text_color); //以PNG格式輸出圖像 imagepng($im); //銷毀圖像資源 imagedestroy($im); ?>
該例子以圖像格式輸出一行文字:Hello world! 。例子中用到的其他函數,將在後面逐一介紹。
②imagecreatetruecolor():創建一幅真彩色空白圖像
功能與 imagecreate() 類似,創建一幅真彩色的圖像,從而支持更為豐富的色彩。
語法:resource imagecreatetruecolor( int x, int y )
註意:本函數不能用於 GIF 文件格式。
(3)銷毀圖像
imagedestroy()
圖像處理完成後,使用 imagedestroy() 指令銷毀圖像資源以釋放內存,雖然該函數不是必須的,但使用它是一個好習慣。
語法:bool imagedestroy( resource image ),具體使用可見上面創建圖像例子。
PHP實現驗證碼