CGI
فرآيند فوق ، نحوه برخورد سرويس دهنده وب با فايل های ايستا ( صفحات وب ايستا ) را تشريح می نمايد. صفحات وب ايستا ، قبل از درخواست کاربران توسط مولفين مربوطه ، طراحی و بر اساس ساختار سازماندهی شده بر روی سرويس دهنده وب مستقر خواهند شد. محتويات اين نوع صفحات همواره يکسان بوده و اطلاعات موجود را صرفنظر از زمان ، مکان ، تمايلات درخواست کننده بصورت يکسان نمايش خواهند داد. اکثر سرويس دهندگان امکان استفاده از فايل های پويا را نيز فراهم می آورند. برای ارائه تکنولوژی فوق از امکانات متعددی استفاده می گردد . CGI)Common Gateway Interface) يکی از امکانات موجود در اين زمينه است . امروزه از اينترفيس CGI در موارد متعددی استفاده می گردد :
• يک دفترچه تلفن امکان ارسال اطلاعات کاربران را از طريق يک فرم Html فراهم و پس از ارسال اطلاعات موجود در فرم ، اطلاعات در بانک های اطلاعاتی ذخيره خواهد شد.
• يک فروشگاه online کتاب ، امکان ارسال اطلاعات مربوط به يک گروه از کتاب را قراهم و در ادامه اطلاعات تکميلی در رابطه به هر يک از کتاب های موجود در گروه در اختيار کاربران قرار خواهد گرفت .
• در برنامه های موتور جستجو ، امکان درج کلمات مورد نظر برای جستجو در اختيار کاربران گذاشته خواهد شد ، در ادامه برنامه مورد نظر، آدرس صفحات وب شامل اطلاعات مورد نظر ( جستجو) را در اختيار کاربران قرار خواهد داد.
مکانيزم CGI
بمنظور نوشتن فايل های CGI ، می توان از زبانهای برنامه نويسی و زبانهای اسکريپت استفاده کرد. زبانهای C و PERL دو گزينه مناسب در اين راستا می باشند. مسئوليت برخورد با اسکريپت های CGI برعهده سرويس دهنده وب است .
اسکريپت های ساده CGI
مثال : صفحه وب زير ، يک پيام ساده را در خروجی ( مرورگر ) نمايش می دهد .
يک صفحه وب ساده |
<html> |
برنامه زير با زبان C نوشته شده و همان خروجی صفحه وب فوق را نمايش خواهد داد. اين برنامه ساده ترين نوع استفاده از CGI برای ايجاد خروجی مورد نظر است .
متن برنامه به زبان C |
#include <stdio.h> int main() |
gcc simplest.c -o simplest.cgi
پس از ترجمه برنامه و توليد فايل simplest.cgi ، آن را در فولدر cgi-bin ذخيره تا امکان اجرای آن فراهم گردد. بمنظور اجرای برنامه فوق ، مرورگر خود را فعال و در بخش آدرس آن ، آدرس زير را وارد نمائيد.
http://www.yourcompany.com/cgi-bin/simplest.cgi
پس از تايپ آدرس فوق ، برنامه موجود در فايل simplest.cgi اجراء و خروجی مناسب را نمايش خواهد داد. در برنامه فوق استفاده از دستور زير لازم است . دستور زير اولين خطی است که توسط هر اسکريپت CGI برای مرورگر ارسال می گردد :
printf("Content-type: text/html\n\n");
برنامه فوق را می توان با استفاده از زبان PERL نيز نوشت . در اين راستا لازم است کدهای نوشته شده PERL زير را در تايپ و در فايلی با نام simplest.pl ذخيره نمود.
متن برنامه به زبان Perl |
#! /usr/bin/perl |
فايل فوق را در فولدر cgi-bin قرار داده و بمنظور اجرای آن ، مرورگر را فعال و در بخش آدرس آن ، آدرس زير را وارد نمائيد :
http://www.yourcompany.com/cgi-bin/simplest.pl
در مثال فوق با نحوه استفاده از اسکريپت های CGI بمنظور ايجاد صفحات وب ايستا آشنا شديم . پس از اجرای برنامه های CGI ، خروجی مورد نظر برای مرورگر ارسال می گردد ( اسکريپت ) .
مهمترين مزيت و جايگاه اسکريپت های CGI ، استفاده از تکنولوژی فوق بمنظور ايجاد محتويات پويا می باشد. هر مرتبه که اسکريپت اجراء می گردد ، خروحی متفاوت خواهد بود . در صورتيکه خروجی در هر مرتبه اجراء يکسان باشد ، می توان از صفحات ايستا در اين خصوص استفاده کرد. برنامه نوشته شده به زبان C زير ، يک محتويات پويای ساده را ايجاد می نمايد .
يک برنامه ساده بمنظور ايجاد محتويات پويا |
#include <stdio.h> int incrementcount() f=fopen("count.txt", "r+"); fscanf(f, "%d", &i); int main() |
با استفاده از يک اديتور برنامه فوق را تايپ و آن را در فايلی با نام count.c ذخيره و با استفاده از دستور زير آن را کمپايل نمائيد :
gcc count.c -o count.cgi
فايل متنی ساده ای با نام count.txt ايجاد و مقدار صفر را در آن قرار دهيد. فايل های count.cgi و count.txt را در فولدر cgi-bin ذخيره تا امکان اجرای آنها فراهم گردد. بمنظور اجرای برنامه فوق ، مرورگر را فعال و در بخش آدرس آن ، آدرس زير را تايپ نمائيد :
http://www.yourcompany.com/cgi-bin/count.cgi
پس از اجرای برنامه فوق ، يک صفحه ايجاد که در هر مرتبه اجراء ، خروجی "The current count is :X" ، مقدار X در هر بار اجرای اسکريپ تغيير و افزايش خواهد يافت . فايل count.txt شماره جاری را در خود نگهداری و تابع incrementcounr ، تابعی است که مقدار count را پس از هر مرتبه اجراء افزايش و آن را در فايل count.txt ثبت خواهد کرد.
فرم ها : ارسال اطلاعات ورودی
مثال : دستورات زير يک صفحه Html بهمراه يک فرم را نشان می دهد. دستورات فوق با استفاده از يک اديتور متنی تايپ و در فايلی با نام simpleform.htm ذخيره می گردند.
يک صفحه وب و يک فرم |
<html> |
همانگونه که مشاهده می گردد ، کدهای Html فوق يک فرم ساده شامل يک فيلد برای ورود نام را تعريف و برای ارسال اطلاعات به اسکريپت CGI از متد GET استفاده شده است . فرم فوق دارای دو دکمه submit و Reset برای ارسال اطلاعات و يا reset نمودن فرم است .
فايل simpleform.cgi ، که توسط فرم استفاده خواهد شد ، يک برنامه نوشته شده به زبان C است . برنامه فوق در ابتدا با محتويات زير در فايلی با نام simpleform.c ايجاد شده است .
پردازش اطلاعات فرم ارسالی |
#include <stdio.h> int main() |
gcc simpleform.c -o simpleform.cgi
پس از ترجمه برنامه فوق ، آن را در فولدر cgi-bin ذخيره می گردد. برنامه فوق اطلاعات ارسالی توسط فرم را دريافت ( انتخاب ) ، و آنها را نمايش خواهد داد. مثلا" پس از اجرای برنامه فوق خروجی مطابق زير نمايش داده خواهد شد:
The value entered was: Name=Ali+Rahmani
Name ، نا فيلد ورودی در فرم است . هر فيلد ورودی در يک فرم می بايست دارای يک مشحصه منحصر بفرد باشد. Ali+Rahmani ، نام وارد شده در فرم است. علامت + نشاندهنده فضای خالی است .
استفاده از فرم ها بمنظور اخذ اطلاعات کاربران و ارسال آنها برای يک اسکريپت CGI عمليات ساده ای است . در اين زمينه ، پيشنهادات زير توصيه می گردد :
• هر يک از فيلدهای ورودی موجود در فرم، می بايست دارای يک مشخصه منحصربفرد باشند.
• برای ارسال فرم می بايست متد ارسال را مشخص نمود. در اين راستا دو گزينه GET و POST وجود دارد. متد GET دارای اين مزيت عمده است که می توان مقادير وارد شده را بهمراه URL برای اسکريپت مشاهده و اشکال زدائی آن راحت تر است . ( ويژگی فوق صرفا" از بعد اشکال زدائی مورد نظر است )
• تعداد کاراکترهای ارسالی توسط متد GET محدوده بوده و معمولا" از آن برای ارسال اطلاعات با حجم کم استفاده می شود. متد POST برای فرم هائی که دارای اطلاعات زياد برای ارسال می باشند ، ترجيح داده می شود.
• اطلاعات ارسال شده با استفاده از متد GET با استفاده از متغير محيطی QUERY_STRING قابل دستيابی و استفاده می باشند. ( مقدار متغير فوق در زبان C با استفاده از تابع getenv و در PERL با استفاده از ENV$ قابل دستيابی خواهند بود). اطلاعات ارسال شده توسط متد POST را در زبان C با استفاده از تابع gets و در PERL از read استفاده می گردد.
• اطلاعات ارسالی شامل مقادير مربوط به تمام فيلدهای موجود بر روی فرم بوده که بصورت يک رشته در کنار يکديگر قرار گرفته اند. در اين زمينه ممکن است کاراکترهای فراوانی همراه فرم ارسال و نيازمند ترجمه باشند. مثلا" تمام فضا های خالی با علامت + جايگزين می گردند.
متغير محيطی QUERY_STRING يکی از نمونه های متنوع متغير های محيطی است . در اين زمينه متغيرهای محيطی بيشتری وجود داشته که می توان از آنها بهمراه اسکريپت های CGI استفاده کرد.
متغيرهای محيطی |
|
ايجاد يک فرم واقعی
|
• Single-line edit : واژه " Input" ، يک محدوده قابل ويرايش يک خطی برای ورود اطلاعات را تعريف می نمايد. برای انتساب يک نام منحصر بفرد به فيلد فوق از واژه "Name" استفاده می گردد. هر يک از کنترل های موجود بر روی فرم می بايست دارای يک نام منحصر بفرد باشند. بمنظور تعيين اندازه ( طول ) فيلد بر حسب کاراکتر از واژه "Size" استفاده می گردد. از واژه "Maxlength" برای مشخص نمودن حداکثر کاراکتر ورودی در فيلد مربوطه استفاده می گردد. در صورتيکه فيلد فوق می بايست دارای يک مقدار اوليه در زمان نمايش بر روی فرم باشد از واژه "Value" استفاده و مقدار اوليه فيلد مورد نظر را مشخص می نمائيم . در فيلد فوق بصورت پيش فرض text وارد می گردد. در صورتيکه لازم است که صرفا" در فيلد فوق مقادير عددی صحيح وارد شود ، می بايست نوع اطلاعات وارد شده در فيلد را با صراحت مشخص کرد . در اين زمينه از واژه type=int استفاده می گردد.
يک فيلد کنترلی Single-line |
Enter Name: <input name="Name" size=30 maxlength=50 value="Sample"> |
يک فيلد کنترلی Multi-Line |
<textarea name="Company Address" cols=30 rows=4></textarea> |
يک فيلد کنترلی Checkbox |
<input type=checkbox name="Include" value=1> |
يک فيلد کنترلی Radiobuttons |
Choose your item:<br> |
• دکمه های خاص : تگ های زير دو دکمه خاص را تعريف می کند. دکمه Submit اطلاعات موجود در فرم را برای سرويس دهنده ارسال و دکمه Reset برای Reset نمودن فرم استفاده می گردد.
فيلدهای کنترلی خاص |
<INPUT TYPE=submit value="Submit"> |
يک فرم واقعی
يک فرم کامل |
<html> |
خلاصه
• در اکثر سرويس دهندگان ، اسکريپت های CGI در فولدر cgi-bin قرار می گيرند.
• اسکريپت های CGI موجود در فولدر cgi-bin در زمان درخواست کاربر ، اجراء خواهند شد.
• تمام اطلاعات ارسالی توسط اسکريپت ها به STDOUT برای مرورگر ارسال خواهند شد.
• رشته "Content-type:text/html\n\n" می بايست اولين خط ارسالی برای مرورگر باشد.
• بمنظور ارسال اطلاعات ورودی از فرم های html استفاده و با استفاده از ACTION آدرس اسکريپت پاسخگو مشخص می گردد.
• پس از دريافت اطلاعات فرم ها توسط يک اسکريپت ، می بايست عمليات پالايش اطلاعات ( حذف کاراکترهای غير ضروری ) انجام گيرد.
در صورت طراحی و پياده سازی يک سايت واقعی و پويا ، استفاده از اينترفيس CGI يکی از گزينه های مناسب در اين زمينه خواهد بود .