سلسلة مبسطة لتعلم أساسيات لغة Perl بالأمثلة …

عام 0 geek4arab
Spread the love
 سلسلة مبسطة لتعلم أساسيات لغة Perl بالأمثلة …  أضيف في: 1-3-1427هـ
لغة بيرل Perl و سي جي آي CGI

الدرس الثاني

إعداد خادم HTTP :

لا يمكنك تشغيل تطبيقات CGI بدون خادم ويب Web Server ، و الأغلبية العظمى من خوادم الويب يعملوا على نظام يونيكس Unix إلا أن هناك العديد من خوادم الويب العاملين على الويندوز أيضاً . من هذه الخوادم خادم Sambar Server و هو مجاني يمكنك الحصول عليه من هذا الموقع . بعد تنزيله فك ضغطه و شغل الملف setup.exe و بعد ذلك يمكن تشغيله من قائمة إبدأ Start ، و هو لا يظهر نافذة عند بدء تشغيله ، فقط ستلاحظ أيقونته بجوار الساعة في صينية النظام System Tray . و إذا كان هذا البرنامج فعالاً فإنه يحيل حاسبك إلى خادم ويب مصغر تستطيع فيه تشغيل برامج البيرل و السي جي آي كأي خادم ويب عادي على الإنترنت ، و لا يلزمك حتى الاتصال بالإنترنت .

الكتابة بالهتمل :

تعلمنا أنه عندما نطبع أي شيء من برنامج بيرل عبر سي جي آي فسوف يتم إرساله إلى الخادم الذي عليه أن يقرر بعد ذلك ما الذي يجب عليه فعله . و الخادم يتوقع أن يكون كل شيء يتم إرساله إليه في واحد من صيغ عديدة كلها تخضع لمقياس MIME ، و هو بروتوكول لنقل الملفات التي ليست على هيئة أسكي ASCII مثل الصور و الرسوم و الملفات الصوتية باستخدام بروتوكول نقل النصوص . و لغة هتمل HTML تفي بالغرض لهذا الجزء ، فهي خاضعة لمواصفات MIME أيضاً .

الآن نحن لم نعد نطبع إلى الشاشة ، بل إلى خادم الويب و بالتالي نحتاج إلى مخاطبة خادم الويب باللغة التي يفهمها (الخاضعة لمقياس مايم) و هي لغة هتمل HTML ، و لذلك فإننا يجب أن نعيد بناء برنامجنا الأول ليرسم صفحة ويب يستطيع خادم الويب فهمها و عرضها .

افتح محرر النص و اكتب السطور التالية ثم احفظها باسم hellowww.pl في الفهرس الذي يتوقع خادم الويب أن يجد فيه برامج CGI و هو عادة يكون في c:\program files\sambar\cgi-bin :

PHP CODE:
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029

<?php #!c:/perl/bin

#hellowww.pl

# A perl program that draws a web page.

print 'Content-type: text/html','\n\n'; # MIME header

print '','\n';

print '';

print '','\n';

print '','\n';

print '','\n';

print '

Hello World !
','\n';

print '','\n';

print '','\n';

# End Hellowww.pl

?>

الآن جئنا للنقطة المهمة ، كيف تشغل هذا البرنامج . تأكد أولاً من أن Sambar Server فعال و أن أيقونته موجودة في صينية النظام

ثم افتح متصفحك و اكتب فيه العنوان التالي localhost/cgi-bin/hellowww.pl و اضغط زر الإدخال . هل كان الناتج مثل هذه الصورة :

تهانينا .. لقد قمت بكتابة و تشغيل أول برنامج سي جي آي خاص بك .

في هذا البرنامج جمل اطبع print أصبحت تكتب شفرة هتمل HTML . و قد عرف الخادم ماذا يفعل في هذا البرنامج بسبب أول سطر قابل للتنفيذ في البرنامجprint ‘Content-type: text/html فهو قد أخبر الخادم أن محتوى المعلومات المرسلة إليه هي نص و أن هذا النص من نوع HTML . باقي البرنامج يطبع جمل هتمل أساسية .

الوظائف الفرعية Subroutines في بيرل :

