اشهار مواقع,اشهار منتديات,منتديات اشهار المنتيات,تقنيات الاشهار,اشهار مجانى,منتدى الاشهار العربى,منتدى الاشهار المجانى,اشهر موقعك,اشهر منتداك.اشهر مدونتك,اشهر صفحتك,اشهار مواقع,اشهار منتديات,اشهار صفحات,اشهار مدونات,اشهارجروبات,add url,add site,add grou
 
الرئيسيةالرئيسية  البوابةالبوابة  اليوميةاليومية  س .و .جس .و .ج  بحـثبحـث  المجموعاتالمجموعات  التسجيلالتسجيل  دخولدخول  

شاطر | 
 

 طريقة عمل الكابتشا بأسهل الطرق

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
AL Master
الــمــديــر الــعــامــ
الــمــديــر الــعــامــ
avatar

المساهمات : 646
تاريخ التسجيل : 10/11/2010

مُساهمةموضوع: طريقة عمل الكابتشا بأسهل الطرق   الجمعة نوفمبر 12, 2010 1:12 pm

بسم الله الرحمن الرحيم

السلام عليكم ورحمة وبركاته

في درس اليوم سنتناول طريقة عمل الكابتشا أو التحقق بالصورة بأسهل الطرق الممكنه

اولا نرتب أفكارنا
هنا اكثر من طريقة لعمل الكابتشا
ولكن ماهي الكابتشا

الكابتشا هي عبارة عن سؤال وإجابة

ويمكن عمل ذلك بأكثر من طريقه
سواء بعمل صورة
او عمل سؤال واجابة

ويمكن عمل ذلك بأكثر من طريقة
اما بقاعدة البيانات مثلا او عن طريق السيزون

وبما اننا نحاول قدر الامكان تخفيف الاستعلامات عن قاعدة البيانات فسأقوم بشرح طريقة عمل الكابتشا عن طريق السيزون

اذن خطوات العمل
1 - إنشاء كود عشوائي
2 - وضع هذا الكود في صورة
3 - إنشاء سيزون بهذا الكود
4 - عرض الكود
5 التحقق من الكود

اذن لنقوم بعمل كلاس بسيط جدا يقوم بهذه المهمه

على الطريقه التالية
رمز PHP:
class Captcha {
// الأكواد هنا
}


ثانيا نقوم بعمل مفردات الكلاس التي سنحتاجها وهي
1- الكود
2 - طول الصورة
3 - عرض الصورة

ليصبح الكلاس كالتالي
رمز PHP:
class Captcha {

protected
$code; // كود التحقق الذي سيظهر في الصورة ويحمله السيزون
protected $width = 35; // ؟؟ عرض الصورة
protected $height = 150; // إرتفاع الصورة

}


ثالثا نقوم بعمل الكنسرتكتور للكلاس وهو دالة إنشاء الكلاس التي تقوم بتنفيذ بعض المهام عند استدعاء الكلاس
وفي هذه الحالة ستقوم هذه الدالة بعمل شيء واحد فقط
وهو انشاء الكود العشوائي الذي سيتم تعيينه الى صورة التحقق
وهناك اكثر من طريقه لعمل كود عشوائي
هذه هي إحداها
رمز PHP:
function __construct() {
$this->code = substr(sha1(mt_rand()), 17, 6);
}


وبالتالي يصبح الكلاس كالتالي
رمز PHP:
class Captcha {

protected
$code; // كود التحقق الذي سيظهر في الصورة ويحمله السيزون
protected $width = 35; // ؟؟ عرض الصورة
protected $height = 150; // إرتفاع الصورة

function __construct() {
$this->code = substr(sha1(mt_rand()), 17, 6);
}

}


اذن انتهينا من الاعدادات وكود التحقق
نحتاج الى دالة بداخل الكلاس تعود لنا بالكود الذي تم انشاؤه من قبل الكونستركتور
يعني دالة ترجع بالكود الذي تم إنشاؤه

وهي سهله جدا بما ان الكود هو أحد متغيرات الكلاس فكل ما نحتاجه انها تعود به فقط
وهي ما سيتم إستخدامها خارج الكلاس لجلب الكود لعملية التحقق
والدالة كالتالي

رمز PHP:
function getCode(){
return
$this->code;
}


