جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
CGI
-(2 Body) 
CGI
Visitor 1042
Category: دنياي فن آوري
صفحات وب اطلاعات متفاوتي را در خود نگهداري مي نمايند. صفحات فوق بر روي سرويس دهندگان وب و بر اساس يک ساختار مشخص ، سازماندهي و ذخيره خواهند شد. کاربران اينترنت با استفاده از مرورگر خود ، درخواست يک صفحه وب را مي نمايند ، در خواست مورد نظر پس از ارسال از طريق محيط انتقال در اختيار سرويس دهنده وب قرار خواهد گرفت . سرويس دهنده وب پس از دريافت درخواست کاربران ، عمليات جستجو و يافتن فايل درخواست شده را آغاز مي نمايند. در صورتيکه فايل ( صفحه وب ) درخواستي پيدا نگردد ، سرويس دهنده براي برنامه مرورگر کاربر کدي را بمنزله عدم يافتن فايل ارسال و مرورگر پيام مناسبي در رابطه با عدمم يافتن فايل را در اختيار کاربر قرارخواهد داد. در صورتيکه سرويس دهنده فايل درخواستي را پيدا نمايد ، آن را بمنظور نمايش براي مرورگر کاربر ارسال خواهد کرد.
فرآيند فوق ، نحوه برخورد سرويس دهنده وب با فايل هاي ايستا ( صفحات وب ايستا ) را تشريح مي نمايد. صفحات وب ايستا ، قبل از درخواست کاربران توسط مولفين مربوطه ، طراحي و بر اساس ساختار سازماندهي شده بر روي سرويس دهنده وب مستقر خواهند شد. محتويات اين نوع صفحات همواره يکسان بوده و اطلاعات موجود را صرفنظر از زمان ، مکان ، تمايلات درخواست کننده بصورت يکسان نمايش خواهند داد. اکثر سرويس دهندگان امکان استفاده از فايل هاي پويا را نيز فراهم مي آورند. براي ارائه تکنولوژي فوق از امکانات متعددي استفاده مي گردد . 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 براي ايجاد خروجي مورد نظر است .

متن برنامه به زبان C 

#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 ذخيره نمود.

متن برنامه به زبان Perl 

#! /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 استفاده کرد.

متغيرهاي محيطي

  • AUTH_TYPE
  • CONTENT_LENGTH
  • CONTENT_TYPE
  • GATEWAY_INTERFACE
  • HTTP_ACCEPT
  • HTTP_USER_AGENT
  • PATH_INFO
  • PATH_TRANSLATED
  • QUERY_STRING
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_IDENT
  • REMOTE_USER
  • REQUEST_METHOD
  • SCRIPT_NAME
  • SERVER_NAME
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_SOFTWARE
هر يک از متغيرهاي محيطي فوق ، در بردارنده اطلاعات مفيد و جالبي مي باشند. مثلا" با استفاده از متغير محيطي REMOTE_USER مي توان از آدرس هاي IP کاربران آگاهي يافت .

ايجاد يک فرم واقعي

در يک فرم واقعي ممکن است از چندين نوع فيلد ورود اطلاعات استفاده گردد . کنترل هاي استاندارد بر روي يک فرم عبارتند از :
  • Single-line text input
  • Multi-line text input
  • Selection lists
  • Check boxes
  • Radio buttons
  • Specialized buttons
با ترکيب و استفاده از کنترل هاي فوق ، مي توان فرم هاي جالبي را ايجاد کرد. در ادامه به بررسي هر يک از کنترل هاي فوق اشاره خواهد شد.
• 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 edit : عملکرد کنترل فوق مشابه کنترل Single-line است . براي کنترل يک نام تعريف و اندازه آن برحسب تعداد سطر و ستون مشخص گردد. هر متني که قبل از تگ <textarea/> استفاده شود بعنوان مقدار پيش فرض براي کنترل در نظر گرفته خواهد شد. • Check box : نوع خاصي از يک محدوده ورود اطلاعات بوده که براي آن يک مقدار تعيين مي گردد. در صورتيکه فيلد فوق توسط کاربر انتخاب گردد ، مقدار در نظر گرفته ، برگردانده خواهد شد.

يک فيلد کنترلي Multi-Line

<textarea name="Company Address" cols=30  rows=4></textarea>

• Check box : نوع خاصي از يک محدوده ورود اطلاعات بوده که براي آن يک مقدار تعيين مي گردد. در صورتيکه فيلد فوق توسط کاربر انتخاب گردد ، مقدار در نظر گرفته ، برگردانده خواهد شد.

يک فيلد کنترلي Checkbox

<input type=checkbox name="Include" value=1>

• Radio buttons : کنترل هاي فوق مشابه Check box بوده ولي در گروه هائي سازماندهي مي گردند. تمام Radio button هاي موجود در يک گروه مي بايست داراي يک نام مشابه بوده و در صورتيکه لازم است براي آنها مقدار اوليه اي را تغريف کرد از واژه "CHECKED" استفاده مي گردد.

يک فيلد کنترلي Radiobuttons

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" ، براي کنترل يک نام منحصر بفرد تعريف مي گردد.
• دکمه هاي خاص : تگ هاي زير دو دکمه خاص را تعريف مي کند. دکمه 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 يکي از گزينه هاي مناسب در اين زمينه خواهد بود .
Add Comments
Name:
Email:  
User Comments:
SecurityCode: Captcha ImageChange Image