مخترع بيرل (لاري وول) كتب ذات مرة أن أفضل ثلاث ميزات للبرمجة هي الكسل و عدم الصبر و التعالي . هذه الجملة تعبر عن حقائق مهمة للغاية يمكننا توضيحها كالآتي : الكسل و عدم الصبر يجعلان المبرمجين يقتلوا أنفسهم لتجنب فعل الأشياء أكثر من مرة واحدة ، و لهذا تم اختراع الوظائف الفرعية Subroutines لكي تجنب المبرمجين من فعل الشيء نفسه مرة و مرات عديدة أخرى . الوظيفة الفرعية هي كتلة من الشفرة تستدعي كتلة أخرى من الشفرة تم حفظها مسبقاً و تنفذها و بعد أن تنتهي من تنفيذها تكمل تنفيذ نفسها . و بمفهوم أكثر فجاجة ، والدك أمرك أن تؤدي ثلاثة أعمال متتالية ، مثلاً اغسل السيارة ثم تشتري علبة سجائر له ثم تصعد إلى السطح لتضبط اتجاه الهوائي (الإيريال) . أنت غسلت السيارة و تعبت و البائع بعيد ، فناديت على أخيك الصغير و أعطيته ريال أو ريالين ليذهب إلى البائع و يشتري علبة سجائر و انتظرته حتى عاد ثم أخذت منه علبة السجائر و ذهبت لتعطيها لوالدك ثم صعدت إلى السطح لتضبط الهوائي . و في أي وقت آخر إذا بعثك والدك لتشتري له شيئاً لا يستحق ذهابك بنفسك ترسل أخيك الصغير (المتواجد دائماً) و كان الله في عون ميزانيتك . هذه فكرة عامة عن مفهوم الوظائف الفرعية subroutines ، (و لا أريد أية تعليقات سخيفة على المثال ، فقد أجهدت مخي للغاية حتى أستطيع الخروج به) .

بالنسبة للتعالي فهذا شيء لن تعرفه إلا بعد أن تصبح مبرمج مشهور يشير الجميع إليه و يقولون (معنا الخبير .. معنا الخبير) . و بالنسبة للمبتدئين أمثالنا فأي شيء مهما يكن تجد أن برنامجك يفعله أكثر من مرة يجب وضعه في وظيفة فرعية subroutine حتى يمكن استدعائه مرة أخرى إذا احتجت إليه .

استعمال أمر Require :

برنامج hellowww.pl لا يفعل أي شيء أكثر من مرة واحدة و بالرغم من ذلك فهو يحتوي على بعض الشفرة التي ستستعملها على الأقل مرة واحدة في كل برنامج سي جي آي تكتبه . هذه الأجزاء هي التي ترسم حدود صفحة الويب و هي تتكون من جزئين : جزء علوي هو الآتي :

print ‘Content-type: text/html’,’\n\n’; # MIME header

print ”,’\n’;

print ”;

print ”,’\n’;

print ”,’\n’;

و جزء سفلي هو الذي يحدد نهاية صفحة الهتمل ، و هو الآتي :

PHP CODE:
0001
0002
0003
0004

<?php print '','\n';

print '','\n';

?>

سوف نستفيد من هذين الجزئين بأن نضع كل جزء منهما في ملف منفصل ثم نستعمل وظيفة require لاستدعائهما في الأماكن الملائمة في أي برنامج نريده . و لكن يجب أن نلاحظ أن وظيفة require تعرف لك الوظيفة الفرعية التي استدعيتها و لكنها لا تستعملها ، الآن نعرف كيف نستعملها . دعنا الآن نبدأ بعمل وظيفة فرعية من شفرة الجزء السفلي ، افتح محرر النص و اكتب هذه الأسطر :

PHP CODE:
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020

<?php #!c:/perl/bin

# set up a standard HTML footer section. At this point , it simply

# ends the Body and HTML sections.

sub HTML_Footer

{

print '\n','','\n';

print '','\n';

}

1;

# End HTML_Footer

?>

احفظ الملف باسم htmlend.pl .

