المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كل ما تريد معرفته عن السي جي آي (cgi)


*][_JIMMY_][*
23-01-2005, 05:02
كل ما تريد معرفته عن السي جي آي (CGI)




ما هي الـ سي جي آي (CGI)؟

هي برامج تخدم صفحات الأنترنت و تربط بينها و بين البرمجيات التي لا تتفاهم بلغات الإنترنت.

مثلاً لدينا صفحة على الإنترنت. و صفحات الأنترنت ما تفهم غير ال html و أي شي ثاني ممكن نضعة داخل ال html مثل ال JavaScript و DHTML وغيرها.

و لدينا قاعدة بيانات مكتوبة على ال Oracle، وال Oracle تفهم SQL.

المسألة أننا نريد أن ندخل البيانات عن طريق المتصفح بحيث تذهب أوتوماتيكياً إلى قاعدة البيانات.

مشكلة في التفاهم. واحد يتكلّم html والثاني يتكلّم Sql كأنه واحد يتكلم صيني، والثاني عربي.

هنا يأتي دور ال CGI و هي اختصار: Common Gateway Interface و هي بيئة في الوسط و تعنى بالترجمة بين الطرفين أو بشكل أدق بالربط بين الطرفين.

يمكن كتابة ال CGI بعدة لغات مثل: Perl, Java وغيرها الكثير. هذه اللغات تعتبر مرنة و تستطيع أن تنتج صفحات الأنترنت و في نفس الوقت تستطيع أن تتعامل مع البرامج المختلفة على الخادم الذي تكون محفوظة عليه. كما هو موضّح في الشكل:


http://www.javagirl.ws/lessons/web/cgi/01/p01.jpg

من اللغات التي تتصرف كسي جي آي ASP و تتصرف كأحسن ما يكون في بيئات الوندوز ان تي كخوادم.



كيف نستخدم السي جي آي؟

كي نستخدم السي جي آي يلزم توفّر ثلاث أمور

1) الخادم يجب أن يدعم مترجم للغة التي مكتوب بها السي جي لآي مثلا Perl Compiler

2) ملف يحتوي السي جي آي سكربت و في حالتنا سيكون سمه مثلاً send.pl

3) امكانية الدخول على الخادم لتعديل الترخيص.



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
لنحل مثال نجمع فيه كل ما سبق:



المشكلة
لنفرض أننا نريد تصميم صفحة فيها فورم، و نريد أن نرسل محتوى الفورم لشخص معيّن


تمهيد للحل:
ما الذي نريده؟ نريد ارسال بيانات من فورم إلى بريد محدد.

نستطيع تصميم الصفحة والفورم، صح؟ هذه محلولة
لدينا البريد الذي نريد أن نرسل له، صح؟ هذه أيضاً محلولة
لكن، المشكلة تكمن في أن ال html لا تستطيع بأي حال من الأحوال أن ترسل بريد الكتروني بنفسها؟

لماذا؟ لأن ارسال البريد الإلكتروني يعني استخدام خاصية من خصائص الخادم و هي ال sendmail و هذه الخاصية هي المسؤولة عن ارسال البريد الإلكتروني. و لكن sendmail لا تتكلّم بلغة الhtml أيضاً. إذا نحتاج إلى رنامج cgi مكتوب بلغة أو بأخرى يقوم بالربط بين الإثنين :-)


الحل:
0) نحدد مكان خدمة ال sendmail على الخادم. (في هذا المثال)

1) نكتب (أو نبحث عن سي جي آي مكتوب يقوم بقراءة البيانات من حقول الفورم و ربطهم بالsendmail و نضمّنه مكان هذه الخدمة.
و لاحظ معي أننا يجب أن نعرف أي المترجم لهذا الملف أيضاً ،. و في هذا السكربت أيضاً سنضع بعض الأوامر التي ستنتج لنا صفحة html تخبر الستخدم أن رسالته قد أرسلت :-) و سنسمي هذا الملف: sendItNow.pl مثلاً.

2) نصمم الصفحة و الفورم كاملة .

3) في أمر الفورم Form tag ستلاحظ أنه مكتوب هكذا:


<form>
<input type=text name=name
..
..
..
</form>


هذه الفورم لا تعمل شيء! فقط تأخذ البيانات و لا تعرف ماذا تفعل بها.
لذا سنستبدلها بما يلي:

{form action=http://someserver.com/cgi-bin/sendItNow.pl}

إضافة أمر ال action في ال form يجعلها تعرف ماذا ستفعل بالبيانات. فهي سترسلها إلى السكربت الذي وضعت عنوانه كاملاً، و الباقي عليه.

4) نضع جميع هذه الملفات في أماكنها المناسبة. يعني نضع الصفحة في المكان الذي تريده. و تضع السي جي آي في هذا المكان: http://someserver.com/cgi-bin لأن صفحتنا ستبحث عنه في هذا المكان.

