เขียน Captcha (Image Verify) ป้องกัน bot Auto post
บทความนี้ผม ใช้ Zend Framework 1.5 (เป็นเวอร์ชั่นเก่าที่ยังไม่มี Zend_Captcha)
การใช้งาน สมมุติเรามี Application ที่เขียนบน Zend Framework อยู่แล้ว
การทำ Image Verify  ต้องใช้ Zend_Session_Namespace ด้วย ดังนั้น ตอนที่เราสร้าง Class สำหรับทำ Image Verify เราจำเป็นต้อง Load Class นี้ เข้ามาใช้งานด้วย
ตามโค้ดนี้
Zend_Loader::loadClass('Zend_Session_Namespace');

ส่วนโค้ดทั้งหมด
class ImagegeneratorController extends Zend_Controller_Action
{
    public function init()
    {
        $this->_helper->viewRenderer->setNoRender();
    }
     
    public function generatecaptchaAction()
    {
         Zend_Loader::loadClass('Zend_Session_Namespace');

            $defaultNamespace = new Zend_Session_Namespace('code_verify');
            $md5_hash = md5(rand(0,999));
 
            $security_code = substr($md5_hash, 15, 5);
            $defaultNamespace->security_code = $security_code;

     
    //Set the image width and height
    $width = 100;
    $height = 20;
    
    $image = ImageCreate($width, $height);
    
    $white = ImageColorAllocate($image, 255, 255, 255);
    $black = ImageColorAllocate($image, 0, 0, 0);
    $grey = ImageColorAllocate($image, 204, 204, 204);
    
    ImageFill($image, 0, 0, $black);
    
    ImageString($image, 3, 30, 3, $security_code, $white);
    
    ImageRectangle($image,0,0,$width-1,$height-1,$grey);
    imageline($image, 0, $height/2, $width, $height/2, $grey);
    imageline($image, $width/2, 0, $width/2, $height, $grey);
     
    //Tell the browser what kind of file is come in
    header("Content-Type: image/jpeg");
     
    //Output the newly created image in jpeg format
    ImageJpeg($image);
    }
}

-----------------------------------------
และใช้โค้ดนี้วางใน form (ไฟล์.phtml)  เพื่อให้แสดงรูปจาก Class ข้างบน
 < img src="baseUrl; ?>/imagegenerator/generatecaptcha" />


ส่วนวิธีตรวจสอบว่าคนกรอกกรอก Code ถูกหรือไม่ ก็ตรวจสอบตามนี้
$Code = $filter->filter($this->_request->getPost('Code'));
$defaultNamespace = new Zend_Session_Namespace('code_verify');           

if($Code != $defaultNamespace->security_code) {
 // โค้ดไม่ถูก
} else {
// work
}




บอร์ด php : http://www.mindphp.com/forums/index.php

กระทู้ล่าสุดจากเว็บบอร์ด
หัวข้อกระทู้
ตอบ
เปิดดู
ล่าสุด
ในฐานะผู้ดูแลระบบ (System Administrator) ก่อนเข้าช่วงหยุดยาว เตรียมตัวแบบนี้เพื่อให้หยุดได้อย่างไร้กังวน
โดย mindphp พฤ 28 ธ.ค. 2023 12:20 pm บอร์ด Linux - Web Server
0
609
พฤ 28 ธ.ค. 2023 12:20 pm โดย mindphp View Topic ในฐานะผู้ดูแลระบบ (System Administrator) ก่อนเข้าช่วงหยุดยาว เตรียมตัวแบบนี้เพื่อให้หยุดได้อย่างไร้กังวน
แก้ปัญหา Google Chrome เข้าหน้าเว็บไม่ได้ขึ้น ERROR SSL Key แต่ใช้ browser ตัวอื่นเข้าได้หมด
โดย mindphp พฤ 28 ธ.ค. 2023 7:11 am บอร์ด ถาม - ตอบ คอมพิวเตอร์
0
362
พฤ 28 ธ.ค. 2023 7:11 am โดย mindphp View Topic แก้ปัญหา Google Chrome เข้าหน้าเว็บไม่ได้ขึ้น ERROR SSL Key แต่ใช้ browser ตัวอื่นเข้าได้หมด
ทำไมการย้ายโดเมนมักแนะนำให้ดำเนินการก่อนหมดอายุ 30 วัน มาดูรายละเอียดกัน Domain Tranfer มีกี่ขั้นตอน
โดย mindphp พฤ 28 ธ.ค. 2023 6:54 am บอร์ด Microsoft Office Knowledge & line & Etc
0
450
พฤ 28 ธ.ค. 2023 6:54 am โดย mindphp View Topic ทำไมการย้ายโดเมนมักแนะนำให้ดำเนินการก่อนหมดอายุ 30 วัน มาดูรายละเอียดกัน Domain Tranfer มีกี่ขั้นตอน
วิธีแชร์ภาพจาก Canva ไปที่ Facebook Page
โดย vibeday พฤ 28 ธ.ค. 2023 12:42 am บอร์ด Microsoft Office Knowledge & line & Etc
0
373
พฤ 28 ธ.ค. 2023 12:42 am โดย vibeday View Topic วิธีแชร์ภาพจาก Canva ไปที่ Facebook Page
โฆษณา LINE ทางเลือกใหม่ของแบรนด์ในยุคออนไลน์
โดย admeadme พ 27 ธ.ค. 2023 3:38 pm บอร์ด Share Knowledge
0
402
พ 27 ธ.ค. 2023 3:38 pm โดย admeadme View Topic โฆษณา LINE ทางเลือกใหม่ของแบรนด์ในยุคออนไลน์
คำสั่ง SQL วิธีแปลงค่าตัวเลข เช่น 1703618219 ซึ่งเป็นค่า Unix timestamp (จำนวนวินาทีนับตั้งแต่วันที่ 1 มกราคม ค.ศ. 1970)
โดย mindphp พ 27 ธ.ค. 2023 1:12 pm บอร์ด SQL Knowledge
0
1792
พ 27 ธ.ค. 2023 1:12 pm โดย mindphp View Topic คำสั่ง SQL วิธีแปลงค่าตัวเลข เช่น 1703618219 ซึ่งเป็นค่า Unix timestamp (จำนวนวินาทีนับตั้งแต่วันที่ 1 มกราคม ค.ศ. 1970)
สอบถามกดดูตารางใน phpmyadmin แล้วขึ้น error #1932 - Table 'table_name' doesn't exist in engine
โดย eange08 พ 27 ธ.ค. 2023 12:29 pm บอร์ด SQL - Database
7
3621
พ 27 ธ.ค. 2023 1:39 pm โดย eange08 View Topic สอบถามกดดูตารางใน phpmyadmin แล้วขึ้น error #1932 - Table 'table_name' doesn't exist in engine
R - mdsoft_jnk_delete_sale_purchase_sql - ลบประวัติเก่าๆ
โดย MBMoo พ 27 ธ.ค. 2023 9:33 am บอร์ด JNK - Developer
0
3
พ 27 ธ.ค. 2023 9:33 am โดย MBMoo View Topic R -   mdsoft_jnk_delete_sale_purchase_sql - ลบประวัติเก่าๆ