السلام عليكم
بالتاكيد ان اغلبنا شاهد في موقع ياهو او هوتميل او اى موقع تجارى
اثناء عملية التسجيل
انك تمر بمرحلة الصورة العشوائية والتى تحتوى على ارقام وحروف يجب عليك ادخالها كما في الصورة حتى تتم عملية التسجيل
اذا لم ترى ذلك من قبل او لم تفهم قصدي تفضل هنا
http://ardalsharq.com/mail/111.php
وبالتاكيد ايضا سالت نفسك
كيف يتم تكوين الصورة هذه وهل هيا صورة متعددة موجودة اساسا بالموقع ؟
وكيف يتم تمييز الحروف التى تظهر على الصورة بينما تقوم انت بادخالها من لوحة المفاتيح ؟
الان سوف اقوم بشرح كيفية عمل ذلك بواسطة php
ولكن لا تتعجل
سوف اقوم بشرح الاكواد خطوة خطوة ثم وضع الكود كاملا
وسوف اضع ملف مرفق يحتوى البرنامج كاملا
سوف نستخدم الجلسات (session) في هذا السكربت البسيط
في البدايه نخبر السرفر اننا بصدد عملية تكوين صورة
مع تحديد نوع الصورة
ويكون ذلك كالاتى
اذا اردت استخدام الامتداد jpg فقط غيرpng في الكود بالاعلى الى jpgكود PHP:
<?php
/*ارسال الهيدر*/
Header("Content-Type: image/png");
?>
الان تريد ان تعرف كيف سنقوم بتكوين الصورة
ولكن مهلا في البدايه يجب وضع كود السيشن او الجلسه
ما معنى هذا الكودكود PHP:<?php
/* بداية الجلسة. */
session_start();
/*سوف نقوم بتعريف هذا المتغير لاحقا.*/
$new_string;
/*تسجيل المتغير الخاص بالجلسة لكى نتمكن من اسختدامه بعد ذلك. */
session_register('new_string');
?>
فقط بدأنا دالة السيشن
واضفنا متغير جديد بدون تحديد
الان نبدأ الكود الخاص بانشاء الصورة
الان وضعت المتغير im كرمز سوف اقوم باستخدامه للتعبير عن الصورة طوال الدرسكود PHP:
<?php
/* انشاء الصورة*/
/*الرقم الاول هو عرض الصورة والرقم الثانى هو الارتفاع*/
$im = ImageCreate(200, 40);
?>
وحددنا ابعاد الصورة باستخدام الدالة image create
ولكن هل هيا صورة بلا الوان ؟؟؟؟؟؟
لا الان سوف نجعلها اكثر حيوية وحركة
الان استخدمنا المتغييرن white and blackكود PHP:php
/*نقوم بتعين لونين مختلفين للاستخدام في الصورة */
$white = ImageColorAllocate($im, 255, 255, 255);
$black = ImageColorAllocate($im, 0, 0, 0);
?>
ويمكن تغيير الالوان بتغيير قيم الارقام في الكود
الان
لدينا صورة 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 احداثي نقطة بداية الكتابه على الصورة
الخامس هو الكود الذي قمنا بتشفيره وجلبة من دالة التشفير
السادس هو لون خط الكتابه وهو هنا اللون الابيض
الان انتهينا من كل معلومات الصورة التي نريد انشائها
فقط يتبقى ان نعطيها اسم يمكن استخدامه في أي مكان في الصفحة مثلها مثل أي صورة عادية
الان اعطينا الصورة اسم verify.pngكود PHP:<?php
/*الاعداد النهائي للصورة*/
ImagePNG($im, "verify.png");
ImageDestroy($im);
?>
فقط قمنا بتحويل كافة المعلومات التي قمنا بادخالها للمتغير 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);
?>