وهي ايضا يمكن دمجاه مع الكنستركتور لانها تعود بقيمة الكنتسركتور
لكن كنوع من النظام فاننا نقوم بعملها في دالة لحالها
اذ ربا تحتاج الى اداء بعض العمليات في المستقبل على الكود
فيفضل فصله في دالة لوحده
اذن اصبح الكلاس كالتالي
رمز PHP:
class Captcha {

protected
$code; // كود التحقق الذي سيظهر في الصورة ويحمله السيزون
protected $width = 35; // ؟؟ عرض الصورة
protected $height = 150; // إرتفاع الصورة

function __construct() {
$this->code = substr(sha1(mt_rand()), 17, 6);
}

function
getCode(){
return
$this->code;
}
}


أخيرا بقى دالة واحده فقط وهي دالة التي تقوم بإنشاء الصورة ودمج الكود فيها
وهي تحتاج بعض النظام ولنمشي على الخطوات التالية :1
اولا إنشاء صورة بالطول والعرض المحدد في الكلاس
رمز PHP:
$image = imagecreatetruecolor($this->height, $this->width);


ثانيا جلب بعض المتغيرات عن هذه الصورة التي تم إنشاؤها مثل الطول والعرض الحقيقي لها
والهدف من هذا هو عمل بعض الإضافات العشوائية على الصورة بحيث لا تصبح الخلفية بيضاء كنوع من أنواع التصعيب
وهي كالتالي
رمز PHP:
$width = imagesx($image);
$height = imagesy($image);


ثالثا عمل بعض أكواد الالوان العشوائية إستنادا الى الصورة التي تم إنشاؤها
كود إنشاء البقعه السوداء
رمز PHP:
$black = imagecolorallocate($image, 0, 0, 0);


كود إنشاء بقعه بيضاء
رمز PHP:
$white = imagecolorallocate($image, 255, 255, 255);


كود إنشاء بقعه حمراء (( نلاحظ هنا اننا استخدمنا الدالة
imagecolorallocatealpha وهي تحتاج الى مكتبة GD 2 أو أعلى
رمز PHP:
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);


كود إنشاء بقعه خضراء
رمز PHP:
$green = imagecolorallocatealpha($image, 0, 255, 0, 75);


كود إنشاء بقعه زرقاء
رمز PHP:
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);


ولمزيد عن الدوال السابقه من الرابط التالي
http://www.php.net/manual/en/functio...ocatealpha.php
http://www.php.net/manual/en/functio...orallocate.php

وما نلاحظه في الدوال السابقه اننا نعطيها أكود الالوان التي تريد ويمكنك إنشاء المزيد من الالوان على حسب البارميترات التي تعطيها للدالة
ومن ثم نقوم بعمل صورة مربعه بيضاء خالية تماما بالمقاسات السابقه عن طريق الدالة imagefilledrectangle وطبعا نعطيها كود اللون الابيض الذي قمنا بانشاؤه سابقا
كالتالي
رمز PHP:
imagefilledrectangle($image, 0, 0, $width, $height, $white);


ومن ثم نقوم بدمج بقع الالوان العشوائية الى الصورة السابقه ولن نحدد مكان ثابت للبقع بل مكان عشوائي كل مرة عن السابقه وهو عن طريق تغيير الاحداثيات كالتالي

رمز PHP:
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $red);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $green);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $blue);


ثم نقوم بعمل إطار لهذه الصورة وليكن لونه أسود وفي هذه العملية يتم التعامل مع كل ضلع من أضلاع الصورة لوحده ليتم رسم الإطار إليه كالتالي
رمز PHP:
imagefilledrectangle($image, 0, 0, $width, 0, $black);
imagefilledrectangle($image, $width - 1, 0, $width - 1, $height - 1, $black);
imagefilledrectangle($image, 0, 0, 0, $height - 1, $black);
imagefilledrectangle($image, 0, $height - 1, $width, $height - 1, $black);


وطبعا يمكن تجاوز الخطوة السابقه لالغاء عمل اطار الصورة او تغيير لونه (( براحتك يعني ))

الى هنا الكود السابق يقوم بإنشاء صورة كهذه


ما بقى هو ادارج الكود العشوائي الى الصورة وسنستخدم هنا الدالة imagestring كالتالي

رمز PHP:
imagestring($image, 10, intval(($width - (strlen($this->code) * 9)) / 2), intval(($height - 15) / 2), $this->code, $black);


