Kiolesura cha lango la kawaida ni nini. Inakubali ingizo kutoka kwa kivinjari. Inasanidi seva kwa CGI

Kiolesura cha Kawaida cha Lango (CGI, Mkuu wa Kirusi kiolesura cha lango) - Hii njia ya kawaida udhibiti wa nguvu yaliyomo kwenye kurasa za wavuti kwa kutumia programu maalum kutekeleza kwa upande wa seva ya wavuti. Programu hizi huitwa washughulikiaji wa CGI au lango, lakini mara nyingi zaidi - hati za CGI, kwa sababu ... kwa kawaida huandikwa katika lugha za uandishi, hasa Perl.

Kwa sababu matini asilia ni tuli, ukurasa wa wavuti hauwezi kuingiliana moja kwa moja na mtumiaji. Kabla ya ujio wa JavaScript, hakukuwa na njia nyingine ya kujibu vitendo vya mtumiaji isipokuwa kupitisha data waliyoingiza kwenye seva ya wavuti kwa usindikaji zaidi. Katika kesi ya CGI, usindikaji huu unafanywa kwa kutumia programu za nje na maandishi, yaliyofikiwa kupitia kiolesura sanifu (angalia RFC 3875: Toleo la CGI 1.1) - lango la kawaida. Mfano uliorahisishwa unaoonyesha utendakazi wa CGI umeonyeshwa kwenye Mtini. 1.

Je, CGI inafanya kazi vipi?

Algorithm ya jumla ya kufanya kazi kupitia CGI inaweza kuwasilishwa kama ifuatavyo:

  1. Mteja huomba ombi la CGI kwa kutumia URI yake.
  2. Seva ya wavuti inakubali ombi na kuweka vigezo vya mazingira , kupitia ambayo data na maelezo ya huduma hupitishwa kwa programu.
  3. Seva ya wavuti inaelekeza upya maombi kupitia mkondo wa kawaida pembejeo (stdin) kwa ingizo la programu inayoitwa.
  4. Programu ya CGI hufanya shughuli zote muhimu na hutoa matokeo kama HTML.
  5. Maandishi ya hypertext yanayotokana yanarejeshwa kwa seva ya wavuti kupitia mkondo wa kawaida wa pato (stdout). Ujumbe wa hitilafu hutumwa kupitia stderr.
  6. Seva ya wavuti hupitisha matokeo ya ombi kwa mteja.

Maombi ya CGI

Kazi ya kawaida ambayo CGI hutumiwa ni kuundwa kwa kurasa zinazoingiliana, maudhui ambayo inategemea vitendo vya mtumiaji. Mifano ya kawaida Kurasa hizo za wavuti ni fomu ya usajili kwenye tovuti au fomu ya kuwasilisha maoni. Sehemu nyingine ya matumizi ya CGI, iliyobaki nyuma ya pazia ya mwingiliano wa watumiaji, inahusishwa na ukusanyaji na usindikaji wa habari kuhusu mteja: kuweka na kusoma "vidakuzi"; kupata data kuhusu kivinjari na mfumo wa uendeshaji; kuhesabu idadi ya ziara kwenye ukurasa wa wavuti; ufuatiliaji wa trafiki ya wavuti, nk.

Uwezo huu hutolewa na ukweli kwamba hati ya CGI inaweza kushikamana na hifadhidata au ufikiaji mfumo wa faili seva. Kwa hivyo, hati ya CGI inaweza kuhifadhi habari katika jedwali la hifadhidata au faili na kuzipata kutoka hapo kwa ombi, ambazo haziwezi kufanywa kwa kutumia HTML.

TAFADHALI KUMBUKA: CGI si lugha ya programu! Ni itifaki rahisi ambayo inaruhusu seva ya wavuti kupitisha data kupitia stdin na kuisoma kutoka kwa stdout. Kwa hiyo, yoyote programu ya seva, yenye uwezo wa kufanya kazi na mitiririko ya kawaida ya I/O.

Salamu, Dunia!

Mfano wa hati rahisi ya CGI katika Perl imeonyeshwa katika Orodha ya 1. Ukihifadhi msimbo huu katika faili inayoitwa hello (jina linaweza kuwa chochote, kiendelezi kinaweza kuwa sawa), weka faili kwenye saraka ya seva ya cgi-bin. (kwa usahihi zaidi, katika saraka hiyo ya seva ya wavuti , ambayo imekusudiwa kwa matumizi ya CGI na imeainishwa katika mipangilio ya seva ya wavuti) na kuweka haki za utekelezaji za faili hii (chmod uo+x hujambo), basi itapatikana kwa anwani kama http. ://servername/cgi-bin/hello.

Kuorodhesha 1. Mfano hati ya CGI (Perl)

#!/usr/bin/perl chapisha "Aina ya Maudhui: maandishi/html\n\n"; chapa< CGI sema Hello

Salamu, Dunia!



Toka kwa HTML;

Katika nambari hii, mstari #!/usr/bin/perl unabainisha njia kamili ya mkalimani wa Perl. Mstari wa aina ya Maudhui: text/html\n\n ni kichwa cha http kinachobainisha aina ya maudhui (aina ya mime). Herufi ya kukatika kwa mistari miwili (\n\n) inahitajika; inatenganisha vichwa na sehemu kuu ya ujumbe.

Vigezo vya Mazingira

Programu zote za CGI zinaweza kufikia vigezo vya mazingira vilivyowekwa na seva ya wavuti. Vigezo hivi vina jukumu muhimu wakati wa kuandika programu za CGI. Jedwali linaorodhesha baadhi ya vigeu vinavyopatikana kwa CGI.

Tofauti ya mazingiraMaelezo
CONTENT_TYPE Aina ya data iliyotumwa kwa seva. Hutumika wakati mteja anatuma data, kama vile kupakua faili.
CONTENT_LENGTHOmba ukubwa wa maudhui. Tofauti hii inafafanuliwa kwa maombi ya POST.
HTTP_COOKIEHurejesha seti ya vidakuzi kama jozi za thamani-msingi.
HTTP_USER_AGENTMaelezo ya wakala wa mtumiaji (kivinjari).
PATH_INFONjia ya saraka ya CGI
QUERY_STRINGMfuatano wa hoja (URL-iliyosimbwa) hupitishwa na mbinu ya GET.
REMOTE_ADDRAnwani ya IP ya mteja anayetuma ombi.
REMOTE_HOSTJina kamili (FQDN) la mteja. (Ikiwa inapatikana)
REQUEST_METHODNjia ambayo ombi linatekelezwa. Mara nyingi PATA au POST.
SCRIPT_FILENAMENjia kamili ya hati iliyoombwa (katika mfumo wa faili wa seva).
SCRIPT_NAMEJina la hati
SERVER_NAMEJina la seva
SERVER_ADDRAnwani ya IP ya seva
SERVER_SOFTWARETaarifa kuhusu programu ya seva

Orodha ya 2 inaonyesha nambari ya programu ndogo ya Perl inayochapisha orodha ya anuwai ya mazingira. Matokeo ya kazi yake yanaonyeshwa kwenye Mtini. 2.

Kuorodhesha 2. Vigezo vya mazingira

#!/usr/bin/perl chapisha "Aina ya Maudhui: maandishi/html\n\n"; chapa" \n \n

Mazingira

\n"; foreach (panga vitufe %ENV) ( chapisha " $_: $ENV($_)
\n"; ) chapisha "

\n"; Utgång;

Uhamisho wa data: Mbinu ya GET

Mbinu ya GET inatumika kupitisha data iliyo na msimbo kupitia mfuatano wa hoja. Anwani ya rasilimali iliyoombwa (hati ya CGI) na data iliyohamishiwa kwayo hutenganishwa na ishara "?". Mfano wa anwani kama hii:

http://example.com/cgi-bin/script.cgi?key1=value1&key2=value2

Mbinu ya GET hutumiwa kwa chaguo-msingi kwa data iliyoingizwa kwenye upau wa anwani wa kivinjari. Kamba sawa inaweza kuzalishwa wakati wa kutuma data kutoka kwa fomu ya wavuti (tag

) ikiwa mbinu ya kuwasilisha fomu haijabainishwa. Taarifa zote zinazotumwa na mbinu ya GET hutumwa kwa maandishi wazi, kwa hivyo hupaswi kamwe kuzitumia kutuma nenosiri au taarifa nyingine sawa kwa seva. Mbinu ya GET ina kikomo cha ukubwa: mfuatano wa hoja lazima usiwe na zaidi ya vibambo 1024.

Taarifa zinazotumwa na mbinu ya GET hutumwa katika kichwa cha QUERY_STRING kama mfuatano unaojumuisha jozi za fomu. ufunguo=thamani, hati ya CGI inaweza kuipata kupitia utofauti wa mazingira wa jina moja.

Kuorodhesha 3. Kutuma data kutoka kwa fomu ya wavuti kwa kutumia mbinu ya GET

Uandishi rahisi wa CGI: Kutuma data kwa kutumia njia ya GET Jina lako: jina = "mtumiaji">
Unatoka wapi?: jina = "kutoka">



Baada ya kuingiza data kwenye fomu kutoka kwa Orodha ya 3 na kubofya kitufe cha "Wasilisha", kamba ya hoja kama hii itatolewa:

http://example.com/cgi-bin/ sema hello?mtumiaji=maandishi fulani&kutoka=maandishi mengine

wapi: sayhello - jina la hati ya CGI; mtumiaji na kutoka ni majina ya vigezo; maandishi fulani na maandishi mengine ni maadili yaliyoingizwa na mtumiaji ya vigezo vinavyolingana.

Kuorodhesha 4 ni mfano wa hati ambayo inaweza kuchakata data ya fomu kutoka kwa Orodha ya 3.

Kuorodhesha 4. Kutuma data kutoka kwa fomu ya wavuti kwa kutumia mbinu ya GET

#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # Changanua mazingira $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; ikiwa ($ENV(" REQUEST_METHOD") eq" PATA") ( $bafa = $ENV(" QUERY_STRING"); ) # Gawanya kamba ya hoja katika jozi za ufunguo/thamani @pairs = split(/&/, $buffer); foreach $pair (@pairs) ( ($name, $value) = split(/=/, $ jozi); thamani ya $ =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM($name) = thamani ya $; # Tunahifadhi data katika safu) # Tuma chapisho cha kichwa "Aina ya Yaliyomo: maandishi/html\n\n"; # Tuma chapa ya maandishi makubwa< CGI sema Hello

Hujambo, $FORM(mtumiaji) kutoka $FORM(kutoka)!



Toka kwa HTML;

Uhamisho wa data: Mbinu ya POST

Kwa ujumla, njia ya POST inafaa zaidi kwa kupitisha habari kwa hati ya CGI. Kizuizi cha data iliyopitishwa huundwa kwa njia sawa na kwa njia ya GET, lakini maambukizi halisi yanafanywa katika mwili wa ombi. Data inaingizwa kwenye programu ya CGI kupitia pembejeo ya kawaida(stdin).