كلمة sub تعرف الشفرة الآتية بعدها بأنها وظيفة فرعية خاصة كل الشفرة ما بين أداتي الحصر المفتوحتين } { . أما HTML_Footer فهي اسم الوظيفة الفرعية الذي نستطيع أن نناديها به . أما رقم 1 الذي وضعناه كسطر منفصل في نهاية الشفرة فهو لكي يرشد المترجم أن عملية تنفيذ هذه الوظيفة الفرعية قد تمت بنجاح و أن قيمتها 1 و هي قيمة حقيقية ليست فارغة أو خاطئة ، و يمكنك الانتقال لتنفيذ باقي خطوات البرنامج .

تركيب ملف شفرة الجزء السفلي :

لنستعمل الوظيفة الفرعية التي أعددناها في htmlend.pl سوف نغير أشياء بسيطة في مثالنا السابق hellowww.pl . افتح ملف hellowww.pl باستخدام محرر النص المفضل عندك و أجر التغيرات التالية :

PHP CODE:
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029

<?php #!c:/perl/bin

#hellowww.pl

# A perl program that draws a web page- with subroutines.

require 'htmlend.pl'; # Call in file.

print 'Content-type: text/html','\n\n'; # MIME header

print '','\n';

print '';

print '','\n';

print '','\n';

print '','\n';

print '

Hello World !
','\n';

&HTML_Footer;

# End hellowww.pl

?>

هل لاحظت التغيير ؟ لقد أضفنا وظيفة require في أول البرنامج لتستدعي الملف htmlend.pl و لكننا لم نستفيد من محتوياته أو وظائفه في حينها ، بل استفدنا منها عندما وضعنا اسم الوظيفة الفرعية الموجودة في الملف بعد علامة & في المكان الذي احتجنا إليها فيه ، أي في نهاية البرنامج .

و لاحظ أن require تتطلب أن تظهر السلسلة الخاصة بها بين علامتي اقتباس مثل وظيفة print . بالطبع يجب عليك أن تضع ملف htmlend.pl في نفس المكان الذي يوجد فيه ملف hellowww.pl و إلا فإن وظيفة require سوف تفشل و تهدم باقي البرنامج .

تركيب شفرة الجزء العلوي :

أولاً يجب أن نضع شفرة الجزء العلوي في ملف منفصل كما تعلمنا لنستخدمه كوظيفة فرعية . افتح محرر النص و اكتب السطور التالية ثم احفظها باسم htmlhead.pl في نفس مكان الملفين السابقين كما اتفقنا :

PHP CODE:
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020

<?php #!c:/perl/bin

# set up a standard HTML header section

# with the page title passed to it.

sub HTML_Header

{

print 'Content-type: text/html','\n\n'; # MIME header

print '','\n\n';

print '','\n\n';

print '','\n\n';

print '','\n\n';

?>

}

1;

PHP CODE:
0001
0002

<?php # End HTML_Header.pl

?>

هناك علامة جديدة مذكورة بعد ‘,’\n\n’;

العلامة @ هي واحدة من علامات الاختصار العديدة السهلة في بيرل و لكنها مربكة إلى حد ما ، و هي كما عرفنا تشير إلى قائمة أو مجموعة و هي هنا خاصة بسلسلة حرفية أو عدة سلاسل . و يمكننا أن نستبدل الشرطة _ فيها بأي سلسلة حرفية عندما نستدعي هذه الوظيفة الفرعية في برنامج آخر ، و هذا ما فعلناه ، حين استبدلنا الشرطة _ بالعبارة ‘perl meets the world wide web’ في :

&HTML_Header (‘perl meets the World Wide Web’);

لاحظ أننا وضعنا السلسلة الحرفية بين علامتي اقتباس كالعادة و لكن وضعناهم بين قوسين لنعرف البرنامج أن هذه هي المقابل للشرطة الموجودة في الوظيفة الفرعية .

الآن شغل المتصفح الخاص بك ، و تأكد من أن Sambar Server فعّال و شغل الملف hellowww.pl كما تعلمنا من قبل :

كما لاحظت لا يوجد اختلاف بين ما يعرضه المتصفح الآن و ما عرضه في برنامج hellowww.pl الأول ، انت قمت بنفس العمل و لكن في وقت أقل و كفاءة أكبر .

استعمال ملف Hosts :

عندما تكتب عنوان أي موقع في المتصفح فإن هذا العنوان بالنسبة له لا يعني شيئاً ، يجب أن يكون العنوان مترجماً إلى عنوان IP مثل :

198.169.20.0

يجب أن يترجم العنوان الوصفي إلى عنوان IP قبل أن يمكنه التعامل معه ، و بالتالي فإن المتصفح يحصل على مقابل العنوان الوصفي الذي كتبته عن طريق Domain Name Server أو اختصاراً DNS و هو جدول من أسماء المجالات Domain Names مثل : www.single.com و عناوين آي بي المقابلة لها ، فيعطيه المتصفح العنوان الوصفي أو اسم المجال و يعطيه DNS العنوان العددي المقابل .

و إذا كان المتصفح الخاص بك ليس متصلاً بالإنترنت فإنه ليس لديه وسيلة لتحليل أسماء المجال أو ال Domain Names ، و مع ذلك فإن DNS هو المكان الثاني الذي يبحث فيه عن العناوين ، أما المكان الأول فهو ملف Hosts الموجود في مجلد الويندوز في جهازك :

كما ترى فهو ملف نص عادي يمكنك فتحه بأي محرر نصوص مثل Notepad . كل الأسطر في هذا الملف ما عدا السطر الأخير تبدأ بعلامة التعليق كما نعرف ، أما السطر الأخير الذي ليس به تعليق فهو يعرّف العنوان الذي يشير إلى الكمبيوتر المحلي أي جهازك و هو Localhost و مقابله في عناوين الآي بي هو (1 . 0 . 0 . 127) . الآن إذا كان Sambar Server عاملاً ، يمكنك توجيه المتصفح لديك إلى العنوان http://localhost ليعرض لك الصفحة الداخلية الأساسية لبرنامج الخادم Sambar العامل على حاسبك .

انتهـــــى

تأليف : فيكرام فاسواني

ترجمة : Single Plural

الكاتب: Single Plural

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة