السلام عليكم
بالتاكيد ان اغلبنا شاهد في موقع ياهو او هوتميل او اى موقع تجارى
اثناء عملية التسجيل
انك تمر بمرحلة الصورة العشوائية والتى تحتوى على ارقام وحروف يجب عليك ادخالها كما في الصورة حتى تتم عملية التسجيل
اذا لم ترى ذلك من قبل او لم تفهم قصدي تفضل هنا
http://ardalsharq.com/mail/111.php
وبالتاكيد ايضا سالت نفسك
كيف يتم تكوين الصورة هذه وهل هيا صورة متعددة موجودة اساسا بالموقع ؟
وكيف يتم تمييز الحروف التى تظهر على الصورة بينما تقوم انت بادخالها من لوحة المفاتيح ؟
الان سوف اقوم بشرح كيفية عمل ذلك بواسطة php
ولكن لا تتعجل
سوف اقوم بشرح الاكواد خطوة خطوة ثم وضع الكود كاملا
وسوف اضع ملف مرفق يحتوى البرنامج كاملا
سوف نستخدم الجلسات (session) في هذا السكربت البسيط
في البدايه نخبر السرفر اننا بصدد عملية تكوين صورة
مع تحديد نوع الصورة
ويكون ذلك كالاتى
كود PHP:
<?php
/*ارسال الهيدر*/
Header("Content-Type: image/png");
?>
اذا اردت استخدام الامتداد jpg فقط غيرpng في الكود بالاعلى الى jpg
الان تريد ان تعرف كيف سنقوم بتكوين الصورة
ولكن مهلا في البدايه يجب وضع كود السيشن او الجلسه
كود PHP:
<?php
/* بداية الجلسة. */
session_start();
/*سوف نقوم بتعريف هذا المتغير لاحقا.*/
$new_string;
/*تسجيل المتغير الخاص بالجلسة لكى نتمكن من اسختدامه بعد ذلك. */
session_register('new_string');
?>
ما معنى هذا الكود
فقط بدأنا دالة السيشن
واضفنا متغير جديد بدون تحديد
الان نبدأ الكود الخاص بانشاء الصورة
كود PHP:
<?php
/* انشاء الصورة*/
/*الرقم الاول هو عرض الصورة والرقم الثانى هو الارتفاع*/
$im = ImageCreate(200, 40);
?>
الان وضعت المتغير im كرمز سوف اقوم باستخدامه للتعبير عن الصورة طوال الدرس
وحددنا ابعاد الصورة باستخدام الدالة image create
ولكن هل هيا صورة بلا الوان ؟؟؟؟؟؟
لا الان سوف نجعلها اكثر حيوية وحركة
كود PHP:
php
/*نقوم بتعين لونين مختلفين للاستخدام في الصورة */
$white = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);
?>
الان استخدمنا المتغييرن white and black
ويمكن تغيير الالوان بتغيير قيم الارقام في الكود
الان
لدينا صورة im تحتوى على لونين white و black وابعادها 200* 40
الان ننتقل لمرحلة اخرى وهي عمل الكود العشوائي للارقام والحروف التي ستظهر على الصورة باستخدام نظام md5 للتشفير ولكن لن نتطرق لكيفية عمل نظام التشفير لانه خارج نطاق عملنا الان
كود PHP:
<?php
/*توليد الكود العشوائى.*/
srand((double)microtime()*1000000);
/*تشفير الكود وتحويله لارقام وحروف */
$string = md5(rand(0,9999));
/*الان نحدد ثلاث خيارات المتغير – عدد الخانات التى يتم جلبها من المتغير – عدد الحروف والارقام التي ستظهر وتضمن داخل المتغير الجديد وهي هنا رقم 5.*/
$new_string = substr($string, 17, 5);
?>
الان تعالوا نعيد تنظيم الالوان والاكود داخل الصورة
او تلويين الصورة
كود PHP:
<?php
/*fill image with black*/
ImageFill($im, 0, 0, $black);
?>
الان قمنا بتلويين الصورة بالكامل بالمتغير بلاك وهو اللون الاسود كما حددنا قيمته اعلى
الان اين سنكتب على الصورة
هل نبدأ من المنتصف ام من اليسار ؟
ابعاد الصورة هي 200 * 40
اذن احداثي الركن السفلي الايمن هو 200,40
اذن فليكن الكود في المنتصف فتكون احداثي نقطة البداية للكتابه
80 و 10 مثلا
كود PHP:
<?php
ImageString($im, 5, 80, 10, $new_string, $white);
?>
الان نتعرف ماذا كتبنا بالكود اعلاه
اول متغير هو الصورة im
الثاني هو حجم الخط يمكن استخدام اى رقم من 1 الى 5
80 و 10 احداثي نقطة بداية الكتابه على الصورة
الخامس هو الكود الذي قمنا بتشفيره وجلبة من دالة التشفير
السادس هو لون خط الكتابه وهو هنا اللون الابيض
الان انتهينا من كل معلومات الصورة التي نريد انشائها
فقط يتبقى ان نعطيها اسم يمكن استخدامه في أي مكان في الصفحة مثلها مثل أي صورة عادية
كود PHP:
<?php
/*الاعداد النهائي للصورة*/
ImagePNG($im, "verify.png");
ImageDestroy($im);
?>
الان اعطينا الصورة اسم verify.png
فقط قمنا بتحويل كافة المعلومات التي قمنا بادخالها للمتغير im الى صورة وسميناها اسم جديد
ثم استخدمنا دالة image destroy
هذه الخطوة فائدتها :
تحرير ذاكرة السرفر من البيانات المدخلة
(( يا فرحة صاحب السرفر على هذه الخطوة ))
قد يرسل لك هدية بسبب استخدامك هذه الدالة
الان الكود النهائي
بعد تجميع كل هذه الخطوات
كود PHP:
<?php
/*ارسال الهيدر*/
Header("Content-Type: image/png");
/* بداية الجلسة. */
session_start();
/*سوف نقوم بتحديد المتغير لاحقا.*/
$new_string;
/*ربط المتغير. */
session_register('new_string');
/*كود تعريف صفحة اتش تى ام ال عادية .*/
echo "<html><head><title>verify</title></head>";
echo "<body>";
/* تجهيز الصورة*/
$im = ImageCreate(200, 40);
/*تحديد الوان الصورة*/
$white = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);
/*انشاء الكود العشوائي.*/
srand((double)microtime()*1000000);
/*تشفير المتغير او الكود*/
$string = md5(rand(0,9999));
/*انشاء المتغير الجديد. */
$new_string = substr($string, 17, 5);
/*تلوين خلفية الصورة باللون الاسود*/
ImageFill($im, 0, 0, $black);
/*تحديد حجم الخط واحداثي نقطة بدء الكتابه ولون الخط */
ImageString($im, 5, 80, 10, $new_string, $white);
/* اعداد الصورة النهائية لكى تكون جاهزة للعرض في المتصفح*/
ImagePNG($im, "verify.png");
ImageDestroy($im);
?>
تابع <<<<<>>>>>>>>