Ili kutuma data kwa kutumia mbinu hii, lazima ibainishwe kwa uwazi katika maelezo ya fomu (action="POST").

Ili kuchakata ingizo, hati ya CGI lazima isomeke stdin, na ili kufanya hivi kwa usahihi, inahitaji kujua ukubwa wa ujumbe kutoka kwa tofauti ya CONTENT_LENGTH. Ili kuonyesha hili, wacha turekebishe kizuizi cha uchambuzi wa mazingira katika Orodha ya 4 kwa kuibadilisha na nambari ifuatayo:

... # Changanua mazingira $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; ikiwa ($ENV(" REQUEST_METHOD") eq" POST")( soma ( STDIN, $bafa, $ENV(" CONTENT_LENGTH"}); } ...

Usindikaji zaidi wa vigezo na thamani zao zilizohifadhiwa katika tofauti ya $bafa hufanywa kwa njia sawa na wakati wa kutumia mbinu ya GET.

Faida za CGI

Uwezo mwingi wa CGI sasa umenakiliwa na teknolojia kama vile DHTML, ActiveX au applets za Java. Faida kuu za kutumia maandishi ya seva ni kwamba unaweza kuwa na uhakika kwamba wateja wote (isipokuwa nadra, kawaida huhusishwa na kuzuia ufikiaji wa rasilimali fulani kwenye kiwango cha firewall) wataweza kufanya kazi na programu ya seva. Programu za mteja zinaweza kuzimwa tu kwenye kivinjari, au hazitumiki kabisa.

Hasara za CGI

Hasara kubwa ya teknolojia hii ni kuongezeka kwa mahitaji ya utendaji wa seva ya wavuti. Ukweli ni kwamba kila simu kwa ombi la CGI husababisha kuibuka kwa mchakato mpya, pamoja na mhudumu wote. Ikiwa maombi imeandikwa na makosa, basi hali inawezekana wakati, kwa mfano, inaingia kwenye kitanzi. Kivinjari kitasitisha muunganisho wakati muda wa kuisha umekwisha, lakini kwa upande wa seva mchakato utaendelea hadi msimamizi alazimishe kusitishwa. Katika suala hili, scripts za mteja zina faida kubwa, kwa sababu wananyongwa ndani ya nchi.

Ubaya mwingine wa CGI ni kwamba seva ya wavuti haina usalama mdogo kuliko suluhisho zingine. Kuweka kwa usahihi haki za ufikiaji kwa rasilimali za seva kutoka kwa programu ya CGI kunaweza kuhatarisha sio tu utendakazi wa seva ya wavuti, lakini pia usalama wa habari. Hata hivyo, teknolojia yoyote ya mtandao inaweza kuchukuliwa kuwa si salama kwa ufafanuzi.

Anwani ya kudumu ya ukurasa huu:

Andover, Massachusetts, Novemba 19, 2003

The Commerce Group, Inc. (NYSE: CGI), mwandishi mkubwa zaidi wa bima ya gari la abiria la kibinafsi huko Massachusetts na CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), mtoa huduma mkuu wa teknolojia ya habari na huduma za usindikaji wa biashara, alitangaza leo kusainiwa kwa mkataba wa miaka sita wa mchakato wa biashara nje ya nchi (BPO) wenye thamani ya dola za Marekani milioni 35. CGI itatoa huduma kamili za usindikaji wa sera kwa ajili ya laini za magari ya abiria na biashara ya Massachusetts na pia kutoa zana ya kiolesura ya wakala wa CollaborativeEdge ya CGI, usaidizi na matengenezo ya programu, usaidizi wa udhibiti, ushauri wa mifumo na huduma za usimamizi wa hati.

Gerald Fels, makamu wa rais mkuu wa Commerce Group na CFO, alisema: "Kama mtoaji mkuu wa magari ya kibinafsi ya abiria huko Massachusetts, lengo letu ni kuwapa mawakala wetu na wafanyikazi huduma zinazowasaidia kufanya kazi kwa kiwango cha juu zaidi. Kwa miaka mingi tumekuza uhusiano thabiti na CGI. Mfumo wao ni thabiti na sahihi na timu yao inafahamu sana mifumo yetu ya uchakataji wa ndani. Hilo ni muhimu kwetu."

Serge LaPalme, rais, huduma za biashara ya bima kwa CGI aliongeza: "Tuna furaha sana kuendelea na uhusiano wetu na Kikundi cha Biashara, ambacho kinachukua zaidi ya miaka 30. Kikundi cha Biashara kinaendelea kuwa mmoja wa washirika wetu wa biashara wanaothaminiwa na ni mkakati mafanikio yetu. Katika kumsaidia mteja wetu kuzingatia zaidi biashara yake kuu, tunatumia teknolojia mpya wakati na mahali panapofaa. Timu yetu inajua tasnia ya bima na mazingira ya kipekee ya udhibiti wa Serikali kwa karibu na kwa hivyo ni haraka. kurekebisha suluhu zilizopo kwa sekta hii inayoendelea kubadilika."

Kuhusu The Commerce Group, Inc.

The Commerce Group, Inc., kampuni inayomiliki bima, ina makao yake makuu katika Webster, Massachusetts. Kampuni tanzu za bima ya mali na majeruhi za Commerce Group ni pamoja na The Commerce Insurance Company na Citation Insurance Company huko Massachusetts, Commerce West Insurance Company in California na American Commerce Insurance Company huko Ohio. Kupitia kampuni tanzu" shughuli zake za bima zilizojumuishwa, Commerce Group imeorodheshwa kama ya 22. kikundi kikubwa zaidi cha bima ya magari ya kibinafsi nchini na A.M. Bora zaidi, kulingana na maelezo ya malipo ya moja kwa moja ya 2002.

Kuhusu CGI
Ilianzishwa mnamo 1976, CGI ni kampuni ya tano kwa ukubwa huru ya huduma za teknolojia ya habari huko Amerika Kaskazini, kulingana na idadi yake. CGI na kampuni zake husika huajiri wataalamu 20,000. Kiwango cha mapato ya kila mwaka cha CGI kwa sasa ni dola za Kimarekani bilioni 2.8 (dola za Marekani bilioni 1.9) na Septemba 30, 2003, malimbikizo ya agizo la CGI lilikuwa CDN $12.3 bilioni (US$9.1 bilioni). CGI hutoa huduma za IT za mwisho hadi mwisho na mchakato wa biashara kwa wateja ulimwenguni kote kutoka ofisi nchini Kanada, Marekani na Ulaya. Hisa za CGI zimeorodheshwa kwenye TSX (GIB.A) na NYSE (GIB) na zimejumuishwa katika Fahirisi ya Mchanganyiko wa TSX 100 pamoja na S&P/TSX Teknolojia ya Habari ya Kanada na Fahirisi za MidCap za Kanada. Tovuti: .

Kiolesura cha mwingiliano wa mtumiaji ni mfumo unaoruhusu mwingiliano kati ya mtumiaji na programu. Kwa WWW, kiolesura cha mwingiliano kinaweza kufafanuliwa kama mlolongo wa hati za HTML zinazotekeleza kiolesura cha mtumiaji. Unaweza pia kuainisha kanuni za ujenzi wa kiolesura kulingana na aina ya utengenezaji wa hati ya HTML:

    tuli;

    yenye nguvu.

Katika kesi ya kwanza, chanzo cha kiolesura ni hati ya HTML iliyoundwa katika maandishi fulani au mhariri unaoelekezwa kwa HTML. Kwa hivyo, hati hii inabaki bila kubadilika wakati wa matumizi. Katika kesi ya pili, chanzo cha interface ni hati ya HTML inayozalishwa na moduli ya cgi. Kwa hivyo, kuna kubadilika fulani katika kurekebisha kiolesura wakati wa matumizi.

Kwa hivyo, tunaweza kuanzisha dhana ya kiolesura shirikishi kwa WWW. Kiolesura cha mwingiliano cha WWW ni mlolongo wa hati za HTML tuli au zinazozalishwa kwa nguvu zinazotekeleza kiolesura cha mtumiaji.

Karibu kazi yoyote ambayo hutatua tatizo la kupokea data kutoka kwa mteja inahusisha kujenga interface. La kufurahisha zaidi ni kujenga miingiliano kwa hifadhidata mbalimbali, kufikia seva ya SQL, kupokea taarifa kutoka kwa vifaa vya pembeni, na kuunda vituo vya kazi vya mteja. Haya yote yanawezekana kupitia CGI (Common Gateway Interface). Kiolesura cha Kawaida cha Lango (CGI) ni kiwango cha kiolesura cha programu ya programu ya nje na seva ya WWW.

Kazi ya kujenga miingiliano hapo juu imegawanywa katika sehemu mbili (Kiambatisho 2):

    Sehemu ya mteja. Ili kuunda sehemu ya mteja, unahitaji kuunda hati ya HTML inayotekelezea kiolesura cha mtumiaji. Katika HTML hii inawezekana kupitia fomu.

2. Sehemu ya seva. Sehemu ya seva ina moduli inayoweza kutekelezwa ambayo hutatua kazi kuu za usindikaji wa data kutoka kwa sehemu ya mteja, kutoa jibu katika umbizo la HTML, n.k. Moduli kama hiyo inaitwa moduli ya cgi.

vipimo vya cgi

CGI inafafanua mtiririko 4 wa habari (Kiambatisho 3):

1) Vigezo vya Mazingira kwa masharti imegawanywa katika aina mbili:

a) kawaida kwa aina zote za maombi (kuweka kwa aina zote);

b) kulingana na njia ya ombi.

2) Mtiririko wa Kawaida wa Pato

CGI- moduli hutoa habari kwa mkondo wa pato wa kawaida. Pato hili linaweza kuwa hati inayotokana na moduli ya cgi, au maagizo kwa seva mahali pa kupata hati inayohitajika. Kwa kawaida cgi-moduli hutoa pato lake. Faida ya njia hii ni kwamba cgi-moduli haipaswi kutoa kichwa kamili cha HTTP kwa kila ombi.

3) Mtiririko wa Kawaida wa Kuingiza Data

Katika kesi ya njia ya ombi POST data hupitishwa kama maudhui ya ombi la HTTP. Na zitatumwa kwa mkondo wa kawaida wa ingizo. Data hupitishwa kwa moduli ya cgi katika fomu ifuatayo: jina= thamani& jina1= thamani1&...& jinaN= thamaniN,

Wapi jina- jina tofauti, thamani- thamani ya kutofautiana, N- idadi ya vigezo.

Baiti CONTENT_LENGTH inatumwa kwa kifafanuzi cha kawaida cha faili ya ingizo. Seva pia hupitisha CONTENT_TYPE (aina ya data) kwa moduli ya cgi. Seva haitume herufi ya mwisho wa faili baada ya kutuma baiti CONTENT_LENGTH za data au baada ya moduli ya cgi kuzisoma. Tofauti za mazingira CONTENT_LENGTH na CONTENT_TYPE huwekwa seva inapotekeleza moduli ya cgi. Kwa hivyo, ikiwa kama matokeo ya kutekeleza fomu yenye hoja ya lebo ya FORM - METHOD="POST" kamba ya data firm=MMM&price=100023 itatolewa, basi seva itaweka thamani ya CONTENT_LENGTH hadi 21 na CONTENT_TYPE kwa programu/x-www. -form-urlencoded, na kwa kiwango mkondo wa pembejeo hutuma kizuizi cha data.

