صفحات وب اطلاعات متفاوتی را در خود نگهداری می نمایند. صفحات فوق بر روی سرویس دهندگان وب و بر اساس یک ساختار مشخص ، سازماندهی و ذخیره خواهند شد. کاربران اینترنت با استفاده از مرورگر خود ، درخواست یک صفحه وب را می نمایند ، در خواست مورد نظر پس از ارسال از طریق محیط انتقال در اختیار سرویس دهنده وب قرار خواهد گرفت . سرویس دهنده وب پس از دریافت درخواست کاربران ، عملیات جستجو و یافتن فایل درخواست شده را آغاز می نمایند. در صورتیکه فایل ( صفحه وب ) درخواستی پیدا نگردد ، سرویس دهنده برای برنامه مرورگر کاربر کدی را بمنزله عدم یافتن فایل ارسال و مرورگر پیام مناسبی در رابطه با عدمم یافتن فایل را در اختیار کاربر قرارخواهد داد. در صورتیکه سرویس دهنده فایل درخواستی را پیدا نماید ، آن را بمنظور نمایش برای مرورگر کاربر ارسال خواهد کرد.
فرآیند فوق ، نحوه برخورد سرویس دهنده وب با فایل های ایستا ( صفحات وب ایستا ) را تشریح می نماید. صفحات وب ایستا ، قبل از درخواست کاربران توسط مولفین مربوطه ، طراحی و بر اساس ساختار سازماندهی شده بر روی سرویس دهنده وب مستقر خواهند شد. محتویات این نوع صفحات همواره یکسان بوده و اطلاعات موجود را صرفنظر از زمان ، مکان ، تمایلات درخواست کننده بصورت یکسان نمایش خواهند داد. اکثر سرویس دهندگان امکان استفاده از فایل های پویا را نیز فراهم می آورند. برای ارائه تکنولوژی فوق از امکانات متعددی استفاده می گردد . CGI)Common Gateway Interface) یکی از امکانات موجود در این زمینه است . امروزه از اینترفیس CGI در موارد متعددی استفاده می گردد :
-
یک دفترچه تلفن امکان ارسال اطلاعات کاربران را از طریق یک فرم Html فراهم و پس از ارسال اطلاعات موجود در فرم ، اطلاعات در بانک های اطلاعاتی ذخیره خواهد شد.
-
یک فروشگاه online کتاب ، امکان ارسال اطلاعات مربوط به یک گروه از کتاب را قراهم و در ادامه اطلاعات تکمیلی در رابطه به هر یک از کتاب های موجود در گروه در اختیار کاربران قرار خواهد گرفت .
-
در برنامه های موتور جستجو ، امکان درج کلمات مورد نظر برای جستجو در اختیار کاربران گذاشته خواهد شد ، در ادامه برنامه مورد نظر، آدرس صفحات وب شامل اطلاعات مورد نظر ( جستجو) را در اختیار کاربران قرار خواهد داد.
مکانیزم CGI
مکانیزم نحوه عملکرد CGI در اکثر سرویس دهندگان وب ، یکسان و استاندارد است . در این راستا فولدری با نام cgi-bin در فهرست ریشه وب سایت مورد نظر ایجاد می گردد. نحوه برخورد سرویس دهنده با فایل هائی که در فولدر فوق قرار می گیرند ، متفاوت خواهد بود. سرویس دهنده در رابطه با فایل های فوق صرفا” عملیات ساده خواندن و ارسال را انجام نخواهد داد. این نوع فایل ها می بایست اجراء و خروجی بدست آمده در اثر اجرای برنامه، برای مرورگر متقاضی ارسال خواهد گردید. از زبانهای متعددی برای نوشتن برنامه ها در این زمینه استفاده می گردد. زبان اسکریپتی PERL یکی از متداولترین گزینه ها برای نوشتن اسکریپت های CGI ، می باشد.
بمنظور نوشتن فایل های CGI ، می توان از زبانهای برنامه نویسی و زبانهای اسکریپت استفاده کرد. زبانهای C و PERL دو گزینه مناسب در این راستا می باشند. مسئولیت برخورد با اسکریپت های CGI برعهده سرویس دهنده وب است .
اسکریپت های ساده CGI
بمنظور نوشتن اسکریپت های CGI ، لازم است که امکان دستیابی به فولدر cgi-bin و آشنائی با یکی از زبانهای C و یا PERL وجود داشته باشد. در این بخش به بررسی نحوه ایجاد اسکریپت های CGI توضیح داده می شود .
مثال : صفحه وب زیر ، یک پیام ساده را در خروجی ( مرورگر ) نمایش می دهد .
<html>
<body>
<h1>یک صفحه ساده وب </h1>
</body>
</html>
|
برنامه زیر با زبان C نوشته شده و همان خروجی صفحه وب فوق را نمایش خواهد داد. این برنامه ساده ترین نوع استفاده از CGI برای ایجاد خروجی مورد نظر است .
#include <stdio.h>
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>یک صفحه ساده وب</h1>\n");
printf("</body>\n");
printf("</html>\n");
return 0;
}
|
برنامه فوق را در فایلی با نام simplest.c ذخیره و با استفاده از کمپایلر C ، آن را با استفاده از دستور زیر ترجمه می نمائیم .
|
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 ذخیره نمود.
#! /usr/bin/perl print "Content-type: text/html\n\n"; print "<html><body><h1>Hello World!"; print "</h1></body></html>\n"; |
فایل فوق را در فولدر cgi-bin قرار داده و بمنظور اجرای آن ، مرورگر را فعال و در بخش آدرس آن ، آدرس زیر را وارد نمائید :
|
http://www.yourcompany.com/cgi-bin/simplest.pl |
در مثال فوق با نحوه استفاده از اسکریپت های CGI بمنظور ایجاد صفحات وب ایستا آشنا شدیم . پس از اجرای برنامه های CGI ، خروجی مورد نظر برای مرورگر ارسال می گردد ( اسکریپت ) .
مهمترین مزیت و جایگاه اسکریپت های CGI ، استفاده از تکنولوژی فوق بمنظور ایجاد محتویات پویا می باشد. هر مرتبه که اسکریپت اجراء می گردد ، خروحی متفاوت خواهد بود . در صورتیکه خروجی در هر مرتبه اجراء یکسان باشد ، می توان از صفحات ایستا در این خصوص استفاده کرد. برنامه نوشته شده به زبان C زیر ، یک محتویات پویای ساده را ایجاد می نماید .
#include <stdio.h>
int incrementcount()
{
FILE *f;
int i;
f=fopen("count.txt", "r+");
if (!f)
{
sleep(1);
f=fopen("count.txt", "r+");
if (!f)
return -1;
}
fscanf(f, "%d", &i);
i++;
fseek(f,0,SEEK_SET);
fprintf(f, "%d", i);
fclose(f);
return i;
}
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>The current count is: ")
printf("%d</h1>\n", incrementcount());
printf("</body>\n");
printf("</html>\n");
return 0;
}
|
با استفاده از یک ادیتور برنامه فوق را تایپ و آن را در فایلی با نام 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 ثبت خواهد کرد.
فرم ها : ارسال اطلاعات ورودی
همانگونه که مشاهد گردید ، سرویس دهنده وب فایل های اجرائی موجود در فولدر cgi-bin را اجراء و پس از تولید خروجی ، برای مرورگر ارسال می گردند. برای ارسال اطلاعات به برنامه های CGI می توان از فرم های Html استفاده کرد. از فرم ها در سایت های متعددی استفاده می گردد. هر صفحه ای که این امکان را به کاربران خواهد داد که اطلاعاتی را تایپ و ارسال دارند ، از فرم استفاده می نماید. فرم ها با استفاده از تگ های Html ایجاد و در صفحات وب قرار می گیرند. در تگ های Html مربوط به فرم ، نام اسکریپت CGI که مسئول برخورد با فرم پس از تکمیل و فشردن دکمه Submit است ، مشخص خواهد شد. اطلاعاتی که توسط کاربر در فرم درج می گردنند ، پس از ارسال فرم در اختیار اسکریپت مورد نظر گذاشته شده و امکان استفاده و عملیات مورد نظر بر روی اطلاعات فراهم خواهد شد.
مثال : دستورات زیر یک صفحه Html بهمراه یک فرم را نشان می دهد. دستورات فوق با استفاده از یک ادیتور متنی تایپ و در فایلی با نام simpleform.htm ذخیره می گردند.
<html>
<body>
<h1>A super-simple form<h1>
<FORM METHOD=GET ACTION="http://www.yourcompany.com/
cgi-bin/simpleform.cgi">
Enter Your Name:
<input name="Name" size=20 maxlength=50>
<P>
<INPUT TYPE=submit value="Submit">
<INPUT TYPE=reset value="Reset">
</FORM>
</body>
</html>
|
همانگونه که مشاهده می گردد ، کدهای Html فوق یک فرم ساده شامل یک فیلد برای ورود نام را تعریف و برای ارسال اطلاعات به اسکریپت CGI از متد GET استفاده شده است . فرم فوق دارای دو دکمه submit و Reset برای ارسال اطلاعات و یا reset نمودن فرم است .
فایل simpleform.cgi ، که توسط فرم استفاده خواهد شد ، یک برنامه نوشته شده به زبان C است . برنامه فوق در ابتدا با محتویات زیر در فایلی با نام simpleform.c ایجاد شده است .
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Content-type: text/html\n\n");
printf("<html>\n");
printf("<body>\n");
printf("<h1>The value entered was: ")
printf("%s</h1>\n", getenv("QUERY_STRING"));
printf("</body>\n");
printf("</html>\n");
return 0;
}
|
برنامه فوق پس از تایپ در یک ادیتور متنی در فایلی با نام simpleform.c ذخیره و بصورت زیر کمپایل خواهد شد.
|
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 استفاده کرد.
|
هر یک از متغیرهای محیطی فوق ، در بردارنده اطلاعات مفید و جالبی می باشند. مثلا” با استفاده از متغیر محیطی REMOTE_USER می توان از آدرس های IP کاربران آگاهی یافت .
ایجاد یک فرم واقعی
در یک فرم واقعی ممکن است از چندین نوع فیلد ورود اطلاعات استفاده گردد . کنترل های استاندارد بر روی یک فرم عبارتند از :
|
با ترکیب و استفاده از کنترل های فوق ، می توان فرم های جالبی را ایجاد کرد. در ادامه به بررسی هر یک از کنترل های فوق اشاره خواهد شد.
-
Single-line edit : واژه ” Input” ، یک محدوده قابل ویرایش یک خطی برای ورود اطلاعات را تعریف می نماید. برای انتساب یک نام منحصر بفرد به فیلد فوق از واژه “Name” استفاده می گردد. هر یک از کنترل های موجود بر روی فرم می بایست دارای یک نام منحصر بفرد باشند. بمنظور تعیین اندازه ( طول ) فیلد بر حسب کاراکتر از واژه “Size” استفاده می گردد. از واژه “Maxlength” برای مشخص نمودن حداکثر کاراکتر ورودی در فیلد مربوطه استفاده می گردد. در صورتیکه فیلد فوق می بایست دارای یک مقدار اولیه در زمان نمایش بر روی فرم باشد از واژه “Value” استفاده و مقدار اولیه فیلد مورد نظر را مشخص می نمائیم . در فیلد فوق بصورت پیش فرض text وارد می گردد. در صورتیکه لازم است که صرفا” در فیلد فوق مقادیر عددی صحیح وارد شود ، می بایست نوع اطلاعات وارد شده در فیلد را با صراحت مشخص کرد . در این زمینه از واژه type=int استفاده می گردد.
Enter Name: <input name="Name" size=30 maxlength=50 value="Sample"> |
-
Multi-Line edit : عملکرد کنترل فوق مشابه کنترل Single-line است . برای کنترل یک نام تعریف و اندازه آن برحسب تعداد سطر و ستون مشخص گردد. هر متنی که قبل از تگ <textarea/> استفاده شود بعنوان مقدار پیش فرض برای کنترل در نظر گرفته خواهد شد.
<textarea name="Company Address" cols=30 rows=4></textarea> |
-
Check box : نوع خاصی از یک محدوده ورود اطلاعات بوده که برای آن یک مقدار تعیین می گردد. در صورتیکه فیلد فوق توسط کاربر انتخاب گردد ، مقدار در نظر گرفته ، برگردانده خواهد شد.
<input type=checkbox name="Include" value=1> |
-
Radio buttons : کنترل های فوق مشابه Check box بوده ولی در گروه هائی سازماندهی می گردند. تمام Radio button های موجود در یک گروه می بایست دارای یک نام مشابه بوده و در صورتیکه لازم است برای آنها مقدار اولیه ای را تغریف کرد از واژه “CHECKED” استفاده می گردد.
Choose your item:<br> <input type=radio CHECKED name=one value=ONE> <input type=radio name=two value=TWO> <input type=radio name=three value=THREE> <input type=radio name=four value=FOUR> |
-
Selection lists : لیست های انتخابی ، امکان انتخاب یک گزینه از میان مجموعه ای گزینه های را برای کاربر فراهم می نماید. با استفاده از وازه ” Size” طول فیلد مشخص و با استفاده از واژه “Name” ، برای کنترل یک نام منحصر بفرد تعریف می گردد.
Select an Option<br>
<SELECT size=2 NAME="Option">
<OPTION> Option 1
<OPTION> Option 2
<OPTION> Option 3
<OPTION> Option 4
</SELECT>
|
-
دکمه های خاص : تگ های زیر دو دکمه خاص را تعریف می کند. دکمه Submit اطلاعات موجود در فرم را برای سرویس دهنده ارسال و دکمه Reset برای Reset نمودن فرم استفاده می گردد.
<INPUT TYPE=submit value="Submit"> <INPUT TYPE=reset value="Reset"> |
یک فرم واقعی
فرم زیر اطلاعات متعددی شامل : نام ، جنسیت ، سن و توضیحات را از کاربران اخذ و آنها را برای پردازش در اختیار یک اسکریپت CGI قرار خواهد داد. فرم فوق در یک صفحه html با نام Testform.htm ذخیره خواهد گردید.
<html>
<body>
<h1>Test Form <h1>
<FORM METHOD=POST ACTION="http://www.yourcompany.com/cgi-bin/testform.cgi">
Enter Your Name:
<input name="Name" size=20 maxlength=50>
<P>Enter your sex:
<input type=radio CHECKED name=sex value=MALE>Male
<input type=radio name=sex value=FEMALE>Female
<P>Select your age<br>
<SELECT size=2 NAME=age>
<OPTION> 1-10
<OPTION> 11-20
<OPTION> 21-30
<OPTION> 31-40
<OPTION> 41-50
<OPTION> 51-60
<OPTION> 61 and up
</SELECT>
<P>Enter Your Comment:
<input name="Name" size=40 maxlength=100>
<P>
<INPUT TYPE=submit value="Submit">
<INPUT TYPE=reset value="Reset">
</FORM>
</body>
</html>
|
اسکریپت CGI ، چهار فیلد اطلاعاتی موجود در فرم را اخذ و پردازش های لازم را انجام خواهد داد.
خلاصه
-
یک اسکریپت CGI برنامه ای است که عموما” با استفاده از زبانهای C و یا PERL نوشته می گردند.
-
در اکثر سرویس دهندگان ، اسکریپت های CGI در فولدر cgi-bin قرار می گیرند.
-
اسکریپت های CGI موجود در فولدر cgi-bin در زمان درخواست کاربر ، اجراء خواهند شد.
-
تمام اطلاعات ارسالی توسط اسکریپت ها به STDOUT برای مرورگر ارسال خواهند شد.
-
رشته “Content-type:text/html\n\n” می بایست اولین خط ارسالی برای مرورگر باشد.
-
بمنظور ارسال اطلاعات ورودی از فرم های html استفاده و با استفاده از ACTION آدرس اسکریپت پاسخگو مشخص می گردد.
-
پس از دریافت اطلاعات فرم ها توسط یک اسکریپت ، می بایست عملیات پالایش اطلاعات ( حذف کاراکترهای غیر ضروری ) انجام گیرد.
در صورت طراحی و پیاده سازی یک سایت واقعی و پویا ، استفاده از اینترفیس CGI یکی از گزینه های مناسب در این زمینه خواهد بود .