5) نذهب ألى صفحتنا عبر المتصفّح.

ملاحظة: لن يعمل السكربت، و سيعطيك خطأ مفاده Server Error لماذا؟ بسبب الترخيص

لذا علينا قبل الخطوة (5) أن نضع الخطوة (4.5) و هي تغيير ترخيص ملف السيجي آي عن طريق ال chmod إلى 755 . (انظر الملحق لهذا الموضوع في الأسفل)

مرّة ثانية الخطوة (5).. سيعمل تمام التمام ان شاء الله إذا كان مدير النظام يسمح لك باستخدام خاصية ال sendmail






---------------- ملــــــــــحـــــق التراخيــــــــــص ---------------


تخيل معي وجود غرفة فيها غسّالة. و هذه الغرفة، لها ثلاث أقفال.

إذا فتحنا الغرفة باستخدام القفل الأوّل، نستطيع أن نفتح الباب و ندخل الغرفة و تشوف شو داخلها فقط.

القفل الثاني ايخلينا نقدر نفتح الغسالة و نشوف مكوناتها، لا وكمان نضع قطع غيار جديدة.

القفل الثالث يسمح لنا رؤية الغسالة، و فتحها و إضافة القطع وبالإضافة لذلك يمكننا أن نشغّلها و نغسل ثياب فيها.

الحين عندنا ثلاث فئات من الناس نبغي نعطي كل واحد منهم مفتاح

الفئة الأولي: هي صاحب الغرفة
الفئة الثانية: أهله و جماعته
الفئة الثالثة: بقية الشعوب (other) .




تخيّل انه هذه الغرفة هي الملف الذي كنت تريد وضعة و لنفترض أن اسمه sendmail.cgi
هذا الملف له ثلاث حالات للترخيص(القراءة، الكتابة، والتشغيل) (تذكر المفاتيح الثلاثة)



ترخيص القراءة نعطيه القيمة 4
ترخيص الكتابة نعطيه القيمة 2
ترخيص التشغيل نعطيه القيمة 1



خلنا نقول أنك تبغي تعطي نفسك كل الصلاحيات( القراءة والكتابة والتشغيل)
إذا ستعطي نفسك مجموع النقاط : 4+2+1=7


إذا أول رقم على اليسار سيكون 7


و لنفترض انك تبغي تعطي جماعتك صفة القراءة والتشغيل فقط و لن تعطيهم القدرة على الكتابة (أة تبديل قطع غيار الغسالة) مجموع النقاط: 4+0+1=5


أصبح لدينا الرقم 5 يمثل ترخيص ثاني مجموعة


ثالث مجموعة و هم الجماهير الغفيرة (و اللي يدخل فيهم الناس الذين يدخلون موقعك من الإنترنت) سنعطيهم القدرة على التشغيل فقط (هذا مثلاً)


سيكون مجموع نقاطهم: 0+0+1=1


الآن نضع الأرقام بجانب بعض من اليسار إلى اليمين بنفس الترتيب السابق: 751


و هذا الرقم هو الترخيص لأي ملف في الدنيا.


بقيت نقطة أحب أوضّحها من الأفضل أن تعطي حسب السكربت و الذي يعمله هذا السكربت سيكون الترخيص. عادة يكون 755 إذا كان ما فيه كتابة، و بعض الأحيان يكون 777.


و نفس ما ينطبق على الملفات ينطبق على الفولدرات. فإذا أردت cgi ينشئ لك ملف في فولدر يجب أن يسمح الفولدر بالتشغيل و الكتابة لل other سيكون الترخيص للفولدر 766



كيف نصل إلى الترخيص؟
على حسب نظام التشغيل تستطيع أن ترى الترخيص.

أتصوّر انك تستخدم يونكس:


$ ls -l
total 51
drwxr-xr-x 2 JavaGirl users 8192 Mar 8 08:41 arabicJava
$


لاحظ شوف أول السطر على اليسار

drwxr-xr-x

d: تعني directory
rwx: قراءة و كتابة وتشغيل لصاحب الملف
r-x:تعني قراء و تشغيل فقط لمجموعة صاحب الملفو لمجمةوعة الآخرين أيضاً



لتغيير الترخيص في اليونكس:

$ chmod 755 nsmail

chmod هوالأمر الذي يجعلنا نغير الترخيص لأي ملف أو فولدر. و لكي نتمكن من ذلك يجب أن تكون صاحب الملف أو مدير النظام

755 كما أسلفت هو الترخيص
nsmail هو اسم الملف الذي أريد أن أغير الترخيص له .



"منقول"