Katika kesi ya mbinu PATA, mfuatano wa data hupitishwa kama sehemu ya URL. Wale. kwa mfano, http://host/cgi-bin/script?name1=value1&name2=value2

Katika hali hii, tofauti ya mazingira QUERY_STRING inachukua thamani name1=value1&name2=value2

4) Hoja mstari wa amri

CGI- moduli kwenye safu ya amri kutoka kwa seva inapokea: salio la URL baada ya jina la moduli ya cgi kama parameta ya kwanza (kigezo cha kwanza kitakuwa tupu ikiwa tu jina la moduli ya cgi lilikuwepo), na orodha ya maneno muhimu kama salio la safu ya amri kwa hati ya utaftaji, au majina yanayobadilishana ya sehemu za fomu na ishara iliyoongezwa sawa na maadili yanayolingana. Maneno muhimu, majina na maadili ya uwanja hutumwa kutatuliwa (kutoka kwa umbizo la usimbuaji wa URL ya HTTP) na kusimbwa tena kulingana na sheria za usimbuaji wa ganda la Bourne ili moduli ya cgi kwenye safu ya amri ipate habari bila hitaji la ubadilishaji wa ziada. .

Baada ya muundo wa thamani ya jina umeundwa, unaweza kuanza kutatua shida ambazo moduli ya cgi iliundwa. Hatua inayofuata muhimu ni kizazi chenye nguvu cha hati ya HTML na moduli ya cgi (kupangilia matokeo ya uendeshaji wa moduli). Kwa mfano, meza za uteuzi kutoka kwa hifadhidata. Ili kufanya hivyo, moduli ya cgi lazima itoe kichwa kinachojumuisha laini kwa mkondo wa pato la kawaida: Aina ya yaliyomo: maandishi/html na kamba tupu (herufi mbili CR) Baada ya kichwa hiki unaweza kutoa maandishi yoyote katika umbizo la HTML.

Wamiliki wa maduka ya mtandaoni wanajua dhana ya "biashara ya kielektroniki" moja kwa moja; tayari wanajua jibu la swali "e-commerce - ni nini?" Lakini ukifika chini, nuances nyingi hujitokeza na neno hili linachukua maana pana.

Biashara ya mtandaoni: ni nini?

Wazo la jumla ni kama ifuatavyo: biashara ya kielektroniki inaeleweka kama njia fulani ya kufanya biashara, ambayo inahusisha ujumuishaji wa idadi ya shughuli zinazotumia uhamishaji wa data ya kidijitali katika utoaji wa bidhaa au utoaji wa huduma/kazi, ikijumuisha kutumia Mtandao.

Hivyo, ni shughuli yoyote ya kibiashara inayofanywa kwa kutumia njia ya kielektroniki ya mawasiliano.

Mpango wa kazi umepangwa kama ifuatavyo:

  • mtu yeyote anaweza kuwa mwanablogu au mmiliki mwingine yeyote wa ukurasa wao wa mtandao) anasajili katika mfumo huu;
  • hupata kiungo chake;
  • huweka msimbo maalum kwenye ukurasa wake wa wavuti - tangazo la mshirika rasmi aliyechaguliwa wa Mtandao wa Washirika wa Biashara ya e-Commerce inaonekana;
  • inafuatilia ubadilishaji wa tovuti;
  • hupata asilimia fulani kwa kila ununuzi unaofanywa na mtu anayetembelea tovuti yako ambaye anafuata kiungo cha washirika.

WP e-Commerce

Idadi kubwa ya watu sasa wana shauku kuhusu biashara ya mtandaoni, hasa kutokana na tamaa ya kuunda tovuti yao wenyewe, duka la kipekee la mtandaoni la kuuza bidhaa zao wenyewe. Ili kukidhi mahitaji haya yanayokua, wasanidi programu wamelenga kuunda violezo vya biashara ya mtandaoni. Wacha tuangalie ni nini kinachofuata.

Mfano mmoja kama huo wa template ni WordPress e-commerce. Ni programu-jalizi ya rukwama ya ununuzi ya WordPress (mojawapo ya mifumo maarufu ya usimamizi wa rasilimali za wavuti), inayokusudiwa kimsingi kuunda na kupanga blogi). Inatolewa bila malipo kabisa na inaruhusu wageni wa tovuti kufanya manunuzi kwenye tovuti.

Kwa maneno mengine, programu-jalizi hii inakuwezesha kuunda duka la mtandaoni (kulingana na WordPress). Programu-jalizi hii ya e-commerce ina zana, mipangilio na chaguzi zote muhimu ili kukidhi mahitaji ya kisasa.

Shukrani kwa Mtandao Wote wa Ulimwenguni, karibu mtu yeyote anaweza kutoa taarifa mtandaoni kwa njia ambayo ni rahisi machoni na inaweza kusambazwa kwa wingi. Bila shaka umepitia Mtandao na kuona tovuti zingine, na sasa pengine unajua kwamba vifupisho vya kutisha kama "HTTP" na "HTML" ni mkato wa "Wavuti" na "njia ya maelezo yanavyoonyeshwa kwenye Mtandao." Huenda tayari una uzoefu wa kuwasilisha taarifa kwenye Mtandao.

Mtandao umethibitika kuwa njia bora ya kusambaza habari, kama inavyoonekana kutokana na umaarufu wake mkubwa na maendeleo yaliyoenea. Ingawa wengine wametilia shaka manufaa ya Mtandao na kuhusisha maendeleo na umaarufu wake ulioenea hasa kwa utangazaji unaoingilia, bila shaka mtandao ni njia muhimu ya kuwasilisha kila aina ya habari. Sio tu kwamba kuna huduma nyingi zinazopatikana ili kutoa maelezo ya kisasa (habari, hali ya hewa, matukio ya michezo ya moja kwa moja) na nyenzo za marejeleo kielektroniki, pia kuna kiasi kikubwa cha aina nyingine za data zinazopatikana. IRS, ambayo ilisambaza fomu zake zote za kurejesha kodi za 1995 na taarifa nyingine kupitia Mtandao Wote wa Ulimwenguni, hivi majuzi ilikubali kupokea barua za mashabiki kwa Tovuti yake. Nani angefikiria kuwa IRS ingewahi kupokea barua kutoka kwa mashabiki? Hii haikuwa kwa sababu tovuti yake iliundwa vizuri, lakini kwa sababu ilikuwa imethibitishwa kuwa chombo muhimu sana kwa maelfu, labda mamilioni ya watu.

Ni nini hufanya Wavuti kuwa ya kipekee na huduma ya habari ya kuvutia? Kwanza kabisa, hutoa interface ya hypermedia kwa data. Fikiria juu ya diski kuu ya kompyuta yako. Kwa kawaida, data inaonyeshwa kwa mtindo wa mstari, sawa na mfumo wa faili. Kwa mfano, una idadi ya folda, na ndani ya kila folda kuna nyaraka au folda nyingine. Wavuti hutumia dhana tofauti kueleza habari inayoitwa hypermedia. Kiolesura cha maandishi cha hypertext kina hati na viungo. Viungo ni maneno ambayo yamebofya ili kuona hati zingine au kupata aina zingine za habari. Wavuti hupanua dhana ya hypertext kujumuisha aina zingine za media, kama vile michoro, sauti, video (kwa hivyo jina "hypermedia"). Kuchagua maandishi au michoro kwenye hati hukuruhusu kuona taarifa zinazohusiana kuhusu kipengee kilichochaguliwa katika idadi yoyote ya fomu.

Takriban kila mtu anaweza kufaidika kutokana na njia hii rahisi na ya kipekee ya kuwasilisha na kusambaza taarifa, kuanzia wasomi wanaotaka kutumia data mara moja na wenzao hadi wafanyabiashara wanaoshiriki taarifa kuhusu kampuni yao na kila mtu. Walakini, ingawa kutoa habari ni muhimu sana, katika miaka michache iliyopita wengi wamehisi kuwa kupokea habari ni mchakato muhimu sawa.

Ingawa Wavuti hutoa kiolesura cha kipekee cha hypermedia kwa habari, kuna njia zingine nyingi nzuri za kusambaza data. Kwa mfano, huduma za mtandao kama vile Itifaki ya Uhamisho wa Faili (FTP) na kikundi cha habari cha Gopher zilikuwepo muda mrefu kabla ya Mtandao Wote wa Ulimwenguni. Barua za kielektroniki zimekuwa njia kuu ya mawasiliano na upashanaji habari kwenye Mtandao na mitandao mingine mingi tangu mwanzo kabisa wa mitandao hii. Kwa nini Intaneti imekuwa njia maarufu sana ya kusambaza habari? Kipengele cha media titika cha Mtandao kimechangia kwa kiasi kikubwa mafanikio yake ambayo hayajawahi kushuhudiwa, lakini ili Mtandao uwe na ufanisi zaidi, ni lazima uwe na mwingiliano.

Bila uwezo wa kupokea ingizo la mtumiaji na kutoa taarifa, Mtandao ungekuwa mazingira tuli kabisa. Taarifa hiyo itapatikana tu katika muundo uliobainishwa na mwandishi. Hii inaweza kudhoofisha mojawapo ya uwezo wa kompyuta kwa ujumla: habari shirikishi. Kwa mfano, badala ya kulazimisha mtumiaji kutazama hati nyingi kana kwamba anatafuta kitabu au kamusi, itakuwa bora kumruhusu mtumiaji kutambua maneno muhimu kwenye mada inayokuvutia. Watumiaji wanaweza kubinafsisha uwasilishaji wa data badala ya kutegemea muundo thabiti unaofafanuliwa na mtoa huduma wa maudhui.

Neno "Seva ya Wavuti" linaweza kupotosha kwa sababu linaweza kurejelea mashine halisi na programu inayotumia kuwasiliana na vivinjari vya Mtandao. Wakati kivinjari kinaomba anwani fulani ya Wavuti, kwanza huunganisha kwa mashine kupitia Mtandao, kutuma programu ya seva ya Wavuti ombi la hati. Programu hii huendesha kila wakati, ikingojea maombi kama haya kufika na kujibu ipasavyo.

Ingawa seva zinaweza kutuma na kupokea data, seva yenyewe ina utendakazi mdogo. Kwa mfano, seva ya zamani zaidi inaweza tu kutuma faili inayohitajika kwa kivinjari. Seva kawaida haijui la kufanya na hii au ingizo la ziada. Ikiwa ISP haitaambia seva jinsi ya kushughulikia maelezo haya ya ziada, seva itapuuza ingizo.

