1. 程式人生 > >PHP實現驗證碼

PHP實現驗證碼

channels echo img -type order pos 函數返回 個數 body

(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實現驗證碼