ตัว check รหัส post เป็น ไทย เค้าไปเอากันที่ใหนหรือมีใครแจกบ้างนะ
ไม่มีใคร แสดงความคิดเห็นเลย แงๆๆๆ
Date :
2009-08-14 09:25:07
By :
nilas
กระทู้นี้อยากตอบมาก เพราะคุณ lashi อุตส่าห์ capture เว็บผมมาเอง
แต่ว่าหา web reference ที่อธิบายไม่เจอ โค้ดที่ผมเขียนมันก็เป็นของ cakephp ด้วยเลยใช้กับเว็บทั่วไปไม่ได้อะ
1. ใช้ font ttf ภาษาไทย จากเว็บ http://www.f0nt.com
2. ส่งค่า parameter ที่ใช้สร้างภาษาไทยโดยใช้ utf8 (ภาษาไทยที่ส่งให้กับ imagettftext ต้องเป็น utf8)
นอกนั้นก็จะเหมือนกับการสร้าง captcha หรือ ตัวป้องกัน spam bot ที่ใช้ภาษาอังกฤษตามปกติครับ
<?php
header("Content-type: image/gif");
$img = imagecreatetruecolor($width=200, $h=50);
$background = imagecolorallocate($img, $r=255, $g=255, $b=0);
$foreground = imagecolorallocate($img, 0, 0, 0);
imagefilledrectangle ( $img, $x1=0,$y1=0,$x2=199,$y2=49, $background);
imagettftext( $img, $fontSize=40, $angel=0, $left=20, $top=30,
$foreground, 'iannnnnVCD_2007.ttf', 'ทดสอบ'
);
imagegif($img);
imagedestroy($img);
?>
Date :
2009-08-15 14:15:44
By :
num
ถ้าผมเป็น เจ้าของ host เองนี้ จะสามารถ ทำได้ไหมครับ ถ้าผมทำได้ จะต้องทำ อะไร ใน host บ้างครับ
Date :
2009-08-16 16:34:58
By :
nilas
ไม่ต้องเป็นเจ้าของโฮสก็ได้ครับ ผมเคยใช้ใน host ฟรีอย่างเช่น thport.com ก็ได้นะ
เพียงแต่โฮสนั้นต้องเปิดให้ใช้ function image ต่างๆ ครับ
สำหรับตัวโปรแกรม captch ลองเล่น YesCAPTCHA by Dr.Yes ดูครับ
http://php.deeserver.net/download/
Date :
2009-08-16 17:56:50
By :
num
ผมไปดาว มาทดสอบใช้งานแล้ว captch เป็น ตัวเลข ผมอยากได้เป็น ภาษาไทยนะครับ ไม่รู้ว่า แนะนำได้อย่างไร
Date :
2009-08-17 20:11:20
By :
nilas
อืมเค้าไม่ได้พัฒนามาให้สร้างเป็นภาษาไทยโดยตรงครับ
แต่เนื่องจากเค้าใช้ font ภาษาไทยก็สามารถแก้ได้ครับ
โดยอย่างแรกให้ไปที่ yescaptcha.class.php
ลบ function random เดิมทิ้งไป
private function random() {
$number = YES_CAPTCHA_DIGIT;
$korkai = 161;
$hornoghoog = 206;
$code='';
srand();
while($number--) {
$code.= chr(rand($korkai,$hornoghoog));
}
return iconv('TIS-620','UTF-8',$code); //กรณีไฟล์เป็น ansi
//return $code; //กรณีไฟล์เป็น utf8
}
และใน function image
ให้ comment เพื่อลบคำสั่งดังต่อไปนี้
#if(strlen($s) != YES_CAPTCHA_DIGIT) { header('HTTP/1.0 404 Not Found', false, 404); return FALSE; }
และ
#$s = trim(chunk_split($s, 1, ' ')); # turn s from '1234' to '1 2 3 4' to avoid digit overlap
เนื่อง utf8 ใช้ function strlen ไม่ได้ แล้วก็ chunk_split ก็แบ่งตัวอักษร utf8 ไม่ได้ครับ
Date :
2009-08-17 21:08:49
By :
num
ขอบคุณ อีกรอบครับ
Date :
2009-08-18 06:55:17
By :
nilas
ได้เป็น ภาษาไทยแล้ว ครับ แต่ส่งไม่แล้ว ไม่ผ่าน เป็น "Incorrect CAPTCHA CODE!!!" ตลอด ต้องไปเพิ่มเติมที่ใหนครับ...
Date :
2009-08-18 07:02:51
By :
nilas
น่าจะเป็นประโยชน์
ลองอ่านดูนะคะ
http://gotoknow.org/blog/tonkla/249552
Date :
2009-08-18 10:34:05
By :
muay028
โทษทีครับ ความก่อนยังไม่ได้ทดสอบเลยไม่รู้ว่ายังใช้ไม่ได้ครับ
ที่ไฟล์ yescaptcha.class.php ยกเลิกการตรวจสอบความยาว string ครับ
public function verify($code) {
if(empty($_SESSION[YES_CAPTCHA_SESSION][$this->_INDEX])) { return FALSE; }
#if(strlen($_SESSION[YES_CAPTCHA_SESSION][$this->_INDEX]) != YES_CAPTCHA_DIGIT) { return FALSE; }
return $code == $_SESSION[YES_CAPTCHA_SESSION][$this->_INDEX];
}
แล้วหน้า form ที่ submit จะต้องเป็น utf-8 นะครับ
แต่ถ้าหน้า form เป็น tis-620 ก็ต้องแปลงค่าก่อนครับ
public function verify($code) {
if(empty($_SESSION[YES_CAPTCHA_SESSION][$this->_INDEX])) { return FALSE; }
#if(strlen($_SESSION[YES_CAPTCHA_SESSION][$this->_INDEX]) != YES_CAPTCHA_DIGIT) { return FALSE; }
return iconv('TIS-620','UTF-8',$code) == $_SESSION[YES_CAPTCHA_SESSION][$this->_INDEX];
}
Date :
2009-08-18 11:00:44
By :
num
ขอบคุณนะครับ ได้แล้ว แต่ รหัสมันมาๆหายๆ อย่างไรไม่รู้ ดังรูป
Date :
2009-08-18 16:43:12
By :
nilas
ลองแสดงหน้า demoimage.php?id=1 ดูครับ ว่ามี error อะไรหรือเปล่า error_reporting(E_ALL); ครับ
ลอง var_dump() ตัวแปร session ดูครับ
ถ้าไม่พบ error ก็ลองโหลดไฟล์ที่ผมแก้ไขตัวนี้ไปใช้ดูครับ
http://www.ziddu.com/download/6098927/dryes.zip.html
Date :
2009-08-18 17:00:30
By :
num
ไป ดาว มาแล้ว เดี่ยวจะลองทดสอบดูนะครับ...
Date :
2009-08-19 08:31:53
By :
nilas
วิธีการป้องกัน spam webboard นะคะ
1. ไฟล์ที่จะแสดงเว็บบอร์ด สมมติชื่อ Newtopic.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=tis-620">
<title>Antispam</title>
</head>
<body>
<center>
<form action="./check.php" method="post" enctype="multipart/form-data">
<em>**
ใส่อักษร 5 ตัวที่ท่านเห็น
** </em><em><strong>*</strong></em>
<input name="antispamcode" type="text" size="6" maxlength="10" /> <img src="./antispam.php" /> <input name="" type="submit" value="Check" />
</form>
</center>
</body>
</html>
2. สร้างไฟล์ php มาอีกอันสำหรับ check ตั้งชื่อว่า check.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Antispam</title>
</head>
<?PHP
@session_start(); // start session if not started yet
ob_start();
$usermem = $_SESSION["usermem"]; // บันทัดนี้สำหรับเริ่มติดต่อกับดาต้าเบส เช่น localhost, root จะอยู่ในโฟรเดอร์ include
require_once "include/connectdb.php"; // บันทัดนี้สำหรับเริ่มติดต่อกับดาต้าเบส เช่น localhost, root จะอยู่ในโฟรเดอร์ include
require_once "include/connect.php"; // บันทัดนี้สำหรับเริ่มติดต่อกับดาต้าเบส เช่น localhost, root จะอยู่ในโฟรเดอร์ include
require_once "include/tdate.php"; // บันทัดนี้สำหรับเริ่มติดต่อกับดาต้าเบส เช่น localhost, root จะอยู่ในโฟรเดอร์ include
if ($_SESSION['AntiSpamImage'] != $_REQUEST['antispamcode'])
{
echo '<center>รหัสป้องกัน Spam ไม่ถูกต้อง <a href="NewTopic.php">กรุณากลับไปแก้ไขข้อมูลครับ</a></center>';
}
else
{
echo '<center>รหัสป้องกัน Spam ถูกต้องแล้ว เราได้รับข้อมูลการตั้งกระทู้ของท่านเรียบร้อยแล้วครับ</center>';
$_SESSION['AntiSpamImage'] = rand(1,9999999);
mysql_query("INSERT INTO webboard (id, topic,message,name,phone,email,dateregist,timeregist) values('', '$_POST[topic]','$_POST[message]','$_POST[name]','$_POST[phone]','$_POST[email]','$e_date', '$etime')") or die ("Cannot Add Database");
}
?>
<body>
</body>
</html>
3.สร้างไฟล์ php มาอีกสำหรับทำ antispam ชื่อ antispam.php
<?php
###############################################################
# Anti-spam Image Generator (CAPTCHA) 1.0
###############################################################
# For updates visit http://www.zubrag.com/scripts/
###############################################################
// Font name to use. Make sure it is available on the server.
// You could upload it to the same folder with script if it cannot find font.
// By default it uses arial.ttf font.
$font = 'arial.ttf';
// list possible characters to include on the CAPTCHA
// ABCDEFGHIJKLMNOPQRSTUVWXYZ
$charset = '0123456789';
$charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
// how many characters include in the CAPTCHA
$code_length = 6;
// antispam image height
$height = 20;
// antispam image width
$width = 80;
############################################################
# END OF SETTINGS
############################################################
// this will start session if not started yet
@session_start();
$code = '';
for($i=0; $i < $code_length; $i++) {
$code = $code . substr($charset, mt_rand(0, strlen($charset) - 1), 1);
}
$font_size = $height * 0.7;
$image = @imagecreate($width, $height);
$background_color = @imagecolorallocate($image, 255, 255, 255);
$noise_color = @imagecolorallocate($image, 20, 40, 100);
/* add image noise */
for($i=0; $i < ($width * $height) / 4; $i++) {
@imageellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
}
/* render text */
$text_color = @imagecolorallocate($image, 20, 40, 100);
@imagettftext($image, $font_size, 0, 7,17, $text_color, $font , $code) or die('Cannot render TTF text.');
/* output image to the browser */
header('Content-Type: image/png');
@imagepng($image) or die('imagepng error!');
@imagedestroy($image);
$_SESSION['AntiSpamImage'] = $code;
exit();
?>
4.สร้างไฟล์ชื่อ token.php เพื่อทำการสุ่มให้สร้างตัวกรอง
<?
function randomToken($len) {
srand( date("s") );
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
$chars.= "1234567890"; // กำหนดอักขษะที่จะนำมา random แก้ได้ นะ
$ret_str = "";
$num = strlen($chars);
for($i=0; $i < $len; $i++) {
$ret_str.= $chars[rand()%$num]; // ใช้ฟังชั่น rand() เข้ามาช่วยในการทำงาน
}
return $ret_str;
}
?>
จบ ๆ ๆ คร่าาาา เอาให้ตายก็บล็อกไอพีไปเรยยยยยยยยยยยยยยยยย
ตุ๊ดตู่
Date :
2013-03-20 05:20:26
By :
tudtu
Load balance : Server 04