Ili seva iweze kufanya shughuli zingine kando na kutafuta na kutuma faili kwenye kivinjari cha Mtandao, unahitaji kujua jinsi ya kupanua utendaji wa seva. Kwa mfano, seva ya Wavuti haiwezi kutafuta hifadhidata kulingana na neno kuu lililowekwa na mtumiaji na kurudisha hati nyingi zinazolingana isipokuwa kama uwezo kama huo umepangwa kwenye seva kwa njia fulani.

CGI ni nini?

Kiolesura cha Kawaida cha Lango (CGI) ni kiolesura cha seva kinachokuruhusu kupanua utendakazi wa seva. Kwa kutumia CGI, unaweza kuingiliana kwa maingiliano na watumiaji wanaofikia tovuti yako. Katika kiwango cha kinadharia, CGI inaruhusu seva kuwa na uwezo wa kuchanganua (kutafsiri) ingizo kutoka kwa kivinjari na kurudisha habari kulingana na ingizo la mtumiaji. Kwa kiwango cha vitendo, CGI ni kiolesura kinachoruhusu mpangaji programu kuandika programu zinazowasiliana kwa urahisi na seva.

Kwa kawaida, ili kupanua uwezo wa seva, itabidi urekebishe seva mwenyewe. Suluhisho hili halifai kwa sababu linahitaji kuelewa safu ya chini ya programu ya mtandao wa Itifaki ya Mtandao. Hii pia itahitaji kuhariri na kurejesha msimbo wa chanzo cha seva au kuandika seva maalum kwa kila kazi. Wacha tuseme tunataka kupanua uwezo wa seva ili ifanye kazi kama lango la Wavuti-kwa-barua-pepe, kuchukua habari iliyoingizwa na mtumiaji kutoka kwa kivinjari na kuituma. barua pepe kwa mtumiaji mwingine. Seva italazimika kuingiza msimbo ili kuchanganua ingizo kutoka kwa kivinjari, kuisambaza kupitia barua pepe kwa mtumiaji mwingine, na kurudisha majibu kwa kivinjari kupitia muunganisho wa mtandao.

Kwanza, kazi kama hiyo inahitaji ufikiaji wa nambari ya seva, ambayo haiwezekani kila wakati.

Pili, ni ngumu na inahitaji maarifa ya kina ya kiufundi.

Tatu, hii inatumika tu kwa seva maalum. Iwapo unahitaji kuhamisha seva yako hadi kwenye jukwaa lingine, itabidi uendeshe au angalau utumie muda mwingi kusambaza msimbo kwenye jukwaa hilo.

Kwa nini CGI?

CGI inatoa suluhu ya kubebeka na rahisi kwa matatizo haya. Itifaki ya CGI inafafanua njia ya kawaida ya programu kuwasiliana na seva ya Wavuti. Bila ujuzi wowote maalum, unaweza kuandika programu katika lugha yoyote ya mashine ambayo inaingiliana na kuwasiliana na seva ya Wavuti. Mpango huu utafanya kazi na seva zote za Wavuti zinazoelewa itifaki ya CGI.

Mawasiliano ya CGI hufanywa kwa kutumia pembejeo na matokeo ya kawaida, ambayo inamaanisha kuwa ikiwa unajua jinsi ya kuchapisha na kusoma data kwa kutumia lugha yako ya programu, unaweza kuandika programu ya seva ya Wavuti. Kando na uchanganuzi wa pembejeo na matokeo, programu za CGI za upangaji ni karibu sawa na kutayarisha programu nyingine yoyote. Kwa mfano, kupanga programu ya "Hujambo, Ulimwengu!", unatumia vitendaji vya uchapishaji vya lugha yako na umbizo lililobainishwa kwa programu za CGI ili kuchapisha ujumbe unaolingana.

Kuchagua lugha ya programu

Kwa sababu CGI ni kiolesura cha ulimwengu wote, hauzuiliwi na lugha yoyote mahususi ya mashine. Swali muhimu ambalo huulizwa mara nyingi ni: ni lugha gani za programu zinaweza kutumika kwa programu ya CGI? Unaweza kutumia lugha yoyote inayokuruhusu kufanya yafuatayo:

  • Chapisha hadi pato la kawaida
  • Soma kutoka kwa ingizo la kawaida
  • Soma kutoka kwa hali tofauti

Takriban lugha zote za programu na lugha nyingi za uandishi hufanya mambo haya matatu, na unaweza kutumia yoyote kati yao.

Lugha huanguka katika moja ya madarasa mawili yafuatayo: kutafsiriwa na kufasiriwa. Lugha iliyotafsiriwa kama vile C au C++ kawaida huwa ndogo na haraka zaidi, ilhali lugha zinazofasiriwa kama vile Perl au Rexx wakati mwingine huhitaji mkalimani mkubwa kupakiwa wakati wa kuanza. Zaidi ya hayo, unaweza kusambaza misimbo binary (msimbo unaotafsiriwa katika lugha ya mashine) bila msimbo wa chanzo ikiwa lugha yako inaweza kutafsiriwa. Kusambaza hati zinazoweza kufasiriwa kwa kawaida humaanisha kusambaza msimbo wa chanzo.

Kabla ya kuchagua lugha, kwanza unahitaji kuzingatia vipaumbele vyako. Unahitaji kupima faida za kasi na ufanisi wa lugha moja ya programu dhidi ya urahisi wa programu ya nyingine. Ikiwa una nia ya kujifunza lugha nyingine, badala ya kutumia unayojua tayari, pima kwa uangalifu faida na hasara za lugha zote mbili.

Lugha mbili zinazotumiwa sana kwa programu ya CGI ni C na Perl (zote mbili zimeangaziwa katika kitabu hiki). Wote wawili wana faida na hasara za wazi. Perl ni lugha ya kiwango cha juu sana, na wakati huo huo lugha yenye nguvu, inayofaa hasa kwa uchanganuzi wa maandishi. Ingawa urahisi wake wa matumizi, kunyumbulika, na nguvu huifanya kuwa lugha ya kuvutia kwa programu ya CGI, saizi yake kubwa kiasi na utendakazi polepole wakati mwingine huifanya isifae kwa baadhi ya programu. Programu za C ni ndogo, zinafaa zaidi, na hutoa udhibiti wa mfumo wa kiwango cha chini, lakini ni ngumu zaidi katika kupanga, hazina taratibu za uchakataji wa maandishi zilizojumuishwa ndani, na ni ngumu zaidi kusuluhisha.

Ni lugha gani inayofaa zaidi kwa programu ya CGI? Ile ambayo unaona inafaa zaidi kutoka kwa mtazamo wa programu. Zote mbili zinafaa kwa utayarishaji wa programu za CGI, na kwa maktaba zinazofaa, zote zina uwezo sawa. Hata hivyo, ikiwa una seva ngumu kufikia, unaweza kutumia programu ndogo, zilizotafsiriwa za C. Ikiwa unahitaji haraka kuandika programu ambayo inahitaji kazi nyingi za usindikaji wa maandishi, unaweza kutumia Perl badala yake.

Tahadhari

Kuna njia mbadala muhimu kwa programu za CGI. Seva nyingi sasa zinajumuisha upangaji wa API, ambayo hurahisisha kupanga upanuzi wa seva moja kwa moja kinyume na programu za CGI zilizojitegemea. Seva za API kwa ujumla ni bora zaidi kuliko programu za CGI. Seva zingine ni pamoja na utendakazi uliojengewa ndani ambao unaweza kushughulikia vipengele maalum visivyo vya CGI, kama vile kuunganisha hifadhidata. Hatimaye, baadhi ya programu zinaweza kushughulikiwa na teknolojia mpya za upande wa mteja (badala ya upande wa seva) kama Java. Kwa mabadiliko hayo ya haraka ya teknolojia, CGI itapitwa na wakati haraka?

Vigumu. CGI ina faida kadhaa juu ya teknolojia mpya.

  • Ni hodari na inabebeka. Unaweza kuandika programu ya CGI kwa kutumia karibu lugha yoyote ya programu kwenye jukwaa lolote. Baadhi ya njia mbadala, kama vile API ya seva, huweka kikomo kwa lugha fulani na ni ngumu zaidi kujifunza.
  • Haiwezekani kwamba teknolojia za upande wa mteja kama vile Java zitachukua nafasi ya CGI, kwa sababu kuna baadhi ya programu ambazo programu za upande wa seva zinafaa zaidi kuendeshwa.
  • Vikwazo vingi vya CGI ni vikwazo vya HTML au HTTP. Viwango vya Mtandao kwa ujumla vinabadilika, ndivyo uwezo wa CGI unavyoongezeka.

Muhtasari

Kiolesura cha Kawaida cha Lango ni itifaki ambayo programu huingiliana na seva za Wavuti. Uwezo mwingi wa CGI huwapa waandaaji programu uwezo wa kuandika programu za lango katika karibu lugha yoyote, ingawa kuna biashara nyingi zinazohusiana na lugha tofauti. Bila uwezo huu, kuunda kurasa za Wavuti zinazoingiliana itakuwa ngumu, ikihitaji marekebisho bora ya seva, na mwingiliano haungepatikana kwa watumiaji wengi ambao si wasimamizi wa tovuti.

Sura ya 2: Misingi

Miaka kadhaa iliyopita, niliunda ukurasa wa chuo kikuu cha Harvard ambapo watu wangeweza kuwasilisha maoni kuwahusu. Wakati huo, mtandao ulikuwa mchanga na nyaraka zilikuwa chache. Mimi, kama wengine wengi, nilitegemea uhifadhi wa nyaraka fupi na mifumo ya programu iliyoundwa na wengine ili kujifundisha upangaji programu wa CGI. Ingawa njia hii ya utafiti ilihitaji utaftaji fulani, majaribio mengi, na kuunda maswali mengi, ilikuwa nzuri sana. Sura hii ni matokeo ya kazi yangu ya mapema na CGI (na marekebisho machache, bila shaka).

Ingawa inachukua muda kuelewa kikamilifu na kusimamia kiolesura cha kawaida cha lango, itifaki yenyewe ni rahisi sana. Mtu yeyote ambaye ana ujuzi wa kimsingi wa kupanga na anafahamu Wavuti anaweza kujifunza kwa haraka kupanga programu changamano za CGI kama vile mimi na wengine tulijifunza kufanya miaka kadhaa iliyopita.

Madhumuni ya sura hii ni kuwasilisha misingi ya CGI kwa njia ya kina, ingawa imefupishwa. Kila dhana inayojadiliwa hapa imewasilishwa kwa undani katika sura zinazofuata. Walakini, baada ya kukamilisha sura hii, unaweza kuanza mara moja kupanga programu za CGI. Mara tu unapofikia kiwango hiki, unaweza kujifunza ugumu wa CGI, ama kwa kusoma sehemu nyingine ya kitabu hiki au kwa kujaribu peke yako.