وقمنا يتحديد الخيارات ان حجم الخط 10 ثم إحداثيات الكود من أسفل وأعلى لكي يظهر بالضبط في المنتصف ومن ثم الكود ومن ثم لون الكود

وبالتالي تعيين الهيدر الى نوعيه الصورة ومن ثم عرض الصورة ثم تدمير الصور من المتصفح كالتالي

رمز PHP:
header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);


وبهذا تكون الدالة إنتهت وكذلك الكلاس
وتكون الدالة في داخل الكلاس كالتالي
رمز PHP:
class Captcha {
protected
$code;
protected
$width = 35;
protected
$height = 150;

function
__construct() {
$this->code = substr(sha1(mt_rand()), 17, 6);
}

function
getCode(){
return
$this->code;
}

function
showImage() {
$image = imagecreatetruecolor($this->height, $this->width);

$width = imagesx($image);
$height = imagesy($image);

$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
$green = imagecolorallocatealpha($image, 0, 255, 0, 75);
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);

imagefilledrectangle($image, 0, 0, $width, $height, $white);

imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $red);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $green);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $blue);

imagefilledrectangle($image, 0, 0, $width, 0, $black);
imagefilledrectangle($image, $width - 1, 0, $width - 1, $height - 1, $black);
imagefilledrectangle($image, 0, 0, 0, $height - 1, $black);
imagefilledrectangle($image, 0, $height - 1, $width, $height - 1, $black);

imagestring($image, 10, intval(($width - (strlen($this->code) * 9)) / 2), intval(($height - 15) / 2), $this->code, $black);

header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
}
}


وتكون طريقة إستخدام الكلاس كالتالي
رمز PHP:
$m = new Captcha();
$string = $m->getCode();
$_SESSION['key'] = md5($string);
print
$m->showImage();


ولاستخدام الكلاس سيكون إدراجه على هيئة صورة في صفحات الفورم كالتالي
طبعا بعد إستدعاؤه بالطريقه السابقة الذكر في صفحه على المثال السابق اسمها captcha.php
ولابد من إنشاء السيزون ايضا في نفس هذه الصفحه
رمز PHP:
<img src="captcha.php" alt="" border="0" />


وستكون الصورة التي تنتج من الكلاس كالشكل التالي




واخيرا هذا هو كود الكلاس كاملا
رمز PHP:
session_start();

class
Captcha {
protected
$code;
protected
$width = 35;
protected
$height = 150;

function
__construct() {
$this->code = substr(sha1(mt_rand()), 17, 6);
}

function
getCode(){
return
$this->code;
}

function
showImage() {
$image = imagecreatetruecolor($this->height, $this->width);

$width = imagesx($image);
$height = imagesy($image);

$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
$green = imagecolorallocatealpha($image, 0, 255, 0, 75);
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);

imagefilledrectangle($image, 0, 0, $width, $height, $white);

imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $red);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $green);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $blue);

imagefilledrectangle($image, 0, 0, $width, 0, $black);
imagefilledrectangle($image, $width - 1, 0, $width - 1, $height - 1, $black);
imagefilledrectangle($image, 0, 0, 0, $height - 1, $black);
imagefilledrectangle($image, 0, $height - 1, $width, $height - 1, $black);

imagestring($image, 10, intval(($width - (strlen($this->code) * 9)) / 2), intval(($height - 15) / 2), $this->code, $black);

header('Content-type: image/jpeg');

imagejpeg($image);

imagedestroy($image);
}
}
// الإستخدام
$m = new Captcha();
$string = $m->getCode();
$_SESSION['key'] = md5($string);
print
$m->showImage();


ارجو الإستفاده ولأي سؤال إن شاء الله متواجد معكم

|اشهار مواقع|اشهار منتديات|اشهار صفحات|اشهار مدونات|اشهارجروبات|اضف موقع|اضف منتدى|اضف صفحة|اضف مدونة|اضف|add url|add site|add group|add forum|add blog|add page|add dir|add news|add link|add

Web Master
Forum EGY
2012@2013
الرجوع الى أعلى الصفحة اذهب الى الأسفل
http://esh7ar.own0.com
 
طريقة عمل الكابتشا بأسهل الطرق
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
اشهار المنتديات :: منتديات دعم المواقع وتطويرها :: منتدى لغات البرمجه php و asp و Ajax و Java-
انتقل الى: