Irrevocable c board cgi. Karaniwang Gateway Interface (CGI)
Andover, Massachusetts, Nobyembre 19, 2003
Ang Commerce Group, Inc. (NYSE: CGI), ang pinakamalaking manunulat ng private passenger automobile insurance sa Massachusetts at CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), isang nangungunang provider ng teknolohiya ng impormasyon at mga serbisyo sa pagpoproseso ng negosyo, ay inihayag ngayon ang paglagda sa isang anim na taong business process outsourcing (BPO) na pag-renew ng kontrata na nagkakahalaga ng US$35 milyon. Magbibigay ang CGI ng mga serbisyo sa pagpoproseso ng buong patakaran para sa mga pribadong pasahero at komersyal na linya ng sasakyan sa Massachusetts pati na rin ang pagbibigay ng tool sa interface ng ahensya ng CollaborativeEdge ng CGI, suporta sa aplikasyon at pagpapanatili, suporta sa regulasyon, pagkonsulta sa mga system, at mga serbisyo sa pamamahala ng dokumento.
Gerald Fels, executive vice-president at CFO ng Commerce Group, ay nagsabi: "Bilang nangungunang provider ng pribadong pampasaherong sasakyan sa Massachusetts, ang layunin namin ay bigyan ang aming mga ahente at empleyado ng mga serbisyong makakatulong sa kanilang gumanap sa kanilang pinakamataas na antas. Sa paglipas ng mga taon, napaunlad namin ang isang matibay na relasyon sa CGI. Matatag at tumpak ang kanilang system at pamilyar na pamilyar ang kanilang team sa aming mga internal processing system. Mahalaga sa amin iyon."
Idinagdag ni Serge LaPalme, presidente, mga serbisyo sa negosyo ng seguro para sa CGI: "Kami ay nalulugod na ipagpatuloy ang aming relasyon sa Commerce Group, isa na tumatagal ng higit sa 30 taon. Ang Commerce Group ay patuloy na isa sa aming pinahahalagahan na mga kasosyo sa negosyo at estratehiko ang aming tagumpay. Sa pagtulong sa aming kliyente na higit na tumutok sa kanilang pangunahing negosyo, sinasamantala namin ang mga bagong teknolohiya kung kailan at saan ito makatuwiran. Alam ng aming koponan ang industriya ng seguro at ang napaka-natatanging kapaligiran ng regulasyon ng Estado at bilang resulta ay mabilis na umangkop umiiral na mga solusyon sa patuloy na umuunlad na sektor na ito."
Tungkol sa The Commerce Group, Inc.
Ang Commerce Group, Inc., isang kompanyang may hawak ng insurance, ay headquartered sa Webster, Massachusetts. Kasama sa mga subsidiary ng seguro sa ari-arian at casualty ng Commerce Group ang The Commerce Insurance Company at Citation Insurance Company sa Massachusetts, Commerce West Insurance Company sa California at American Commerce Insurance Company sa Ohio. Sa pamamagitan ng mga subsidiary nito" na pinagsamang mga aktibidad sa insurance, ang Commerce Group ay niraranggo bilang ika-22 pinakamalaking personal grupo ng insurance ng sasakyan sa bansa ng AM Pinakamahusay, batay sa 2002 direktang nakasulat na premium na impormasyon.
Tungkol sa CGI
Itinatag noong 1976, ang CGI ay ang ikalimang pinakamalaking independent information technology services firm sa North America, batay sa headcount nito. Ang CGI at ang mga kaakibat na kumpanya nito ay gumagamit ng 20,000 propesyonal. Ang annualized revenue run-rate ng CGI ay kasalukuyang CDN$2.8 bilyon (US$1.9 bilyon) at noong Setyembre 30, 2003, ang backlog ng order ng CGI ay CDN$12.3 bilyon (US$9.1 bilyon). Nagbibigay ang CGI ng end-to-end na IT at mga serbisyo sa proseso ng negosyo sa buong mundo mula sa mga opisina sa Canada, United States at Europe. Ang mga bahagi ng CGI ay nakalista sa TSX (GIB.A) at NYSE (GIB) at kasama sa TSX 100 Composite Index gayundin sa S&P/TSX Canadian Information Technology at Canadian MidCap Indices. Website: .
Pahina 1 ng 30
Ngayon, ang mga bagay tulad ng isang guest book, paghahanap sa server, isang form para sa pagpapadala ng mga mensahe ay isang mahalagang katangian ng halos anumang seryosong site. Ang problema ng pagpapakilala ng mga ito at iba pang mga kampanilya at sipol, siyempre, sa lahat ng paraan ay nakakaganyak sa imahinasyon ng isang baguhan na webmaster, na nag-aalis sa kanya ng tulog, gana at pagnanasa sa beer. Sa kasamaang palad, ang pag-aaral ng HTML-sources ng mga page ng mga kakumpitensya ay hindi nagbibigay ng anuman maliban sa mga link sa isang partikular na "cgi-bin", at kahit sa mga newsgroup ay minsan ay may binabanggit na ilang uri ng cgi-scripts. Ang artikulong ito ay nakatuon sa mga pangunahing kaalaman sa paggamit ng parehong mga cgi script para sa kaluwalhatian at kaunlaran ng iyong site.
Upang magsimula, sa palagay ko kailangan nating maunawaan ang mga konsepto. Ang CGI script ay isang programa na tumatakbo sa isang Web server sa kahilingan ng isang kliyente (iyon ay, isang bisita sa Web site). Ang program na ito sa panimula ay hindi naiiba sa karaniwang mga program na naka-install sa iyong computer - ito man ay MS Word o ang Quake na laro. Ang CGI ay hindi isang programming language kung saan nakasulat ang script, ngunit ang Common Gateway Interface ay isang espesyal na interface kung saan inilunsad at nakipag-ugnayan ang script.
Maikling digression tungkol sa CGI
Kaya kung ano ang CGI- mga script at sa pangkalahatan ay katulad na mga bagay. Magsimula tayo sa katotohanan na ang iyong browser (kapag nag-type ka URL) ay konektado ayon sa protocol HTTP kasama ang tinukoy na server at hihilingin sa kanya ang nais na file, tulad nito:GET /~paaa/cgi-bin/guestbbok.cgi HTTP/1.0-Ito ang pinakamahalagang bagay sa kahilingan
Well, kung ang isang simpleng file ay hiniling, halimbawa .html kung mayroong ganoong file, magpapadala ang server ng tugon sa browser:
HTTP/1.0 200 OK
Uri ng Nilalaman: text/html
Karagdagan pagkatapos ng walang laman na linya (kailangan itong paghiwalayin header mula sa katawan) ay nagmumula sa impormasyon mula sa URL"a
Iyon lang talaga www.... pumunta ka mula sa link patungo sa link ....
Ngunit paano kung kailangan mong magdala ng isang bagay sa mapurol na prosesong ito totoo interactive, dynamic, maganda at kahanga-hanga....? Well, may sagot sa tanong na ito. Paano na lang kung sa hiniling URL tukuyin ang isang espesyal na programa ( CGI,programa Karaniwang Gateway Interface - Karaniwang Gateway Interface) at ang katotohanan na ang program na ito ay maglalabas ng isang bagay at ipadala ito sa browser .... Magsisimula ang server .cgi program at, halimbawa, pagkatapos iproseso ang data ng form, pinapasok ka nito sa isang lugar sa database nito, at sasabihin iyon sa iyo isa kang malaking tao :)
Well, sana naintriga kita ......?
Maikling impormasyon tungkol sa kung ano ang kailangan mong malaman upang isulat CGI scripts: Well, una sa lahat, kailangan mong malaman kung ano ang Internet at kung paano ito gumagana (alam mo ba? ;)))
) Well, kaunting mga kasanayan sa programming (ito ang pinakamahalagang bagay)
Sabay-sabay tayong magsulat ng ilang simpleng script at pagkatapos ay sasabihin ko sa iyo kung saan naghalungkat ang aso dito ....
Buweno, lumikha muna ng isang direktoryo sa iyong direktoryo ng tahanan cgi-bin:
cd public_html
mkdir cgi-bin
chmod 0777 cgi-bin
Ang huling linya ay magiging napakahalaga.
Kumuha ng editor at i-type ang: #!/usr/bin/perl
#first.cgi
i-print ang "Uri ng Nilalaman: text/html\n\n";
print" ";
print" Hello sayo!!!
";
i-print ang "";
I-save ito sa direktoryo cgi-bin sa ilalim ng pangalan una.cgi.Buweno, paano mo ito naligtas?
At ngayon gawin itong maipapatupad (pagkatapos ng lahat, ito ay isang programa):
chmod +x muna.cgi
Well, papalapit na tayo sa solemne moment .... i-type ang linya ng browser http://www.uic.nnov.ru/~your_login/cgi-bin/first.cgi
at tingnan kung ano ang mangyayari. Magkakaroon ng isa sa dalawang bagay, maaaring gagana ang script at makikita mo ang page na nabuo nito (congratulations, dumating na ito sa aming shelf!) O Panloob na Server Error Saka wag kang mag-alala, may ginawa kang mali. Pagkatapos ay kakailanganin mo ng gabay sa paghuli ng mga pulgas. Well, una sa lahat, ang syntax check ay maaaring gawin tulad ng sumusunod:
perl -c muna.cgi
Kaagad kang bibigyan ng Perl ng alinman sa mga mensahe ng error (mabuti, nangyayari na napalampas mo ang isang tuldok-kuwit, nakalimutan mong isara ang mga bracket o mga quote ...) maaari itong maayos sa daan.
Ang mas lohikal na krudo ay laktawan ang output ng walang laman na linya na naghihiwalay sa header mula sa katawan:
i-print ang "Uri ng Nilalaman: text/html\n\n"; #Lahat ay Tama
i-print ang "Uri ng Nilalaman: text/html\n"; #ERROR!!!
Suriin natin ang script:
Unang linya #!/usr/bin/perl Tinutukoy lamang nito kung saan matatagpuan ang Perl sa system. Ang pangalawa ay isang komento lamang - maaari mong sundutin ang anumang bagay pagkatapos ng karatula #
Pagkatapos ay dumating i-print ang "Uri ng Nilalaman: text/html\n\n"; Ito ay isang header na nagsasaad ng uri ng nilalaman na ipi-print ng script sa karaniwang output nitong STDOUT na napupunta sa server para sa pagproseso. Ang isang walang laman na linya ay naghihiwalay sa header mula sa katawan, na sa aming kaso ay
Hello sayo!!!
Ipoproseso ng server ang tugon ng script at, batay dito, bubuo at magpapadala ng tugon sa browser. (Karaniwang hindi binabago ng server ang katawan ng mensahe, dinadagdagan lang nito ang header ng mga field na kinakailangan para sa HTTP protocol)
Buweno, ang mga pangunahing kaalaman ay pinagkadalubhasaan na, ang lahat ay hindi kasing hirap at nakapanlulumo gaya ng tila sa una
Ngayon ay maaari kang magsanay sa pagsulat ng gayong simpleng mga script sa iyong sarili upang makuha ang iyong mga kamay dito.
Kabanata 9.
Programming gamit ang CGI
Ang pagsasama ng isang seksyon sa CGI sa isang database book ay maaaring mukhang kakaiba tulad ng pagkakaroon ng isang kabanata sa pag-aayos ng kotse sa isang cookbook. Siyempre, upang pumunta sa grocery store, kailangan mo ng isang magagamit na kotse, ngunit angkop ba na pag-usapan ito? Ang buong pagpapakilala sa CGI at web programming sa pangkalahatan ay lampas sa saklaw ng aklat na ito, ngunit ang isang maikling pagpapakilala sa mga paksang ito ay sapat na upang mapalawak ang kakayahan ng MySQL at mSQL na kumatawan sa data sa larangan ng Web.
Ang kabanatang ito ay pangunahing inilaan para sa mga nag-aaral tungkol sa mga database ngunit nais ding makakuha ng ilang kaalaman sa Web programming. Kung ang iyong apelyido ay Berners-Lee o Andressen, malamang na hindi ka makakahanap ng isang bagay dito na hindi mo pa alam. Ngunit kahit na hindi ka bago sa CGI, ang pagkakaroon ng isang mabilis na sanggunian na madaling gamitin habang sumisid sa mga misteryo ng MySQL at mSQL ay maaaring maging kapaki-pakinabang.
Ano ang CGI?
Tulad ng karamihan sa mga acronym, ang Common Gateway Interface (CGI ay nangangahulugang Common Gateway Interface) ay hindi gaanong sinasabi. Interface sa ano? Nasaan ang gateway na ito? Anong komunidad ang pinag-uusapan natin? Upang masagot ang mga tanong na ito, bumalik tayo ng kaunti at tingnan ang WWW sa kabuuan.
Si Tim Berners-Lee, isang physicist na nagtrabaho sa CERN, ay gumawa ng Web noong 1990, kahit na ang plano ay nagsimula noong 1988. Ang ideya ay upang paganahin ang mga mananaliksik ng particle physics na madali at mabilis na makipagpalitan ng multimedia data - teksto, mga imahe at tunog - sa pamamagitan ng Internet. Ang WWW ay binubuo ng tatlong pangunahing bahagi: HTML, URL at HTTP. HTML- ang wika sa pag-format na ginagamit upang kumatawan sa nilalaman sa Web. url- ito ang address na ginamit upang makakuha ng nilalaman sa HTML na format (o kung hindi man) mula sa web server. At sa wakas http- ito ay isang wika na naiintindihan ng web server at nagpapahintulot sa mga kliyente na humiling ng mga dokumento mula sa server.
Ang kakayahang magpadala ng lahat ng uri ng impormasyon sa Internet ay isang rebolusyon, ngunit ang isa pang posibilidad ay natuklasan sa lalong madaling panahon. Kung maaari kang magpadala ng anumang teksto sa Web, kung gayon bakit hindi ka makapagpadala ng tekstong nilikha ng isang programa, at hindi kinuha mula sa isang natapos na file? Nagbubukas ito ng dagat ng mga posibilidad. Ang isang simpleng halimbawa ay ang paggamit ng isang programa na nagpi-print ng kasalukuyang oras upang makita ng mambabasa ang tamang oras sa tuwing titingnan nila ang pahina. Nakita ng ilang matatalinong pinuno sa National Center for Supercomputing Applications (NCSA) na gumagawa ng web server ang pagkakataong ito, at hindi nagtagal ay ipinanganak ang CGI.
Ang CGI ay isang hanay ng mga panuntunan kung saan ang mga program sa isang server ay maaaring magpadala ng data sa mga kliyente sa pamamagitan ng isang web server. Ang detalye ng CGI ay sinamahan ng mga pagbabago sa HTML at HTTP na nagpakilala ng bagong feature na kilala bilang mga form.
Bagama't pinapayagan ng CGI ang mga programa na magpadala ng data sa isang kliyente, pinapalawak ng mga form ang kakayahang ito sa pamamagitan ng pagpayag sa isang kliyente na magpadala ng data sa programang CGI na iyon. Ngayon ang gumagamit ay hindi lamang makita ang kasalukuyang oras, ngunit itakda din ang orasan! Ang mga form ng CGI ay nagbukas ng pinto sa tunay na interaktibidad sa mundo ng Web. Kasama sa mga karaniwang CGI application ang:
- Dynamic na HTML. Ang buong site ay maaaring mabuo ng isang programa ng CGI.
- Mga search engine na nakakahanap ng mga dokumento na may mga salita na tinukoy ng user.
- Mga guestbook at bulletin board kung saan maaaring idagdag ng mga user ang kanilang mga mensahe.
- Mga form ng order.
- Mga talatanungan.
- Pagkuha ng impormasyon mula sa isang database na naka-host sa server.
Sa mga susunod na kabanata, tatalakayin natin ang lahat ng mga CGI application na ito, gayundin ang ilan pang iba. Lahat ng mga ito ay nagbibigay ng isang mahusay na pagkakataon upang ikonekta ang CGI sa isang database, na kung saan ay interesado kami sa seksyong ito.
Mga HTML Form
Bago tuklasin ang mga detalye ng CGI, kapaki-pakinabang na tingnan ang pinakakaraniwang paraan upang makakuha ng interface ang mga end user sa mga CGI program: mga HTML form. Ang mga form ay bahagi ng wikang HTML na nagbibigay sa end user ng iba't ibang uri ng mga field. Ang data na ipinasok sa mga patlang ay maaaring ipadala sa web server. Maaaring gamitin ang mga patlang upang maglagay ng teksto o maging mga pindutan na maaaring i-click o lagyan ng tsek ng user. Narito ang isang halimbawa ng isang HTML na pahina na naglalaman ng isang form:
<НТМL><НЕАD><ТITLЕ>Aking pahina ng form
<р>Ito ay isang pahina ng form.
Lumilikha ang form na ito ng 40-character na string kung saan maaaring ilagay ng user ang kanilang pangalan. Sa ilalim ng linya ng pag-input mayroong isang pindutan, kapag pinindot, ang data ng form ay inilipat sa server. Ang mga sumusunod ay ang mga tag na nauugnay sa form na sinusuportahan ng HTML 3.2, ang pinakamalawak na ginagamit na pamantayan ngayon. Maaaring ilagay ang mga pangalan ng tag at attribute sa anumang kaso, ngunit sinusunod namin ang opsyonal na convention na ang mga pambungad na tag ay nakasulat sa uppercase at closing tag sa lowercase.
Ang tanging uri ng input na hindi namin nagamit dito ay ang uri ng IMAGE para sa tag . Maaari itong magamit bilang isang alternatibong paraan ng pagsusumite ng form. Gayunpaman, ang uri ng IMAGE ay bihirang tugma sa text-based at hindi masyadong tumutugon na mga browser, kaya masinop na iwasan ito maliban kung ang iyong site ay may mayaman na graphical na istilo.
Ngayong pamilyar ka na sa mga pangunahing kaalaman ng mga HTML form, handa ka nang galugarin ang CGI mismo.
Pagtutukoy ng CGI
Kaya ano nga ba ang "set ng mga panuntunan" na nagpapahintulot sa isang CGI program sa, halimbawa, Batavia, Illinois, na makipag-ugnayan sa isang web browser sa Outer Mongolia? Ang opisyal na detalye ng CGI, kasama ang maraming iba pang impormasyon tungkol sa CGI, ay matatagpuan sa NCSA server sa http://hoohoo . ncsa.uluc.edu/cgi/. Gayunpaman, ang kabanatang ito ay umiiral upang hindi mo kailangang maglakbay nang matagal at hanapin ito sa iyong sarili.
Mayroong apat na paraan kung saan nagpapasa ang CGI ng data sa pagitan ng CGI-npor frame at ng web server, at samakatuwid ay ang Web client:
- mga variable ng kapaligiran.
- Command line.
- Karaniwang input device.
- karaniwang output device.
Sa apat na pamamaraang ito, ipinapadala ng server ang lahat ng data na ipinadala ng kliyente sa programa ng CGI. Ginagawa ng CGI program ang magic nito at ipapadala ang output pabalik sa server, na nagpapasa nito sa client.
Ang data na ito ay batay sa isang Apache HTTP server. Ang Apache ay ang pinakamalawak na ginagamit na web server at tumatakbo sa halos anumang platform, kabilang ang Windows 9x at Windows NT. Gayunpaman, maaaring ilapat ang mga ito sa lahat ng HTTP server na sumusuporta sa CGI. Ang ilang mga pinagmamay-ariang server, gaya ng mula sa Microsoft at Netscape, ay maaaring may mga karagdagang feature o gumagana sa ibang paraan. Habang ang mukha ng Web ay patuloy na nagbabago sa isang hindi kapani-paniwalang bilis, ang mga pamantayan ay nagbabago pa rin at ang hinaharap ay tiyak na magbabago. Gayunpaman, hanggang sa CGI ay nababahala, ang teknolohiyang ito ay tila mahusay na itinatag - ang presyo para dito ay ang iba pang mga teknolohiya, tulad ng mga applet, ay pinalitan ito. Anumang mga programang CGI na iyong isinulat gamit ang impormasyong ito ay halos tiyak na magagawang tumakbo sa karamihan ng mga web server sa loob ng maraming taon na darating.
Kapag ang isang CGI program ay na-invoke sa pamamagitan ng isang form, ang pinakakaraniwang interface, ang browser ay nagpapadala ng mahabang string sa server na nagsisimula sa path sa CGI program at ang pangalan nito. Sinusundan ito ng iba't ibang data, na tinatawag na path information, na ipinapasa sa CGI program sa pamamagitan ng PATH_INFO environment variable (Figure 9-1). Ang impormasyon ng landas ay sinusundan ng isang "?" na sinusundan ng data ng form, na ipinadala sa server gamit ang pamamaraang HTTP GET. Ang data na ito ay ginawang available sa CGI program sa pamamagitan ng QUERY_STRING environment variable. Ang anumang data na ipinapadala ng page gamit ang HTTP POST method, na siyang pinakakaraniwang ginagamit, ay ipapasa sa CGI program sa pamamagitan ng standard input. Ang isang karaniwang string na maaaring matanggap ng isang server mula sa isang browser ay ipinapakita sa Figure 1. 9-1. pinangalanang programa formread sa catalog cgi-bin tinawag ng server na may karagdagang impormasyon sa landas dagdag/impormasyon at choice=help request data - marahil bilang bahagi ng orihinal na URL. Panghuli, ang data ng form mismo (ang tekstong "CGI programming" sa field na "mga keyword") ay ipinadala sa pamamagitan ng pamamaraang HTTP POST.
Mga variable ng kapaligiran
Kapag ang isang server ay nagpatupad ng isang CGI program, una sa lahat ay nagpapasa ito ng ilang data dito upang tumakbo sa anyo ng mga variable ng kapaligiran. Mayroong labing pitong variable na opisyal na tinukoy sa detalye, ngunit marami pa ang hindi opisyal na ginagamit sa pamamagitan ng mekanismong inilalarawan sa ibaba na tinatawag na HTTP_/nec/zams/n. CGI program
ay may access sa mga variable na ito tulad ng anumang shell environment variable kapag tumakbo mula sa command line. Sa isang shell script, halimbawa, ang F00 environment variable ay maaaring ma-access bilang $F00; sa Perl ang tawag na ito ay mukhang $ENV("F00") ; sa C - getenv("F00"); at iba pa. Inililista ng Talahanayan 9-1 ang mga variable na palaging itinakda ng server, kahit na null ang mga ito. Bilang karagdagan sa mga variable na ito, ang data na ibinalik ng kliyente sa header ng kahilingan ay itinalaga sa mga variable ng form na HTTP_F00 , kung saan ang F00 ay ang pangalan ng header. Halimbawa, karamihan sa mga web browser ay nagsasama ng impormasyon ng bersyon sa isang header na pinangalanang USEfl_AGENT . Maaaring makuha ng iyong CGI npor framework ang impormasyong ito mula sa variable na HTTP_USER_AGENT.
Talahanayan 9-1.Mga variable sa kapaligiran ng CGI
variable ng kapaligiran |
Paglalarawan |
||
CONTENT_LENGTH |
Ang haba ng data na ipinasa ng mga pamamaraan ng POST o PUT, sa mga byte. |
||
CONTENT_TYPE |
Ang uri ng MIME ng data na nakalakip gamit ang mga pamamaraang POST o PUT. |
||
GATEWAY_INTERFACE |
Numero ng bersyon ng detalye ng CGI na sinusuportahan ng server. |
||
PATH_INFO |
Karagdagang impormasyon ng landas na ibinigay ng kliyente. Halimbawa, para sa isang kahilingan http://www.myserver.eom/test.cgi/this/is/a/ landas?patlang=berde ang halaga ng variable na PATH_INFO ay magiging /this/is/a/path. |
||
PATH_TRANSLATED |
Pareho sa PATH_INFO , ngunit ang server ay gumagawa ng lahat |
||
|
Isang posibleng pagsasalin, halimbawa, isang extension ng pangalan tulad ng "-account". » |
||
QUERY_STRING |
Lahat ng data kasunod ng "?" sa URL. Ito rin ang data na ipinasa kapag ang REQ-UEST_METHOD ng form ay GET. |
||
REMOTE_ADDR |
Ang IP address ng kliyente na gumagawa ng kahilingan. |
||
REMOTE_HOST |
Ang hostname ng client machine, kung available. |
||
REMOTE_IDENT |
Kung ang web server at client support type pagkakakilanlan identd, pagkatapos ito ay ang username ng account na gumagawa ng kahilingan. |
||
REQUEST_METHOD |
Ang paraan na ginamit ng kliyente upang gawin ang kahilingan. Para sa mga CGI program na gagawin namin, ito ay karaniwang POST o GET. |
||
PANGALAN NG SERVER | Ang hostname - o IP address kung hindi available ang pangalan - ng makina kung saan tumatakbo ang web server. | ||
SERVER_PORT | Ang numero ng port na ginagamit ng web server. | ||
SERVER_PROTOCOL |
Ang protocol na ginagamit ng kliyente upang makipag-usap sa server. Sa aming kaso, ang protocol na ito ay halos palaging HTTP. | ||
SERVER_SOFTWARE | Impormasyon ng bersyon ng web server na nagpapatakbo ng CGI program. | ||
SCRIPT_NAME |
Ang path sa script na isasagawa, gaya ng tinukoy ng kliyente. Maaaring gamitin kapag ang isang URL ay tumutukoy sa sarili nito, at upang ang mga script na isinangguni sa iba't ibang lugar ay maipatupad nang iba depende sa lugar. |
||
Narito ang isang halimbawa ng Perl CGI script na naglalabas ng lahat ng environment variable na itinakda ng server, gayundin ang lahat ng legacy na variable, gaya ng PATH, na itinakda ng shell na nagsimula sa server.
#!/usr/bin/perl -w
ilimbag<< HTML;
Uri ng nilalaman: text/html\n\n
HTML
foreach (mga key %ENV) ( i-print ang "$_: $ENV($_)
\n";)
ilimbag<
HTML
Ang lahat ng mga variable na ito ay maaaring gamitin at kahit na mabago ng iyong CGI program. Gayunpaman, ang mga pagbabagong ito ay hindi nakakaapekto sa web server na naglunsad ng programa.
Command line
Pinapayagan ng CGI na maipasa ang mga argumento sa isang CGI program bilang mga opsyon sa command line, na bihirang gamitin. Ito ay bihirang gamitin dahil ang mga praktikal na aplikasyon nito ay kakaunti, at hindi namin ito tatalakayin nang detalyado. Ang bottom line ay kung ang QUERY_STRING environment variable ay hindi naglalaman ng " = " character, ang CGI program ay isasagawa gamit ang command line na mga parameter na kinuha mula sa QUERY_STRING . Halimbawa, http://www.myserver.com/cgi- bin/daliri?ugat ay tatakbo sa ugat ng daliri www.myserver.com.
Mayroong dalawang pangunahing aklatan na nagbibigay ng CGI interface sa Perl. Ang una sa kanila - cgi-lib.pl Kagamitan cgi-lib.pl napaka-common dahil sa mahabang panahon ito lang ang malaking library na available. Idinisenyo ito upang gumana sa Perl 4, ngunit gumagana rin ito sa Perl 5. Ang pangalawang library, CGI.pm, mas bago at sa maraming paraan nakahihigit cgi-lib.pl CGI.pm isinulat para sa Perl 5 at gumagamit ng isang ganap na object-oriented na pamamaraan upang gumana sa data ng CGI. Module CGI.pm pini-parse ang karaniwang input at ang QUERY_STRING variable at iniimbak ang data sa isang CGI object. Kailangan lang ng iyong program na gumawa ng bagong CGI object at gumamit ng mga simpleng pamamaraan tulad ng paramQ para kunin ang data na kailangan mo. Halimbawa 9-2 ay nagsisilbing isang maikling pagpapakita kung paano CGI.pm binibigyang kahulugan ang datos. Gagamitin ang lahat ng mga halimbawa ng Perl sa kabanatang ito CGI.pm.
Halimbawa 9-2.
Pag-parse ng data ng CGI sa Perl
#!/usr/bin/perl -w
gumamit ng CGI qw(:standard);
# Ginagamit ang CGI.pm module. qw(:standard) import
# namespace ng karaniwang CGI function na makukuha
# mas malinis na code. Magagawa ito kung ang script
# isang CGI object lang ang ginagamit.
$mycgi = bagong CGI; #Gumawa ng CGI object na magiging "gateway" sa data ng form
@fields = $mycgi->param; # I-extract ang mga pangalan ng lahat ng filled form fields
print header, start_html("CGI.pm test"); ft "header" at "start_html" na mga pamamaraan,
# ibinigay
Pinapadali ng # CGI.pm na makuha ang HTML.
Ang # "header" ay naglalabas ng kinakailangang HTTP header, a
Ang #"start_html" ay naglalabas ng HTML header na may ibinigay na pangalan,
#a din tag
.print"<р>Data ng form:
";
foreach (@fields) ( print $_, ":",- $mycgi->param($_), "
"; }
# Para sa bawat field, ipakita ang pangalan at halaga na nakuha gamit
#
$mycgi->param("fieldname").
i-print ang end_html; # Shorthand para sa pag-output ng mga end tag "".
Pinoproseso ang input sa C
Dahil ang mga pangunahing API para sa MySQL at mSQL ay nakasulat sa C, hindi namin ganap na abandunahin ang C pabor sa Perl, ngunit magbibigay kami ng ilang halimbawa ng C kung saan naaangkop. Mayroong tatlong malawak na ginagamit na C library para sa CGI programming: cgic Tom Boutell*; cgihtml Eugene Kim t at libcgi mula sa EIT*. naniniwala kami na cgic ay ang pinakakumpleto at madaling gamitin. Gayunpaman, kulang ito sa kakayahang magbilang ng lahat ng mga variable ng form kapag hindi mo ito kilala nang maaga. Sa katunayan, maaari itong idagdag sa isang simpleng patch, ngunit iyon ay lampas sa saklaw ng kabanatang ito. Samakatuwid, sa Halimbawa 9-3, ginagamit namin ang aklatan cgihtml, upang ulitin ang script sa itaas ng Perl sa C.
Halimbawa 9-3.Pag-parse ng data ng CGI sa C
/*
cgihtmltest.c - Generic na CGI program para mag-print ng mga key at ang mga value ng mga ito
mula sa data na natanggap mula sa form */
#isama
#include "cgi-lib.h" /* Naglalaman ito ng lahat ng kahulugan ng function ng CGI */
#include "html-lib.h" /* Naglalaman ito ng "lahat ng kahulugan ng mga function ng helper para sa HTML */
void print_all(lllist 1)
/* Ang mga function na ito ay naglalabas ng data na isinumite sa form sa parehong format tulad ng nasa itaas na Perl script. Nagbibigay din ang Cgihtml ng built-in na function
Print_entries() na ginagawa ang parehong gamit ang format ng listahan ng HTML. */ (
node*window;
/* Ang uri ng "node" ay tinukoy sa cgihtml library at tumutukoy sa isang naka-link na listahan na naglalaman ng lahat ng data ng form. */
bintana = i.ulo; /* Nagtatakda ng pointer sa simula ng data ng form */
habang (window != NULL) ( /* I-traverse ang naka-link na listahan sa huling (unang walang laman) elemento */
printf(" %s:%s
\n",window->entry.name,replace_ltgt(window->entry.value));
/* Output data. Ang Replace__ltgt() ay isang function na nauunawaan ang HTML encoding ng text at tinitiyak na ito ay tama na ipinapakita sa client browser. */
window = window->susunod; /* Ilipat sa susunod na elemento sa listahan. */
} }
int main() (
maglista ng mga entry; /* Pointer sa na-parse na data*/
int katayuan; /* Isang integer na kumakatawan sa katayuan */
html_header(); /* HTML helper function na naglalabas ng HTML header */
html_begin("cgihtml test");
/* Isang HTML helper function na naglalabas ng simula ng HTML page na may tinukoy na pamagat. */
status = read_cgi_input(&mga entry); /* Nagsasagawa ng pag-input at pag-parse ng data ng form */
printf("<р>Data ng form:
");
print_all(mga entry); /* Tinatawag ang print_all() function na tinukoy sa itaas. */
html_end(); /* Isang HTML helper function na naglalabas sa dulo ng HTML page. */
List_clear(&mga entry); /* Pinapalaya ang memorya na inookupahan ng data ng form. */
bumalik 0; )
Karaniwang output device
Ang data na ipinadala ng isang CGI program sa karaniwang output ay binabasa ng web server at ipinadala sa kliyente. Kung ang pangalan ng script ay nagsisimula sa nph-, ang data ay direktang ipinadala sa kliyente nang walang interbensyon mula sa web server. Sa kasong ito, ang CGI program ay dapat bumuo ng isang wastong HTTP header na mauunawaan ng kliyente. Kung hindi, hayaan ang web server na bumuo ng HTTP header para sa iyo.
Kahit hindi mo ginagamit nph-script, kailangan mong bigyan ang server ng isang direktiba na magsasabi dito ng impormasyon tungkol sa iyong pagpapalabas. Ito ay karaniwang isang Content-Type HTTP header, ngunit maaari rin itong maging Lokasyon header. Ang heading ay dapat na sundan ng isang walang laman na linya, ibig sabihin, isang bagong linya o isang kumbinasyon ng CR/LF.
Sinasabi ng header na Uri ng Nilalaman sa server kung anong uri ng data ang inihahatid ng iyong CGI program. Kung ito ay isang HTML na pahina, ang string ay dapat na Content-Type: teksto/html. Ang header ng Lokasyon ay nagsasabi sa server ng ibang URL - o ibang path sa parehong server - kung saan ididirekta ang kliyente. Dapat ganito ang hitsura ng pamagat: Lokasyon: http:// www. myserver. com/ibang/lugar/.
Pagkatapos ng mga header ng HTTP at ang walang laman na string, maaari mong ipadala ang aktwal na data na ginagawa ng iyong programa - isang HTML page, isang imahe, teksto, o anumang bagay. Kabilang sa mga CGI program na kasama ng Apache server ay nph-test-cgi at subukan ang cgi, na mahusay na nagpapakita ng pagkakaiba sa pagitan ng nph at non-nph heading, ayon sa pagkakabanggit.
Sa seksyong ito, gagamitin natin ang mga aklatan CGI.pm at cgic, na may mga function para sa pag-output ng parehong mga header ng HTTP at HTML. Papayagan ka nitong tumuon sa output ng aktwal na nilalaman. Ang mga function ng helper na ito ay ginagamit sa mga halimbawa sa naunang bahagi ng kabanatang ito.
Mahahalagang Tampok ng CGI Scripts
Alam mo na talaga kung paano gumagana ang CGI. Ang kliyente ay nagpapadala ng data, kadalasan sa pamamagitan ng isang form, sa web server. Ang server ay nagpapatupad ng CGI program, na nagpapasa ng data dito. Ginagawa ng CGI program ang pagproseso nito at ibinabalik ang output nito sa server, na nagpapadala nito sa kliyente. Ngayon, mula sa pag-unawa kung paano gumagana ang mga frame ng CGI-npor, kailangan nating magpatuloy sa pag-unawa kung bakit malawakang ginagamit ang mga ito.
Bagama't sapat na ang iyong nalalaman mula sa kabanatang ito upang magsama-sama ng isang simpleng gumaganang CGI program, may ilang mas mahalagang bagay na dapat isaalang-alang bago ka makapagsulat ng mga talagang gumaganang programa para sa MySQL o mSQL. Una, kailangan mong matutunan kung paano magtrabaho sa maraming mga form. Pagkatapos ay kailangan mong matutunan ang ilang mga hakbang sa seguridad na pipigil sa mga umaatake na magkaroon ng ilegal na pag-access sa iyong mga file ng server o sirain ang mga ito.
Memorya ng estado
Ang pagiging stateful ay isang mahalagang paraan ng pagbibigay ng magandang serbisyo sa iyong mga user, at hindi lamang para sa paglaban sa mga matitigas na kriminal, gaya ng maaaring mukhang. Ang problema ay sanhi ng katotohanan na ang HTTP ay isang tinatawag na "walang memorya" na protocol. Nangangahulugan ito na ang kliyente ay nagpapadala ng data sa server, ang server ay nagbabalik ng data sa kliyente, at pagkatapos ay ang lahat ay pumupunta sa kanilang sariling paraan. Ang server ay hindi nag-iimbak ng data tungkol sa kliyente na maaaring kailanganin sa mga susunod na operasyon. Katulad nito, walang garantiya na ang kliyente ay magse-save ng anumang data tungkol sa transaksyon na maaaring magamit sa ibang pagkakataon. Nagpapataw ito ng agaran at makabuluhang limitasyon sa paggamit ng World Wide Web.
Ang pag-script ng CGI sa ilalim ng protocol na ito ay kahalintulad ng hindi matandaan ang isang pag-uusap. Sa tuwing nakikipag-usap ka sa isang tao, gaano man kadalas mo siyang nakausap noon, kailangan mong ipakilala ang iyong sarili at maghanap ng karaniwang paksang pag-uusapan. Hindi na kailangang sabihin, hindi ito nakakatulong sa pagiging produktibo. Ipinapakita ng Figure 9-2 na sa tuwing ang isang kahilingan ay umabot sa isang CGI program, isa itong ganap na bagong instance ng program na walang koneksyon sa nauna.
Sa panig ng kliyente, sa pagdating ng Netscape Navigator, mayroong isang mukhang hacky na solusyon na tinatawag na cookies. Binubuo ito ng paglikha ng bagong HTTP header na maaaring ipadala pabalik-balik sa pagitan ng kliyente at server, katulad ng mga header ng Uri ng Nilalaman at Lokasyon. Ang client browser, kapag natanggap ang cookie header, ay dapat mag-imbak ng data sa cookie, pati na rin ang pangalan ng domain kung saan gumagana ang cookie. Pagkatapos noon, sa tuwing binibisita ang isang URL sa loob ng tinukoy na domain, dapat ibalik ang cookie header sa server para magamit sa mga CGI program sa server na iyon.
Ang paraan ng cookie ay pangunahing ginagamit upang iimbak ang user ID. Ang impormasyon ng bisita ay maaaring maimbak sa isang file sa server machine. Ang natatanging ID ng user na ito ay maaaring ipadala bilang cookie sa browser ng user, pagkatapos nito, sa tuwing bibisita ang user sa site, awtomatikong ipapadala ng browser ang ID na ito sa server. Ipinapasa ng server ang ID sa CGI program, na nagbubukas ng kaukulang file at nakakakuha ng access sa lahat ng data tungkol sa user. Nangyayari ang lahat ng ito sa paraang hindi nakikita ng gumagamit.
Kahit gaano kapaki-pakinabang ang pamamaraang ito, hindi ito ginagamit ng karamihan sa malalaking site bilang kanilang tanging paraan ng pag-alala sa estado. Mayroong ilang mga dahilan para dito. Una, hindi lahat ng browser ay sumusuporta sa cookies. Hanggang kamakailan lamang, ang pangunahing browser para sa mga taong may kapansanan sa paningin (hindi banggitin ang mga taong may hindi sapat na bilis ng koneksyon sa network) - Lynx - ay hindi sumusuporta sa cookies. Hindi pa rin ito "opisyal" na sumusuporta sa kanila, kahit na ang ilan sa mga malawak na magagamit nitong "mga sangay sa gilid" ay ginagawa. Pangalawa, at higit sa lahat, tinatali ng cookies ang user sa isang partikular na makina. Isa sa mga dakilang birtud ng Web ay na ito ay naa-access mula sa kahit saan sa mundo. Hindi alintana kung saan nilikha o naimbak ang iyong web page, maaari itong ipakita mula sa anumang makina na nakakonekta sa Internet. Gayunpaman, kung susubukan mong i-access ang isang cookie-enabled na site mula sa makina ng ibang tao, lahat ng iyong personal na data na sinusuportahan ng cookie ay mawawala.
Gumagamit pa rin ng cookies ang maraming site upang i-personalize ang mga page ng user, ngunit karamihan ay pinupunan ang mga ito ng tradisyonal na interface ng istilo ng pag-log in/password. Kung ang site ay na-access mula sa isang browser na hindi sumusuporta sa cookies, ang pahina ay naglalaman ng isang form kung saan ipinasok ng user ang login name at password na itinalaga sa kanya noong una niyang binisita ang site. Kadalasan ang form na ito ay maliit at katamtaman upang hindi matakot sa karamihan ng mga user na hindi interesado sa anumang pag-personalize, ngunit gusto lang na pumunta pa. Kapag nagpasok ang isang user ng login name at password sa form, hahanapin ng CGI ang data file ng user na parang ipinadala ang pangalan na may cookie. Gamit ang pamamaraang ito, maaaring magrehistro ang isang user sa isang personalized na website mula sa kahit saan sa mundo.
Bilang karagdagan sa mga gawain ng accounting para sa mga kagustuhan ng gumagamit at pangmatagalang imbakan ng impormasyon tungkol dito, ang isa ay maaaring magbigay ng isang mas banayad na halimbawa ng pag-alala ng estado, na ibinibigay ng mga tanyag na search engine. Kapag naghanap ka gamit ang mga serbisyo tulad ng AltaVista o Yahoo, kadalasan ay nakakakuha ka ng mas maraming resulta kaysa sa maipapakita mo sa isang format na madaling basahin. Ang problemang ito ay nalulutas sa pamamagitan ng pagpapakita ng isang maliit na bilang ng mga resulta - karaniwang 10 o 20 - at pagbibigay ng ilang paraan ng pag-navigate upang tingnan ang susunod na pangkat ng mga resulta. Bagama't ang pag-uugaling ito ay tila karaniwan at inaasahan sa karaniwang Web surfer, ang aktwal na pagpapatupad ay hindi mahalaga at nangangailangan ng estado na alalahanin.
Kapag ang isang user ay unang humiling sa isang search engine, kinokolekta nito ang lahat ng mga resulta, posibleng napapailalim sa ilang paunang natukoy na limitasyon. Ang lansihin ay ibigay ang mga resultang ito nang sabay-sabay sa maliit na halaga, habang inaalala kung anong uri ng user ang humiling ng mga resultang ito at kung anong bahagi ang susunod niyang inaasahan. Isinasantabi ang pagiging kumplikado ng mismong search engine, nahaharap tayo sa problema ng patuloy na pagbibigay sa user ng ilang impormasyon sa isang pahina. Isaalang-alang ang Halimbawa 9-4, na nagpapakita ng isang CGI script na naglalabas ng sampung linya ng isang file at nagbibigay-daan ito upang tingnan ang susunod o nakaraang sampung linya.
Halimbawa 9-4. Pag-save ng estado sa isang CGI script
#!/usr/bin/perl -w
gumamit ng CGI;
Buksan(F,"/usr/dict/words") o mamatay("Hindi mabuksan! $!");
#This is the file that will be output, can be anything.
$output = bagong CGI;
sub print_range ( # Ito ang pangunahing function ng programa, ang aking $start = shift;
# Panimulang linya ng file, ang aking $count = 0;
# Pointer, ang aking $line = "";
# Kasalukuyang linya ng file, i-print ang $output->header,
$output->start_html("Aking Diksyunaryo");
#
Bumubuo ng HTML na may pamagat na "My Dictionary", print "
habang ($count< $start) and ($line =
# Laktawan ang lahat ng linya bago magsimula, habang (($count< $start+10) and
($line ?
#
I-print ang susunod na 10 linya.
aking $newnext = $start+10; aking $newprev = $start-10;
# Magtakda ng mga panimulang string para sa "Susunod" at "Nakaraang" URL,
print"
";
maliban kung ($start == 0) ( # Paganahin ang "Nakaraang" URL maliban kung ikaw
# ay wala na sa simula.
print qq%Nakaraang%; )
maliban kung (eof) ( # Isama ang "Next" URL maliban kung #
wala sa dulo ng file.
print qq%Susunod%;
}
i-print ang "HTML;HTML
exit(0); )
# Kung walang data, magsimula muli,
kung (hindi $output->param) (
&print_range(0); )
# Kung hindi, magsimula sa string na tinukoy sa data.
&print_range($output->param("start"));
Sa halimbawang ito, ang pag-alala sa estado ay ginagawa gamit ang pinakasimpleng paraan. Walang problema sa pag-save ng data, dahil itinatago namin ito sa isang file sa server. Kailangan lang nating malaman kung saan sisimulan ang output, kaya isinama lang ng script ang panimulang punto para sa susunod o nakaraang pangkat ng mga linya sa URL, na kung saan ay kailangan lang upang makabuo ng susunod na pahina.
Gayunpaman, kung kailangan mo ng higit pa sa pag-scroll sa isang "file, kung gayon ang pag-asa sa isang URL ay maaaring maging mahirap. Mapapawi mo ang kahirapan na ito sa pamamagitan ng paggamit ng HTML form at pagsasama ng data ng estado sa mga tag. HIDDEN type. Ang diskarteng ito ay matagumpay na ginamit ng maraming site, na nagbibigay-daan sa iyong mag-link sa pagitan ng mga kaugnay na CGI program, o pagpapalawak ng paggamit ng isang CGI program, tulad ng sa nakaraang halimbawa. Sa halip na tumukoy sa isang partikular na bagay, gaya ng isang home page, maaaring tumuro ang data ng URL sa isang awtomatikong nabuong user ID.
Ito ay kung paano gumagana ang AltaVista at iba pang mga search engine. Ang unang paghahanap ay bumubuo ng isang user ID na tahasang kasama sa mga kasunod na URL. Ang ID na ito ay nauugnay sa isa o higit pang mga file na naglalaman ng mga resulta ng query. Dalawa pang halaga ang kasama sa URL: ang kasalukuyang posisyon sa file ng resulta at ang direksyon kung saan mo gustong lumipat pa rito. Ang tatlong halagang ito ay ang lahat na kailangan upang patakbuhin ang makapangyarihang mga sistema ng nabigasyon ng malalaking search engine.
Gayunpaman, may kulang pa. Ang file na ginamit sa aming halimbawa /usr/diet/mga salita Napakalaki. Paano kung iwanan natin ito sa kalagitnaan ng pagbabasa, ngunit gusto nating balikan ito mamaya? Kung hindi mo matandaan ang URL ng susunod na page, walang paraan para bumalik, kahit ang AltaVista ay hindi ka papayagan. Kung i-restart mo ang iyong computer o nagsimulang magtrabaho mula sa isa pa, imposibleng bumalik sa mga resulta ng nakaraang paghahanap nang hindi muling ipinapasok ang query. Gayunpaman, ang pangmatagalang pagiging stateful na ito ay nasa puso ng pag-personalize ng website na napag-usapan namin sa itaas, at sulit na makita kung paano ito magagamit. Ang Halimbawa 9-5 ay isang binagong bersyon ng Halimbawa 9-4.
Halimbawa 9-5.
Patuloy na memorya ng estado
#!/usr/bin/perl -w
gumamit ng CGI;
umask 0;
Buksan(F,"/usr/dict/words") o mamatay("Hindi mabuksan! $!");
Chdir("users") or die("Hindi ko mapalitan sa $ directory!");
#
Ito ang direktoryo kung saan maiimbak ang lahat ng data
# tungkol sa gumagamit.
Output = bagong CGI;
kung (hindi $output->param) (
i-print ang $output->header,
$output->start_html("Aking Diksyunaryo");
i-print ang "HTML;