Unaweza kuchemsha programu ya CGI kwa kazi mbili: kupokea habari kutoka kwa kivinjari cha Wavuti na kutuma habari kwa kivinjari. Hii inafanywa kwa njia ya angavu mara tu unapofahamu matumizi ya kawaida ya programu za CGI. Mara nyingi mtumiaji anaulizwa kujaza fomu fulani, kwa mfano, ingiza jina lake. Mara tu mtumiaji atakapojaza fomu na bonyeza Enter, habari hii inatumwa kwa programu ya CGI. Mpango wa CGI lazima ubadilishe taarifa hii kuwa kitu inachoelewa, uichakate ipasavyo, na kisha uirejeshe kwa kivinjari, iwe uthibitisho rahisi au matokeo ya utafutaji katika hifadhidata ya madhumuni mbalimbali.

Kwa maneno mengine, programu ya CGI inahitaji kuelewa jinsi ya kupokea ingizo kutoka kwa kivinjari cha Mtandao na jinsi ya kutuma pato nyuma. Kinachotokea kati ya hatua za uingizaji na utoaji wa programu ya CGI inategemea lengo la msanidi programu. Utapata kwamba ugumu kuu katika programu ya CGI upo katika hatua hii ya kati; Mara tu unapojifunza jinsi ya kufanya kazi na pembejeo na matokeo, hiyo inatosha kuwa msanidi wa CGI.

Katika sura hii, utajifunza kanuni za uwekaji na matokeo ya CGI, pamoja na ujuzi mwingine msingi utakaohitaji kuandika na kutumia CGI, ikijumuisha mambo kama kuunda fomu za HTML na kutaja programu zako za CGI. Sura hii inashughulikia mada zifuatazo:

  • Programu ya jadi "Halo, Ulimwengu!";
  • Pato la CGI: Kutuma taarifa nyuma kwa ajili ya kuonyeshwa kwenye kivinjari cha Mtandao;
  • Inasanidi, kusakinisha na kuendesha programu. Utajifunza kuhusu majukwaa na seva tofauti za Wavuti;
  • Ingizo la CGI: Ufafanuzi wa habari iliyotumwa na kivinjari cha Wavuti. Utangulizi wa baadhi ya maktaba za programu muhimu kwa kuchanganua ingizo kama hilo;
  • Mfano rahisi: inashughulikia masomo yote katika sura iliyotolewa;
  • Mkakati wa kupanga.

Kwa sababu ya asili ya sura hii, ninagusa tu mada fulani. Usijali; Mada hizi zote zimefunikwa kwa kina zaidi katika sura zingine.

Salamu, Dunia!

Unaanza na tatizo la utangulizi wa kitamaduni. Utaandika programu inayoonyesha "Habari, Ulimwengu!" kwenye kivinjari chako cha Wavuti. Kabla ya kuandika programu hii, lazima uelewe ni habari gani kivinjari cha Wavuti kinatarajia kupokea kutoka kwa programu za CGI. Pia unahitaji kujua jinsi ya kuendesha programu hii ili uweze kuiona katika vitendo.

CGI haitegemei lugha, kwa hivyo unaweza kutekeleza programu hii katika lugha yoyote. Lugha kadhaa tofauti hutumiwa hapa kuonyesha uhuru wa kila lugha. Huko Perl, programu ya "Habari, Ulimwengu!" inavyoonyeshwa katika Orodha 2.1.

Kuorodhesha 2.1. Salamu, Dunia! katika Perl. #!/usr/local/bin/perl # Hello.cgi - Chapisha mpango wangu wa kwanza wa CGI "Aina ya Maudhui: maandishi/html\n\n"; chapa" \n"; chapisha" Salamu, Dunia!"; chapisha"\n"; chapisha" \n"; chapisha"

Salamu, Dunia!

\n"; chapisha"

\n";

Hifadhi programu hii kama hello.cgi, na uisakinishe katika eneo linalofaa. (Ikiwa huna uhakika ni wapi, usijali; utapata katika sehemu ya "Kusakinisha na Kuendesha Programu ya CGI" baadaye katika sura hii.) Kwa seva nyingi, saraka unayohitaji ni cgi-bin. . Sasa, piga programu kutoka kwa kivinjari chako cha Wavuti. Kwa wengi, hii inamaanisha kufungua kitafuta rasilimali sare (URL) ifuatayo:

http://hostname/directoryname/hello.cgi

Jina la mpangishaji ni jina la seva yako ya Wavuti, na jina la saraka ni saraka ambapo unaweka hello.cgi (labda cgi-bin).

Kugawanyika hello.cgi

Kuna mambo machache ya kuzingatia kuhusu hello.cgi.

Kwanza, unatumia amri rahisi za kuchapisha. Programu za CGI hazihitaji maelezo yoyote maalum ya faili au maelezo ya pato. Ili kutuma pato kwa kivinjari, chapisha tu ili stdout.

Pili, kumbuka kuwa maudhui ya taarifa ya kwanza ya kuchapisha (Aina ya Maudhui: maandishi/html) haionekani kwenye kivinjari chako cha Wavuti. Unaweza kutuma maelezo yoyote unayotaka kwa kivinjari (ukurasa wa HTML, michoro au sauti), lakini kwanza, unahitaji kumwambia kivinjari ni aina gani ya data unayoituma. Mstari huu huambia kivinjari aina gani ya habari ya kutarajia - katika kesi hii, ukurasa wa HTML.

Tatu, programu inaitwa hello.cgi. Huhitaji kila wakati kutumia kiendelezi cha .cgi chenye jina la programu yako ya CGI. Ingawa msimbo wa chanzo wa lugha nyingi pia hutumia kiendelezi cha .cgi, haitumiwi kuonyesha aina ya lugha, lakini ni njia ya seva kutambua faili kama faili inayoweza kutekelezwa badala ya faili ya michoro, faili ya HTML, au faili ya maandishi. Seva mara nyingi husanidiwa ili kujaribu tu kutekeleza faili hizo zilizo na kiendelezi hiki, kuonyesha maudhui ya wengine wote. Ingawa kutumia kiendelezi cha .cgi hakuhitajiki, bado inachukuliwa kuwa mazoezi mazuri.

Kwa ujumla, hello.cgi ina sehemu kuu mbili:

  • huambia kivinjari habari gani ya kutarajia (Aina ya Yaliyomo: maandishi/html)
  • huambia kivinjari kile cha kuonyesha (Hujambo, Ulimwengu!)

Salamu, Dunia! katika C

Ili kuonyesha uhuru wa lugha ya programu za CGI, Orodha ya 2.2 inaonyesha sawa na mpango wa hello.cgi ulioandikwa katika C.

Kuorodhesha 2.2. Salamu, Dunia! katika C. /* hello.cgi.c - Hello, World CGI */ #include int main() ( printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); chapisha(" Salamu, Dunia!\n"); chapisha("\n"); chapisha(" \n"); chapisha("

Salamu, Dunia!

\n"); chapisha("

\n");)

Kumbuka

Kumbuka kuwa toleo la Perl la hello.cgi linatumia uchapishaji wa Aina ya Maudhui ": text/html\n\n "; Wakati toleo C linatumia Printf("Content-Type: text/html\r\n\r\n");

Kwa nini Perl huchapisha opereta inaisha na laini mbili mpya (\n) huku C printf inaisha na marejesho mawili ya gari na laini mpya (\r\n)?

Kitaalam, vichwa (matokeo yote kabla ya laini tupu) vinatarajiwa kutengwa na urejeshaji wa gari na laini mpya. Kwa bahati mbaya, kwenye mashine za DOS na Windows, Perl hutafsiri \r kama laini nyingine badala ya kurudi kwa gari.

Ingawa ubaguzi wa Perl \rs sio sahihi kiufundi, itafanya kazi kwa karibu itifaki zote na inaweza kubebeka kwa usawa kwenye majukwaa yote. Kwa hivyo, katika mifano yote ya Perl kwenye kitabu hiki, ninatumia vichwa vya habari mpya badala ya kurudi kwa gari na mistari mpya.

Suluhisho linalofaa kwa tatizo hili limetolewa katika Sura ya 4, Hitimisho.

Seva ya Wavuti wala kivinjari haijali ni lugha gani inatumiwa kuandika programu. Ingawa kila lugha ina faida na hasara kama lugha ya programu ya CGI, ni bora kutumia lugha ambayo unafaa zaidi kufanya kazi nayo. (Chaguo la lugha ya programu linajadiliwa kwa undani zaidi katika Sura ya 1, "Common Gateway Interface (CGI)").

Utoaji wa CGI

Sasa unaweza kuangalia kwa karibu suala la kutuma habari kwa kivinjari cha Wavuti. Kutoka kwa mfano "Hujambo, Ulimwengu!", unaweza kuona kwamba vivinjari vya Wavuti vinatarajia seti mbili za data: kichwa, ambacho kina habari kama vile habari ya kuonyesha (kwa mfano, Aina ya Yaliyomo: mstari) na habari halisi (nini kivinjari cha Wavuti. maonyesho). Sehemu hizi mbili za habari zinatenganishwa na mstari tupu.

Kichwa kinaitwa kichwa cha HTTP. Inatoa habari muhimu kuhusu habari ambayo kivinjari kitapokea. Kuna aina tofauti za vichwa vya HTTP, na kinachojulikana zaidi ni kile ambacho umetumia hapo awali: Aina ya Maudhui: kichwa. Unaweza kutumia michanganyiko tofauti ya vichwa vya HTTP, vinavyotenganishwa na urejeshaji wa gari na laini mpya (\r\n). Mstari tupu unaotenganisha kichwa kutoka kwa data pia unajumuisha urejeshaji wa gari na laini mpya (kwa nini zote zinahitajika inajadiliwa kwa ufupi katika dokezo lililotangulia na kuelezewa kwa kina katika Sura ya 4). Utajifunza kuhusu vichwa vingine vya HTTP katika Sura ya 4; Hivi sasa unashughulika na Aina ya Yaliyomo: kichwa.

Aina ya Yaliyomo: Kijaju kinaelezea aina ya data ambayo CGI inarudisha. Umbizo linalofaa kwa kichwa hiki ni:

Aina ya Maudhui: aina ndogo/aina

Ambapo aina ndogo/aina ni aina sahihi ya Viendelezi vya Barua Pepe za Wavuti (MIME). Aina ya kawaida ya MIME ni aina ya HTML: text/html. Jedwali 2.1 linaorodhesha aina chache za kawaida za MIME ambazo zitajadiliwa; Uorodheshaji kamili zaidi na uchanganuzi wa aina za MIME umetolewa katika Sura ya 4.

Kumbuka

MIME ilivumbuliwa ili kuelezea yaliyomo kwenye miili ya ujumbe wa barua pepe. Imekuwa njia ya kawaida ya kuwakilisha maelezo ya Aina ya Maudhui. Unaweza kusoma zaidi kuhusu MIME katika RFC1521. RFCs kwenye Mtandao husimamia Maombi ya Maoni, ambayo ni muhtasari wa maamuzi yaliyotolewa na vikundi kwenye Mtandao vinavyojaribu kuweka viwango. Unaweza kutazama matokeo ya RFC1521 katika anwani ifuatayo: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Jedwali 2.1. Baadhi ya kawaida Aina za MIME. Ufafanuzi wa Aina ya MIME Maandishi/html Lugha ya Alama ya Maandishi ya Juu (HTML) Maandishi/Faili za maandishi wazi Picha/gif Faili za picha GIF Picha/jpeg Faili za picha zilizobanwa JPEG Faili za Sauti/msingi za Sauti Sun *.au Sikizi/x-wav Faili za Windows *. wav

Baada ya kichwa na mstari tupu, unachapisha tu data katika fomu unayohitaji. Ikiwa unatuma HTML, basi chapisha lebo za HTML na data ili stdout baada ya kichwa. Unaweza pia kutuma michoro, sauti na faili zingine za binary kwa kuchapisha tu yaliyomo kwenye faili kwa stdout. Mifano kadhaa ya hii imetolewa katika Sura ya 4.

Kufunga na Kuendesha Programu ya CGI

Sehemu hii inapotoka kwa kiasi fulani kutoka kwa programu ya CGI na inazungumza kuhusu kusanidi seva yako ya Wavuti kutumia CGI, kusakinisha na kuendesha programu. Utatambulishwa kwa seva tofauti za majukwaa tofauti kwa undani zaidi au kidogo, lakini itabidi uchimbe kwa undani nyaraka za seva yako ili kupata chaguo bora zaidi.

Seva zote zinahitaji nafasi kwa faili za seva na nafasi kwa hati za HTML. Katika kitabu hiki, eneo la seva linaitwa ServerRoot, na eneo la hati linaitwa DocumentRoot. Kwenye mashine za UNIX, ServerRoot kawaida huwa ndani /usr/local/etc/httpd/, na DocumentRoot kawaida iko /usr/local/etc/httpd/htdocs/. Walakini, hii haitaleta tofauti yoyote kwenye mfumo wako, kwa hivyo badilisha marejeleo yote ya ServerRoot na DocumentRoot na ServerRoot yako mwenyewe na DocumentRoot.

Unapofikia faili kwa kutumia kivinjari chako cha Wavuti, unabainisha faili katika URL inayohusiana na DocumentRoot. Kwa mfano, ikiwa anwani ya seva yako ni mymachine.org, basi unafikia faili hii kwa URL ifuatayo: http://mymachine.org/index.html

Inasanidi seva kwa CGI

Seva nyingi za Wavuti zimesanidiwa awali ili kuruhusu matumizi ya programu za CGI. Kwa kawaida vigezo viwili vinaonyesha kwa seva ikiwa faili ni programu ya CGI au la:

  • Saraka iliyoteuliwa. Seva zingine hukuruhusu kubaini kuwa faili zote kwenye saraka iliyoteuliwa (kawaida huitwa cgi-bin kwa chaguo-msingi) ni CGI.
  • Viendelezi vya jina la faili. Seva nyingi zina usanidi huu wa awali ambao unaruhusu faili zote zinazoishia kwa .cgi kufafanuliwa kama CGI.

Njia ya saraka iliyoteuliwa ni kitu cha masalio ya zamani (seva za kwanza ziliitumia kama njia pekee ya kuamua ni faili gani zilikuwa programu za CGI), lakini ina faida kadhaa.

  • Huweka programu za CGI kuwa kati, kuzuia saraka nyingine kuwa na vitu vingi.
  • Hauzuiliwi na kiendelezi chochote cha jina la faili, kwa hivyo unaweza kutaja faili zako chochote unachotaka. Seva zingine hukuruhusu kuteua saraka kadhaa tofauti kama saraka za CGI.
  • Pia inakupa udhibiti zaidi juu ya nani anayeweza kurekodi CGI. Kwa mfano, ikiwa una seva na unaunga mkono mfumo ulio na watumiaji wengi na hutaki watumie hati zao za CGI bila kukagua kwanza programu kwa sababu za usalama, unaweza kuteua faili hizo tu katika saraka ndogo, ya kati kama CGI. . Watumiaji watalazimika kukupa programu za CGI za kusakinisha, na unaweza kwanza kukagua msimbo ili kuhakikisha kuwa programu haina masuala makubwa ya usalama.

Nukuu ya CGI kupitia kiendelezi cha jina la faili inaweza kuwa muhimu kwa sababu ya kubadilika kwake. Hauzuiliwi na saraka moja ya programu za CGI. Seva nyingi zinaweza kusanidiwa ili kutambua CGI kupitia kiendelezi cha jina la faili, ingawa sio zote zimesanidiwa kwa njia hii kwa chaguo-msingi.

Onyo

Kumbuka umuhimu wa masuala ya usalama unaposanidi seva yako kwa CGI. Vidokezo vingine vitashughulikiwa hapa, na Sura ya 9, Kulinda CGI, inashughulikia vipengele hivi kwa undani zaidi.

Kufunga CGI kwenye seva za UNIX

Bila kujali jinsi seva yako ya UNIX imesanidiwa, kuna hatua kadhaa unazohitaji kuchukua ili kuhakikisha kuwa programu zako za CGI zinaendeshwa inavyotarajiwa. Seva yako ya Wavuti kwa kawaida itaendeshwa kama mtumiaji ambaye hayupo (yaani, mtumiaji wa UNIX hakuna mtu - akaunti ambayo haina ruhusa za faili na haiwezi kuingia). Hati za CGI (zilizoandikwa kwa Perl, ganda la Bourne, au lugha nyingine ya hati) lazima zitekelezwe na kusomeka ulimwenguni kote.

Dokezo

Ili kufanya faili zako zisomeke na kutekelezwa ulimwenguni, tumia amri ifuatayo ya ruhusa za UNIX: chmod 755 filename.

Ikiwa unatumia lugha ya maelezo ya hati Aina ya Perl au Tcl, toa njia kamili ya mkalimani wako kwenye mstari wa kwanza wa hati yako. Kwa mfano, hati ya Perl inayotumia perl kwenye saraka ya /usr/local/bin ingeanza na safu ifuatayo:

#!/usr/local/bin/perl

Onyo

Usiweke kamwe mkalimani (perl, au Tcl Wish binary) kwenye saraka ya /cgi-bin. Hii husababisha hatari ya usalama kwenye mfumo wako. Hili linajadiliwa kwa undani zaidi katika Sura ya 9.

Baadhi ya seva za kawaida za UNIX

Seva za NCSA na Apache zina faili za usanidi zinazofanana kwa sababu seva ya Apache ilitokana na msimbo wa NCSA. Kwa chaguo-msingi, zimeundwa ili faili yoyote kwenye saraka ya cgi-bin (iko kwa chaguo-msingi katika ServerRoot) ni programu ya CGI. Ili kubadilisha eneo la saraka ya cgi-bin, unaweza kuhariri faili ya usanidi ya conf/srm.conf. Umbizo la kusanidi saraka hii ni

ScriptAlias ​​​​fakedirectoryname realdirectoryname

ambapo fakedirectoryname ni jina la saraka pseudo (/cgi-bin) na realdirectoryname ndio njia kamili ambapo programu za CGI huhifadhiwa. Unaweza kusanidi zaidi ya ScriptAlias ​​kwa kuongeza mistari zaidi ya ScriptAlias.

Usanidi chaguo-msingi unatosha kwa mahitaji ya watumiaji wengi. Unahitaji kuhariri laini katika faili ya srm.conf katika hali yoyote ili kubaini jina sahihi la saraka. Ikiwa, kwa mfano, programu zako za CGI ziko ndani /usr/local/etc/httpd/cgi-bin, mstari wa ScriptAlias ​​katika faili yako ya srm.conf inapaswa kuwa kitu kama hiki:

ScriptAlias ​​​​/cgi-bin/ /usr/local/etc/httpd/cgi-bin/

Ili kufikia au kuunganisha kwa programu za CGI zilizo katika saraka hii, tumia URL ifuatayo:

Http://hostname/cgi-bin/programname

Ambapo jina la mpangishaji ni jina la mwenyeji wa seva yako ya Wavuti, na jina la programu ni jina la CGI yako.

Kwa mfano, tuseme unakili programu ya hello.cgi kwenye saraka yako ya cgi-bin (km /usr/local/etc/httpd/cgi-bin) kwenye seva yako ya Wavuti iitwayo www.company.com. Ili kufikia CGI yako, tumia URL ifuatayo: http://www.company.com/cgi-bin/hello.cgi

Ikiwa ungependa kusanidi seva yako ya NCSA au Apache ili kutambua faili yoyote iliyo na kiendelezi cha .cgi kama CGI, unahitaji kuhariri faili mbili za usanidi. Kwanza, katika faili ya srm.conf, toa maoni kwa mstari ufuatao:

AddType application/x-httpd-cgi .cgi

Hii itahusisha CGI ya aina ya MIME na kiendelezi cha .cgi. Sasa, tunahitaji kubadilisha faili ya access.conf ili tuweze kuendesha CGI katika saraka yoyote. Ili kufanya hivyo, ongeza chaguo la ExecCGI kwenye mstari wa Chaguo. Itaonekana kitu kama safu ifuatayo:

Fahirisi za Chaguo FollowSymLinks ExecCGI

Sasa, faili yoyote iliyo na kiendelezi cha .cgi inachukuliwa kuwa CGI; ifikie kama vile faili yoyote kwenye seva yako.

Seva ya CERN imesanidiwa kwa njia sawa na seva za Apache na NCSA. Badala ya ScriptAlias, seva ya CERN hutumia amri ya Exec. Kwa mfano, katika faili ya httpd.conf, utaona mstari ufuatao:

Tekeleza /cgi-bin/* /usr/local/etc/httpd/cgi-bin/*

Seva zingine za UNIX zinaweza kusanidiwa kwa njia sawa; Hii imeelezewa kwa undani zaidi katika nyaraka za seva.

Kufunga CGI kwenye Windows

Seva nyingi zinazopatikana kwa Windows 3.1, Windows 95 na Windows NT zimesanidiwa kwa kutumia mbinu ya "kiendelezi cha jina la faili" kwa utambuzi wa CGI. Kwa ujumla, kubadilisha usanidi wa seva inayotegemea Windows inahitaji tu kuendesha programu ya usanidi wa seva na kufanya mabadiliko yanayofaa.

Wakati mwingine kusanidi seva ili kuendesha hati (kama vile Perl) kwa usahihi inaweza kuwa ngumu. Katika DOS au Windows, hutaweza kubainisha mkalimani kwenye mstari wa kwanza wa hati, kama ilivyo kwa UNIX. Baadhi ya seva zina usanidi uliofafanuliwa awali ili kuhusisha viendelezi fulani vya jina la faili na mkalimani. Kwa mfano, seva nyingi za Wavuti za Windows huchukulia kuwa faili zinazoishia kwa .pl ni hati za Perl.

Ikiwa seva haitekelezi aina hii ya uhusiano wa faili, unaweza kufafanua faili ya bechi ya kifurushi ambayo huita mkalimani na hati. Kama ilivyo kwa seva ya UNIX, usisakinishe mkalimani katika saraka ya cgi-bin au saraka yoyote inayoweza kufikiwa na Wavuti.

Kufunga CGI kwenye Macintosh

Chaguo mbili za seva zinazojulikana zaidi za Macintosh ni WebStar StarNine na mtangulizi wake MacHTTP. Zote mbili zinatambua CGI kwa kiendelezi cha jina la faili.

MacHTTP inaelewa viendelezi viwili tofauti: .cgi na .acgi, ambayo inasimamia CGI isiyo ya kawaida. Programu za kawaida za CGI zilizosakinishwa kwenye Macintosh (yenye kiendelezi cha .cgi) zitaweka seva ya Wavuti katika hali ya shughuli nyingi hadi CGI ikamilishe kufanya kazi, na kusababisha seva kusimamisha maombi mengine yote. Asynchronous CGI, kwa upande mwingine, inaruhusu seva kukubali maombi hata wakati inafanya kazi.

Msanidi wa CGI Macintosh anayetumia mojawapo ya seva hizi za Wavuti lazima, ikiwezekana, atumie kiendelezi cha .acgi badala ya kiendelezi cha .cgi. Inapaswa kufanya kazi na programu nyingi za CGI; ikiwa haifanyi kazi, badilisha jina la programu kuwa .cgi.

Utekelezaji wa CGI

Mara baada ya kusakinisha CGI, kuna njia kadhaa za kuitekeleza. Ikiwa programu yako ya CGI ni programu ya kutoa tu, kama vile programu ya Hello,World!, basi unaweza kuitekeleza kwa kufikia URL yake.

Programu nyingi huendesha kama programu ya seva kwenye fomu ya HTML. Kabla ya kujifunza jinsi ya kupata taarifa kutoka kwa fomu hizi, kwanza soma utangulizi mfupi kuhusu kuunda fomu hizo.

Mafunzo ya haraka juu ya fomu za HTML

Lebo mbili muhimu zaidi katika fomu ya HTML ni

Na . Unaweza kuunda aina nyingi za HTML ukitumia lebo hizi mbili pekee. Katika sura hii, utachunguza lebo hizi na kikundi kidogo cha aina au sifa zinazowezekana. . Mwongozo kamili na kiungo cha fomu za HTML kiko katika Sura ya 3, HTML na Fomu.

Lebo

Lebo hutumika kubainisha ni sehemu gani ya faili ya HTML inafaa kutumika kwa maelezo yaliyowekwa na mtumiaji. Hii inarejelea jinsi kurasa nyingi za HTML zinavyoita Mpango wa CGI. Sifa za lebo hubainisha jina la programu na eneo - iwe ndani au kama URL kamili, aina ya usimbaji unaotumika, na mbinu ya kuhamisha data inayotumiwa na programu.

Mstari unaofuata unaonyesha vipimo vya lebo :

< ACTION FORM = "url" METHOD = ENCTYPE = "..." >

Sifa ya ENCTYPE haina jukumu maalum na kwa kawaida haijumuishwi kwenye lebo . maelezo ya kina kuhusu lebo ya ENCTYPE imetolewa katika Sura ya 3. Njia moja ya kutumia ENCTYPE imeonyeshwa katika Sura ya 14, "Viendelezi vyenye Chapa."

Sifa ya ACTION inarejelea URL ya programu ya CGI. Mtumiaji akishajaza fomu na kutoa taarifa, taarifa zote husimbwa na kuhamishiwa kwa mpango wa CGI. Mpango wa CGI yenyewe hutatua tatizo la kusimbua na kusindika habari; Kipengele hiki kinajadiliwa katika "Kukubali Ingizo kutoka kwa Kivinjari," baadaye katika sura hii.

Hatimaye, sifa ya METHOD inaeleza jinsi mpango wa CGI unapaswa kupokea pembejeo. Mbinu hizo mbili, GET na POST, hutofautiana katika jinsi zinavyopitisha habari kwenye programu ya CGI. Zote mbili zinajadiliwa katika "Kukubali Ingizo kutoka kwa Kivinjari."

Ili kivinjari kiruhusu ingizo la mtumiaji, lebo zote za fomu na taarifa lazima zizungukwe na lebo . Usisahau lebo ya kufunga

ili kuonyesha mwisho wa fomu. Huwezi kuwa na fomu ndani ya fomu, ingawa unaweza kuunda fomu ambayo inakuwezesha kuwasilisha vipande vya habari katika maeneo tofauti; kipengele hiki kimejadiliwa kwa kina katika Sura ya 3.

Lebo

Unaweza kuunda pau za kuingiza maandishi, vitufe vya redio, visanduku vya kuteua, na njia nyinginezo za kukubali ingizo kwa kutumia lebo . KATIKA sehemu hii mashamba pekee yanazingatiwa uingizaji wa maandishi. Ili kutekeleza uwanja huu, tumia lebo na sifa zifuatazo:

< INPUT TYPE=text NAME = "... " VALUE = "... " SIZE = MAXLENGTH = >

NAME ni jina la ishara la kigezo ambacho kina thamani iliyowekwa na mtumiaji. Ukijumuisha maandishi katika sifa ya VALUE, maandishi hayo yatawekwa kama chaguo-msingi katika sehemu ya uingizaji maandishi. Sifa ya SIZE hukuruhusu kubainisha urefu wa mlalo wa sehemu ya ingizo jinsi itakavyoonekana kwenye dirisha la kivinjari. Hatimaye, MAXLENGTH anafafanua idadi ya juu herufi ambazo mtumiaji anaweza kuingia kwenye uwanja. Tafadhali kumbuka kuwa VALUE, SIZE, MAXLENGTH sifa ni za hiari.

Uwasilishaji wa Fomu

Ikiwa una sehemu moja tu ya maandishi ndani ya fomu, mtumiaji anaweza kuwasilisha fomu kwa kuandika tu maelezo kwenye kibodi na kubonyeza Enter. Vinginevyo, lazima kuwe na njia nyingine kwa mtumiaji kuwasilisha taarifa. Mtumiaji huwasilisha maelezo kwa kutumia kitufe cha wasilisha chenye lebo ifuatayo:

< Input type=submit >

Lebo hii huunda kitufe cha Wasilisha ndani ya fomu yako. Mtumiaji anapomaliza kujaza fomu, anaweza kuwasilisha yaliyomo kupitia Anwani ya URL, imebainishwa ACTION sifa fomu kwa kubofya kitufe cha Wasilisha.

Inakubali ingizo kutoka kwa kivinjari

Hapo juu kulikuwa na mifano ya kurekodi programu ya CGI ambayo hutuma habari kutoka kwa seva hadi kwa kivinjari. Kwa kweli, programu ya CGI inayotoa data pekee haina programu nyingi (baadhi ya mifano imetolewa katika Sura ya 4). Uwezo muhimu zaidi wa CGI ni kupokea habari kutoka kwa kivinjari - kipengele kinachopa Wavuti tabia yake ya mwingiliano.

Programu ya CGI inapokea aina mbili za habari kutoka kwa kivinjari.

  • Kwanza, inapata vipande mbalimbali vya habari kuhusu kivinjari (aina yake, nini inaweza kuona, mwenyeji wa jeshi, na kadhalika), seva (jina lake na toleo, bandari yake ya utekelezaji, na kadhalika), na programu ya CGI. yenyewe ( jina la programu na mahali iko). Seva inatoa habari hii yote kwa programu ya CGI kupitia vigeu vya mazingira.
  • Pili, programu ya CGI inaweza kupokea pembejeo ya mtumiaji. Taarifa hii, baada ya kusimbwa na kivinjari, inatumwa ama kupitia kigeu cha mazingira (GET mbinu) au kupitia pembejeo ya kawaida (stdin - POST mbinu).

Vigezo vya Mazingira

Ni muhimu kujua ni anuwai gani ya mazingira inapatikana kwa programu ya CGI, wakati wa mafunzo na kwa utatuzi. Jedwali 2.2 linaorodhesha baadhi ya vigeu vya mazingira vinavyopatikana vya CGI. Unaweza pia kuandika programu ya CGI ambayo hutoa vigeu vya mazingira na maadili yao kwa kivinjari cha Wavuti.

Jedwali 2.2. Baadhi ya Vigeu Muhimu vya Mazingira ya CGI Mazingira Yanayobadilika Madhumuni REMOTE_ADDR Anwani ya IP ya mashine ya mteja. REMOTE_HOST Mpangishi wa mashine ya mteja. HTTP _ACCEPT Inaorodhesha aina za data za MIME ambazo kivinjari kinaweza kufasiri. HTTP _USER_AGENT Maelezo ya kivinjari (aina ya kivinjari, nambari ya toleo, mfumo wa uendeshaji, na kadhalika.). REQUEST_METHOD GET au POST. CONTENT_LENGTH Ukubwa wa ingizo ukitumwa kupitia POST. Ikiwa hakuna pembejeo au ikiwa mbinu ya GET inatumiwa, parameter hii haijafafanuliwa. QUERY_STRING Ina taarifa ya ingizo inapopitishwa kwa kutumia mbinu ya GET. PATH_INFO Inaruhusu mtumiaji kubainisha njia kutoka kwa safu ya amri ya CGI (kwa mfano, http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Tafsiri njia ya jamaa katika PATH_INFO kwa njia halisi kwenye mfumo.

Kuandika programu ya CGI inayoonyesha vigeu vya mazingira, unahitaji kujua jinsi ya kufanya mambo mawili:

  • Fafanua anuwai zote za mazingira na maadili yao yanayolingana.
  • Chapisha matokeo kwa kivinjari.

Tayari unajua jinsi ya kufanya operesheni ya mwisho. Katika Perl, anuwai za mazingira huhifadhiwa katika safu ya ushirika %ENV, ambayo inaletwa kwa jina. kutofautiana kwa mazingira. Orodha ya 2.3 ina env.cgi, programu ya Perl inayotimiza lengo letu.

Kuorodhesha 2.3. Mpango wa Perl, env.cgi, ambayo hutoa anuwai ya mazingira ya CGI.

#!/usr/local/bin/perl print "Content-type: text/html\n\n"; chapa" \n"; chapisha" Mazingira ya CGI\n"; chapisha"\n"; chapisha" \n"; chapisha"

Mazingira ya CGI

\n"; foreach $env_var (funguo %ENV) ( chapisha " $env_var= $ENV($env_var)
\n"; ) chapisha "

\n";

Mpango kama huo unaweza kuandikwa katika C; kanuni kamili iko kwenye Orodha ya 2.4.

Kuorodhesha 2.4. Env.cgi.c katika C. /* env.cgi.c */ #include char ya nje **mazingira; int main() ( char **p = environ; printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); chapisha(" Mazingira ya CGI\n"); chapisha("\n"); chapisha(" \n"); chapisha("

Mazingira ya CGI

\n"); huku(*p != NULL) printf("%s
\n",*p++); printf("

\n");)

PATA au POST?

Kuna tofauti gani kati ya njia za GET na POST? GET hupitisha mfuatano wa ingizo uliosimbwa kupitia utofauti wa mazingira wa QUERY_STRING, huku POST inaupitisha kupitia stdin. POST ndiyo njia inayopendekezwa, haswa kwa fomu zilizo na kiasi kikubwa data, kwa sababu hakuna vikwazo kuhusu kiasi cha habari kutumwa, na wakati GET mbinu kiasi cha nafasi ya mazingira ni mdogo. GET ina, hata hivyo, hakika mali muhimu; hii imeelezewa kwa kina katika Sura ya 5, Ingizo.

Ili kubainisha ni mbinu ipi inatumika, mpango wa CGI hukagua utofauti wa mazingira REQUEST_METHOD, ambao utawekwa kuwa ama GET au POST. Ikiwekwa kuwa POST, urefu wa maelezo yaliyosimbwa huhifadhiwa katika utofauti wa mazingira CONTENT_LENGTH.

Ingizo lenye Msimbo

Mtumiaji anapowasilisha fomu, kivinjari kwanza husimba maelezo kabla ya kuyatuma kwa seva na kisha kwa programu ya CGI. Unapotumia lebo , kila shamba limepewa jina la mfano. Thamani iliyoingizwa na mtumiaji inawakilishwa kama thamani ya kutofautisha.

Kuamua hili, kivinjari hutumia vipimo vya usimbaji vya URL, ambavyo vinaweza kuelezewa kama ifuatavyo:

  • Hutenganisha sehemu tofauti na ampersand (&).
  • Hutenganisha jina na maadili kwa ishara sawa (=), na jina upande wa kushoto na thamani upande wa kulia.
  • Hubadilisha nafasi kwa alama za kuongeza (+).
  • Hubadilisha herufi zote "zisizo za kawaida" kwa ishara ya asilimia (%) ikifuatiwa na herufi yenye tarakimu mbili msimbo wa heksadesimali ishara.

Mfuatano wako wa mwisho uliosimbwa utakuwa sawa na ufuatao:

Name1=value1&name2=value2&name3=value3 ...

Kumbuka: Maelezo ya usimbaji wa URL yanapatikana katika RFC1738.

Kwa mfano, tuseme ulikuwa na fomu iliyouliza jina na umri. Msimbo wa HTML ambao ulitumiwa kuonyesha fomu hii umeonyeshwa katika Orodha ya 2.5.

Kuorodhesha 2.5. Msimbo wa HTML wa kuonyesha jina na fomu ya umri.

Jina na Umri

Ingiza jina lako:

Weka umri wako:



Wacha tuseme mtumiaji anaingia Joe Schmoe kwenye uwanja wa jina na 20 kwenye uwanja wa umri. Ingizo litasimbwa katika mfuatano wa ingizo.

Jina=Joe+Schmoe&age=20

Ingizo la kuchanganua

Ili maelezo haya yawe ya manufaa, unahitaji kutumia taarifa juu ya kitu ambacho kinaweza kutumiwa na programu zako za CGI. Mikakati ya pembejeo ya uchanganuzi imefunikwa katika Sura ya 5. Kwa mazoezi, hutawahi kufikiria jinsi ya kuchanganua pembejeo, kwa sababu wataalam kadhaa tayari wameandika maktaba ambayo hufanya uchanganuzi, kupatikana kwa kila mtu. Maktaba mbili kama hizo zimewasilishwa katika sura hii katika sehemu zifuatazo: cgi -lib.pl kwa Perl (iliyoandikwa na Steve Brenner) na cgihtml kwa C (iliyoandikwa na mimi).

Lengo la jumla la maktaba nyingi zilizoandikwa katika lugha mbalimbali ni kuchanganua mfuatano uliosimbwa na kuweka jozi za jina na thamani katika muundo wa data. Kuna faida dhahiri ya kutumia lugha ambayo ina miundo ya data iliyojengewa ndani kama Perl; hata hivyo, maktaba nyingi za lugha ngazi ya chini aina C na C++ inahusisha kutekeleza miundo na taratibu za data.

Si lazima kufikia ufahamu kamili wa maktaba; ni muhimu zaidi kujifunza jinsi ya kuzitumia zana ili kurahisisha kazi ya mtayarishaji programu wa CGI.

Cgi-lib.pl

Cgi-lib.pl hutumia safu shirikishi za Perl. &ReadParse chaguo za kukokotoa huchanganua mfuatano wa ingizo na kuingiza kila jozi ya jina/thamani kwa jina. Kwa mfano, sambamba Kamba za Perl, inayohitajika kusimbua kamba ya ingizo ya "jina/umri" iliyowasilishwa tu itakuwa

&SomaChanganua(*ingizo);

Sasa, ili kuona thamani iliyoingizwa kwa "jina", unaweza kufikia safu ya ushirika$input("jina"). Vile vile, ili kufikia thamani ya "umri", unahitaji kuangalia kutofautiana $ pembejeo ("umri").

Cgihtml

C haina muundo wowote wa data uliojengwa, kwa hivyo cgihtml hufanya mambo yake orodha mwenyewe miunganisho ya matumizi na taratibu zako za uchanganuzi za CGI. Hii inafafanua muundo wa aina ya kiingilio kama ifuatavyo:

Muundo wa Typedef ( Char *jina; Char *value; ) Entrytype;

Ili kuchanganua kamba ya kuingiza "jina/umri" katika C kwa kutumia cgihtml, ifuatayo inatumika:

/*tangaza orodha iliyounganishwa, inayoitwa pembejeo */ Orodha ya pembejeo; /* changanua ingizo na eneo katika orodha iliyounganishwa */ read_cgi_input(&input);

Ili kufikia maelezo ya umri, unaweza kuchanganua orodha mwenyewe au kutumia chaguo la kukokotoa la cgi _val().

#pamoja na #pamoja na Chaji *umri = malloc(sizeof(char)*strlen(cgi_val(pembejeo, "umri")) + 1); Strcpy(umri, cgi_val(pembejeo, "umri");

Thamani ya "umri" sasa imehifadhiwa katika mfuatano wa umri.

Kumbuka: Badala ya kutumia safu rahisi(kama umri wa malipo;), ninafanya usambazaji wa nguvu nafasi ya kumbukumbu kwa umri wa kamba. Ingawa hii hufanya programu kuwa ngumu zaidi, hata hivyo ni muhimu kutoka kwa mtazamo wa usalama. Hii inajadiliwa kwa undani zaidi katika Sura ya 9.

Programu rahisi ya CGI

Utaandika programu ya CGI inayoitwa nameage.cgi ambayo inashughulikia fomu ya jina/umri. Usindikaji wa data (kile kawaida huita "vitu") ni mdogo. Nameage.cgi huamua tu ingizo na kuonyesha jina na umri wa mtumiaji. Ingawa hakuna matumizi mengi ya zana kama hii, inaonyesha kipengele muhimu zaidi cha programu ya CGI: pembejeo na matokeo.

Unatumia fomu iliyo hapo juu, kuita sehemu za "jina na umri". Usijali kuhusu uimara na ufanisi bado; kutatua tatizo lililopo kwa njia rahisi zaidi. Suluhisho za Perl na C zinaonyeshwa kwenye Orodha 2.6 na 2.7, mtawalia.

Kuorodhesha 2.6. Jina.cgi katika Perl

#!/usr/local/bin/perl # nameage.cgi inahitaji "cgi-lib.pl" &ReadParse(*input); chapisha "Aina ya Yaliyomo: maandishi/html\r\n\r\n"; chapa" \n"; chapisha" Jina na Umri\n"; chapisha"\n"; chapisha" \n"; chapisha "Hujambo, " . $input("jina") . ". Una\n"; chapisha $input("age") . " umri wa miaka.

\n"; chapisha"

\n";

Kuorodhesha 2.7. nameage.cgi katika C

/* jina.cgi.c */ #jumuisha #jumuisha "cgi-lib.h" int main() ( llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); chapisha(" Jina na Umri\n"); chapisha("\n"); chapisha(" \n"); printf("Hujambo, %s. Wewe ni\n",cgi_val(ingizo,"jina")); printf("miaka %s.

\n",cgi_val(ingizo,"umri")); printf("

\n");)

Tafadhali kumbuka kuwa programu hizi mbili ni karibu sawa. Zote zina kanuni za uchanganuzi ambazo huchukua mstari mmoja tu na huchakata ingizo zima (shukrani kwa taratibu zinazolingana za maktaba). Matokeo kimsingi ni toleo lililorekebishwa la programu yako kuu ya Hello, World!.

Jaribu kuendesha programu kwa kujaza fomu na kubofya kitufe cha Wasilisha.

Mkakati wa jumla wa programu

Sasa unajua kanuni zote za msingi zinazohitajika kwa upangaji programu wa CGI. Baada ya kuelewa jinsi CGI inapokea maelezo na jinsi inavyorejesha kwa kivinjari, ubora halisi wa bidhaa yako ya mwisho unategemea uwezo wako wa jumla wa kupanga programu. Yaani, unapopanga CGI (au kitu chochote, kwa jambo hilo), kumbuka sifa zifuatazo:

  • Urahisi
  • Ufanisi
  • Uwezo mwingi

Sifa mbili za kwanza ni za kawaida: jaribu kufanya nambari yako isomeke na kwa ufanisi iwezekanavyo. Usahihishaji hutumika zaidi kwa programu za CGI kuliko programu zingine. Unapoanza kukuza yako programu mwenyewe CGI, utajifunza kwamba kuna maombi kadhaa ya msingi ambayo kila mtu anataka kufanya. Kwa mfano, moja ya kazi za kawaida na dhahiri za programu ya CGI ni kuchakata fomu na kutuma matokeo kwa barua pepe kwa mpokeaji mahususi. Unaweza kuwa na fomu nyingi tofauti kuchakatwa, kila moja ikiwa na mpokeaji tofauti. Badala ya kuandika programu ya CGI kwa kila fomu ya mtu binafsi, unaweza kuokoa muda kwa kuandika zaidi mpango wa jumla CGI ambayo inafanya kazi kwa aina zote.

Kwa kuangazia vipengele vyote vya msingi vya CGI, nimekupa maelezo ya kutosha ili kuanza na upangaji programu wa CGI. Walakini, ili kuwa msanidi mzuri wa CGI, unahitaji kuwa na ufahamu wa kina wa jinsi CGI inavyowasiliana na seva na kivinjari. Sehemu iliyobaki ya kitabu hiki inashughulikia kwa kina masuala ambayo yametajwa kwa ufupi katika sura hii, pamoja na mkakati wa ukuzaji wa matumizi na faida na mapungufu ya itifaki.

Muhtasari

Sura hii ilileta kwa ufupi misingi ya upangaji programu ya CGI. Unaunda pato kwa kufomati data yako kwa usahihi na kuchapisha kwa stdout. Kupokea ingizo la CGI ni ngumu zaidi kwa sababu lazima ichanganuliwe kabla ya kutumika. Kwa bahati nzuri, maktaba kadhaa tayari zipo zinazofanya uchanganuzi.

KWA kwa wakati huu Unapaswa kupata mpangilio wa programu za CGI kwa urahisi. Salio la kitabu hiki linaenda kwa undani zaidi kuhusu vipimo, vidokezo, na mikakati ya upangaji kwa matumizi ya hali ya juu zaidi na changamano.