Piiramatu kaubanduse cgi. Selge e-kaubandus. Üldine programmeerimisstrateegia

E-kaubandus arusaadavas vene keeles. Kuidas äri Internetis töötab?

Viimasel ajal tuleb üha rohkem ette veebikaubandusega seotud projekte. Seda suunda uurides ei leidnud ma protsessi üldist ja arusaadavat kirjeldust. Seetõttu otsustasin teha midagi petulehe sarnast, millele saate alati viidata, et mõista protseduuri sellises valdkonnas nagu e-kaubandus.

Teen kohe broneeringu, et keskendusin protsessidele ja kanalitele, mis aitavad kliente tuua.

E-kaubandus: mis see on?

Määratlused sisse lülitatud erinevatest allikatest rääkige midagi kaupade või teenuste Interneti kaudu müümise kohta. Lihtsamalt öeldes on e-kaubandus igasugune tegevus võrgus, kus ilmub raha.

Ostlemine, müük, kindlustus, pangandus, elektrooniline raha, kõik on siin. Võtke see, allkirjastage see.

Sihtmärgist

Probleemi mõistmiseks teen ettepaneku alustada teekonda päris lõpust. Mis on mis tahes ettevõtte eesmärk? See on õige, teenige raha. Niisiis, kujutage ette mis tahes toodet, näiteks silikoonsokke. Miks mitte!

Võtsin esimese asjana, mis pähe tuli, selgus, et seal on see ...

Meie ülesanne on nende sokkide pealt raha teenida. Me mõtleme Internetile. Hmm... miks mitte "kärpida" saiti ja nii läheb müük, lihtsalt hoidke mind Maldiividel! Kuid mitte kõik pole nii lihtne.

Mulle väga meeldib joonistada. See aitab mõista erinevaid protsesse. Joonistame?!

Siiani näeb meie mudel välja selline. Võtame sokid, paneme need internetti ja saame raha. See on lihtsalt suurepärane! Silmad põlevad, peopesad higistavad ja ma tahan juba selle äri ette võtta. Kuid peate tegema veebisaidi või platvormi müügiks?

Müüa veebisait või platvorm

Sööma erinevaid lahendusi et paigutada oma toode World Wide Webi. Saate luua oma veebisaidi või kasutada kolmandate osapoolte saite (grupid, sotsiaalvõrgustike lehed, teadetetahvlid jne). Peatume kohapeal.

Nad tellisid veebilehe, võtsid valmis malli või lõid selle ise konstruktori abil (CMS-i saab googeldada), vahet pole. Järgmiseks asetati hunnik silikoonsokke erinevad tüübid ja õnnelik.

Andke andeks, et ma lugemist katkestasin. Liituge minu telegrammi kanaliga. Värsked teadaanded artiklite, digitaalsete toodete arendamise ja kasvuhäkkide kohta, kõik on olemas. Ootan sind! Jätkame...

Maksesüsteemid

Aga selleks, et inimene saaks sinu käest osta siin ja praegu, on vaja maksesüsteeme näpistada. See on omamoodi teenus, mis võimaldab sooritada veebis oste läbi: pangakaardid, internetiraha, mobiiltelefonid ja hunnik muid asju. Selleks peate jagama teatud protsendi tehingutest, kuid sel viisil lihtsustate oma elu oluliselt.

Valige endale sobiv teenus. Kuskil on suurem protsent ja kuskil tellija või midagi muud. Lihtsalt uurige küsimust veidi. Pane endale vajalik kood saidile, linki kõik tehingud oma kaardikontoga ja voila!

See näib olevat kõik. Seal on veebisait, tootekaardid ja isegi "osta" nupp töötab, kuid midagi on puudu ... Pole klientide voogu, kes ostavad.

Kliendivood

Kus: CAC = uue kliendi hankimise kulu. MCC (marketingcampaignccosts) = klientide hankimiseks (kuid mitte hoidmiseks) tehtavate turunduskulude kogukulu. W (palk) = Turundajate ja müügijuhtide palk. S (tarkvara) = reklaamis ja müügis kasutatava tarkvara maksumus (nt müügiplatvorm, turunduse automatiseerimine, A/B testimine, analüütikateenused jne). PS (professionaalsed teenused) = kulu professionaalsed teenused antakse turundus- ja müügiosakondadele (disain, nõustamine jne). O (muu) = muud turundus- ja müügiosakondadega seotud üldkulud. CA (customersacquired) = hangitud klientide koguarv.

Aga ei tohi unustada ka kliendi kvaliteeti, siin aitab LTV.

Olulised näitajad: LTV

Reaalajas ajaväärtus, kliendi elutsükkel, on veel üks e-kaubanduse mõõdik, mida arvestada. See näitab, kui palju tulu üks klient keskmiselt toob. Arvutamisel on erinevaid lähenemisi, üheks täpsemaks valisin tegeliku kasumi.

See on lihtsalt iga üksiku kliendi ostuajaloo kogutulu summa. Lisa tehingule N kõigi kliendi ostude (tehingute) summa, kus tehing N on viimane ost, mille klient teie ettevõttes tegi. Kui teil on juurdepääs kõikidele klienditehingute andmetele, saate selle Exceli abil hõlpsasti arvutada.

LTV = (tehing 1 + tehing 2 + tehing 3… + tehing N) x kasumiosa tulust.

LTV arvutamine puhastulu põhjal näitab lõppkokkuvõttes tegelikku kasumit, mida klient teie ettevõttele toob. Siin võetakse arvesse klienditeeninduse maksumus, säilituskulud, soetusmaksumus jne. Tulemuseks on terve kompleks arvutusi, mis põhinevad individuaalsetel andmetel. Ühe kliendi aja jooksul teenitud kumulatiivne kasum annab teile täpse ülevaate teie klientide senisest kasumlikkusest.

Teisi lähenemisviise leiate aadressilt.

Olulised mõõdikud: CAC ja LTV suhe

Ettevõtte elujõulisuse mõistmiseks on väga oluline vaadata kahe mainitud CAC:LTV mõõdiku suhet.

  • Vähem kui 1:1 – olete teel pankroti poole.
  • 1:1 – kaotate raha iga meelitatud kliendi pealt.
  • 1:2 – Kõlab hästi, kuid tundub, et te ei investeeri piisavalt ja võiksite kiiremini kasvada. Käivitage agressiivsemaid klientide hankimise kampaaniaid ja saavutage suhted peaaegu 1:3.
  • 1:3 – ideaalne suhe. Teil on edukas äri ja tugev ärimudel.

Olulised näitajad: ROI-d pole unustatud

Nagu eespool arutlesime, on e-kaubanduses vaja selgelt aru saada, kas hankimiskanali kasutamine on tulus või mitte. Lisaks LTV-le ja CAC-ile on veel üks oluline näitaja, see on ROI. See näitab, kas teie investeering tasus end ära, meie puhul reklaami. See on. kui palju 1 investeeritud rubla meile lõpuks tõi.

Arvutamiseks kasutatakse väga lihtsat valemit:

kus „Kampaania tulu” on kanali tulu ja teie toote maksumuse vahe. Ja kasumi arvutamiseks lahutage rohkem reklaamikulusid.

Seega näeks üksikasjalikum valem välja selline:

ROI = (kanali tulu – kulu) – reklaamikulud / reklaamikulud x 100%

Lugege üksikasjalikumat näidet koos arvutusega. Tegelikult on see lihtne valem paigutatud kõik samasse Exceli tabelisse, kus kõik arvutatakse automaatselt.

Kõik kolm näitajat, mida oleme analüüsinud, on e-kaubanduses olulised. Igaüks neist võimaldab teil leida oma voogudes kitsaskohti ja nendega töötada. Just neis peitub ettevõtte kasvupotentsiaal. Lisasin meie sokkidega mudelile veel veidi.

Kõike pole võimalik ühte materjali mahutada ja kes seda nii kaua loeb? Hiljem teen eraldi juhendi e-kaubanduse nüanssidest, mis võivad müüki segada.

Kokku

Üldiselt on teil nüüd Interneti-kaubandusest või e-kaubandusest üldine arusaam. Lisaks, nagu öeldakse: "Kurat on detailides." Uurige iga kanalit eraldi, arvutage tulemusnäitajad ja otsige üksikasjadest uusi teadmisi. Internetimüük teile, jah, rohkemgi! Ja veel üks asi minu poolt.

Jah, ma oleks peaaegu unustanud, head uut aastat teile, kallid lugejad! Soovin teile tuleval aastal suuri võite ja saavutusi!

Veebipoodide omanikud tunnevad "elektroonilise kaubanduse" mõistet omal nahal, kindlasti teavad nad vastust küsimusele "e-kaubandus - mis see on". Kui aga olemusest aru saada, siis tekib palju nüansse ja see mõiste omandab laiema tähenduse.

E-kaubandus: mis see on?

Üldkontseptsioon on järgmine: e-kaubanduse all mõistetakse teatud lähenemist äritegevusele, mis hõlmab mitmete toimingute kaasamist, mis kasutavad digitaalset andmeedastust kaupade tarnimisel või teenuste/tööde osutamisel, sealhulgas Interneti kaudu.

Seega on tegemist igasuguse äritehinguga, mis tehakse elektroonilisi sidevahendeid kasutades.

Töö skeem on korraldatud järgmiselt:

  • igaüks võib olla blogija või mõni muu oma Interneti-lehe omanik) registreerub sellesse süsteemi;
  • saab oma lingi;
  • paneb oma veebilehele spetsiaalse koodi - ilmub e-kaubanduse partnerite võrgustiku valitud ametliku partneri reklaam;
  • jälgib veebisaidi konversiooni;
  • teenib teatud protsendi iga sidusettevõtte lingil klõpsanud külastaja ostu eest.

WP e-kaubandus

Suur hulk inimesi on praegu e-kaubanduse vastu kirglik, eelkõige soovist luua oma veebisait, ainulaadne veebipood, kus müüa oma tooteid. Selle kasvava nõudluse rahuldamiseks on arendajad keskendunud e-kaubanduse mallide (e-kaubanduse mallide) loomisele. Mis see on, kaalume edasi.

Üks selline mallide näide on WordPressi e-kaubandus. See on WordPressi (üks kuulsamaid veebiressursside haldussüsteeme, mis on mõeldud eelkõige ajaveebi loomiseks ja korraldamiseks) ostukorvi pistikprogramm. Seda pakutakse täiesti tasuta ja see võimaldab saidi külastajatel Interneti-lehel oste sooritada.

Teisisõnu võimaldab see plugin luua veebipoe (WordPressi baasil). Sellel e-kaubanduse pistikprogrammil on kõik olemas vajalikud tööriistad, seaded ja valikud, mis vastavad tänapäevastele vajadustele.

Andover, Massachusetts, 19. november 2003

The Commerce Group, Inc. (NYSE: CGI), Massachusettsi suurim erasõidukite kindlustuse autor ja CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), juhtiv infotehnoloogia ja äritöötlusteenuste pakkuja, teatas täna kuueaastase äriprotsesside allhanke (BPO) lepingu uuendamise allkirjastamisest, mille väärtus on 35 miljonit USA dollarit. CGI pakub Massachusettsi era- ja kommertsautoliinidele täielikke poliitikatöötlusteenuseid, samuti CGI agentuuriliidese tööriista CollaborativeEdge, rakenduste tuge ja hooldust, regulatiivset tuge, süsteeminõustamist ja dokumendihaldusteenuseid.

Gerald Fels, Commerce Groupi tegevasepresident ja finantsjuht, märkis: "Massachusettsi juhtiva erasõiduautode pakkujana on meie eesmärk pakkuda oma agentidele ja töötajatele teenuseid, mis aitavad neil oma kõrgeimal tasemel toimida. Aastate jooksul oleme arendanud tugevaid suhteid CGI-ga. Nende süsteem on töökindel ja täpne ning nende meeskond on meie sisemiste töötlemissüsteemidega väga tuttav. See on meie jaoks oluline."

Serge Lapalme, Cgi äriteenuste kindlustuse president Lisas: "Me jätkame viisakoostööd kaubanduse grupiga, üks kuni 30 aastat. Kaubandusgrupp on jätkuvalt üks MEIE väärtuslikest äripartneritest ja on MEIE EDU jaoks strateegiline. Aidates OMA KLIENDI KLIENDI TEHALUSTAMISEL EDASILISELT es Millal ja mis on mõttekas. MEIE meeskond tunneb kindlustussektorit ja riigi ainulaadset reguleerivat keskkonda Tamatlys ja AS ASULTAR Uickis, et kohandada olemasolevaid lahendusi selle pidevalt areneva sektoriga.

Teave The Commerce Group, Inc. kohta

Kindlustusvaldusfirma Commerce Group, Inc. peakorter asub Massachusettsi osariigis Websteris. Commerce Groupi vara- ja õnnetusjuhtumikindlustuse tütarettevõtete hulka kuuluvad The Commerce Insurance Company ja Citation Insurance Company Massachusettsis, Commerce West Insurance Company Californias ja American Commerce Insurance Company Ohios. Oma tütarettevõtete kombineeritud kindlustustegevuse kaudu on Commerce Group 22. kohal isiklike autode kindlustuskontserni M järgi. Parim, põhineb 2002. aasta otsekirjutatud lisatasude teabel.

CGI kohta
1976. aastal asutatud CGI on oma töötajate arvu põhjal suuruselt viies sõltumatu infotehnoloogiateenuste ettevõte Põhja-Ameerikas. CGI-s ja sellega seotud ettevõtetes töötab 20 000 spetsialisti. CGI aastane tulude jooksevmäär on praegu 2,8 miljardit CDN dollarit (1,9 miljardit USA dollarit) ja 30. septembril 2003 oli CGI tellimuste maht 12,3 miljardit CDN dollarit (9,1 miljardit USA dollarit). CGI pakub täielikku IT- ja äriprotsessiteenuste kliente kogu maailmas Kanadas, Ameerika Ühendriikides ja Euroopas asuvatest kontoritest. CGI aktsiad on noteeritud TSX-il (GIB.A) ja NYSE-l (GIB) ning on kantud TSX 100 koondindeksisse, samuti S&P/TSX Kanada infotehnoloogia ja Kanada keskmise kapitali indeksisse Veebisait: .

Tänu World Wide Webile saab peaaegu igaüks anda Internetis teavet silmale meeldival ja laialdaseks levitamiseks sobival kujul. Olete kahtlemata Internetis surfanud ja muid saite näinud ning nüüdseks teate ilmselt, et hirmutavad akronüümid nagu "HTTP" ja "HTML" on lihtsalt lühendid sõnadest "Web" ja "viis Internetis teavet väljendada". Võib-olla on teil juba Internetis teabe esitamise kogemus.

Internet on osutunud ideaalseks teabe levitamise vahendiks, mida tõendab selle tohutu populaarsus ja tohutu areng. Kui mõned on seadnud kahtluse alla Interneti kasulikkuse ning seostanud selle laialdast arengut ja populaarsust peamiselt reklaamiga, siis Internet on vaieldamatult oluline meedium igasuguse teabe esitamiseks. Lisaks on palju teenuseid, mis pakuvad ajakohast teavet (uudised, ilm, reaalajas spordisündmused) ja teatmematerjale. elektroonilisel kujul, pakutakse ka märkimisväärses koguses erinevat tüüpi andmeid. IRS, kes levitas kogu oma 1995. aasta maksuvorme ja muud teavet veebi kaudu, tunnistas hiljuti, et sai oma veebisaidilt fännikirju. Kes oleks võinud arvata, et IRS saab kunagi fännikirju? Seda mitte sellepärast, et tema sait oli hästi kujundatud, vaid see, et see osutus tõeliselt kasulikuks tööriistaks tuhandete, võib-olla miljonite inimeste jaoks.

Mis teeb veebi ainulaadseks ja nii atraktiivseks teabeteenuseks? Esiteks sellepärast, et see pakub andmetele hüpermeediumiliidest. Mõelge oma arvuti kõvakettale. Tavaliselt väljendatakse andmeid lineaarselt, sarnaselt failisüsteemiga. Näiteks on teil mitu kausta ja iga kausta sees on kas dokumendid või muud kaustad. Veeb kasutab teabe väljendamiseks teistsugust paradigmat, mida nimetatakse hüpermeediaks. Hüperteksti liides koosneb dokumendist ja linkidest. Lingid on sõnad, millel klõpsatakse muude dokumentide vaatamiseks või muud tüüpi teabe leidmiseks. Veeb laiendab hüperteksti mõistet, et hõlmata ka muud tüüpi meediume, nagu graafika, helid, videod (sellest ka nimi "hüpermeedia"). Teksti või graafika esiletõstmine dokumendil võimaldab näha seotud teavet valitud elemendi kohta mis tahes kujul.

Sellest lihtsast ja ainulaadsest teabe esitamise ja levitamise viisist saavad kasu peaaegu kõik, alates akadeemikutest, kes soovivad oma kolleegidega kohe andmeid jagada, kuni ärimeesteni, kes jagavad oma ettevõtte kohta teavet kõigiga. Kuigi teabe andmine on äärmiselt oluline, on viimastel aastatel paljud tundnud, et teabe hankimine on sama oluline.

Kuigi veeb pakub teabe jaoks ainulaadset hüpermeediumiliidest, on palju muid. tõhusaid viise andmete levitamine. Näiteks võrguteenused, nagu failiedastusprotokoll (FTP) ja uudisterühm "Gopher", eksisteerisid ammu enne World Wide Webi tulekut. E-post on olnud Interneti ja enamiku teiste võrkude kaudu suhtlemise ja teabevahetuse peamine vahend peaaegu nende võrkude loomise algusest peale. Miks on Internet muutunud nii populaarseks teabe levitamise viisiks? Interneti multimeediaaspekt on selle enneolematusse edusse käegakatsutavalt kaasa aidanud, kuid selleks, et Internet oleks kõige tõhusam, peab see olema interaktiivne.

Ilma võimaluseta kasutajatelt sisendit vastu võtta ja teavet edastada oleks veeb täiesti staatiline keskkond. Teave oleks saadaval ainult autori määratud vormingus. See kahjustaks üht arvutusvõimalust üldiselt: interaktiivset teavet. Näiteks selle asemel, et sundida kasutajat sirvima mitut dokumenti nii, nagu ta sirviks raamatut või sõnastikku, oleks parem lubada kasutajal tuvastada talle huvi pakkuvad märksõnad. Kasutajad saavad kohandada andmete esitamise viisi, selle asemel, et toetuda sisupakkuja määratletud jäigale struktuurile.

Mõiste "veebiserver" võib olla eksitav, kuna see võib viidata nii füüsilisele masinale kui ka tarkvarale, mida see Interneti-brauseritega suhtlemiseks kasutab. Kui brauser küsib antud veebiaadressi, loob see esmalt Interneti kaudu ühenduse masinaga, saates veebiserveri tarkvarale dokumendipäringu. See tarkvara töötab pidevalt, oodates selliseid päringuid ja vastates vastavalt.

Kuigi serverid saavad andmeid saata ja vastu võtta, siis server ise funktsionaalsust piiratud. Näiteks kõige primitiivsem server saab brauserisse saata ainult taotletud faili. Server tavaliselt ei tea, mida selle või teise lisasisendiga peale hakata. Kui Interneti-teenuse pakkuja ei ütle serverile, kuidas seda lisateavet käsitleda, ignoreerib server tõenäoliselt seda sisendit.

Selleks, et server saaks peale failide otsimise ja Interneti-brauserisse saatmise teha muid toiminguid, peate teadma, kuidas serveri funktsionaalsust laiendada. Näiteks ei saa veebiserver otsida andmebaasist kasutaja sisestatud märksõna alusel ja tagastada mitut sobivat dokumenti, välja arvatud juhul, kui selline võimalus on serverisse mingil viisil programmeeritud.

Mis on CGI?

Common Gateway Interface (CGI) on serveri liides, mis võimaldab serveri funktsionaalsust laiendada. CGI abil saate interaktiivselt töötada kasutajatega, kes külastavad teie saiti. Teoreetilisel tasandil võimaldab CGI laiendada serveri võimet brauserist sisendit sõeluda (tõlgendada) ja kasutaja sisendi põhjal teavet tagastada. Praktilisel tasandil on CGI liides, mis võimaldab programmeerijal kirjutada programme, mis lihtsalt suhtlevad serveriga.

Tavaliselt tuleb serveri võimaluste laiendamiseks serverit ise modifitseerida. See lahendus on ebasoovitav, kuna nõuab Interneti-protokolli võrgu programmeerimise madalama taseme mõistmist. See nõuaks ka serveri lähtekoodi redigeerimist ja uuesti kompileerimist või iga ülesande jaoks kohandatud serveri kirjutamist. Oletame, et tahame laiendada serveri võimalusi nii, et see toimiks veebist e-posti lüüsina, võttes brauserist kasutaja sisendi ja saata selle e-mail teisele kasutajale. Kood tuleks sisestada serverisse, et sõeluda brauserist saadud sisend, saata see teisele kasutajale meiliga ja saata vastus võrguühenduse kaudu brauserisse tagasi.

Esiteks nõuab selline ülesanne juurdepääsu serveri koodile, mis pole alati võimalik.

Teiseks on see keeruline ja nõuab ulatuslikke tehnilisi teadmisi.

Kolmandaks kehtib see ainult konkreetse serveri jaoks. Kui teil on vaja oma server teisele platvormile teisaldada, peate käivitama või vähemalt kulutama palju aega koodi sellele platvormile teisaldamiseks.

Miks CGI?

CGI pakub nendele probleemidele kaasaskantavat ja lihtsat lahendust. CGI-protokoll määratleb standardsel viisil programmide jaoks veebiserveriga suhtlemiseks. Ilma eriteadmisteta on võimalik kirjutada programm mis tahes masinkeeles, mis liidestub ja suhtleb veebiserveriga. See programm töötab kõigi veebiserveritega, mis mõistavad CGI-protokolli.

CGI-suhtlus toimub standardse sisendi ja väljundi abil, mis tähendab, et kui tead, kuidas oma programmeerimiskeelt kasutades andmeid printida ja lugeda, saad kirjutada veebiserveri rakenduse. Peale sisendi ja väljundi sõelumise on CGI-rakenduste programmeerimine peaaegu samaväärne mis tahes muu rakenduse programmeerimisega. Näiteks programmi "Tere, maailm!" programmeerimiseks kasutage vastava sõnumi printimiseks oma keele printimisfunktsioone ja CGI-programmidele määratud vormingut.

Programmeerimiskeele valimine

Kuna CGI on üldine liides, ei piirdu te ühegi konkreetse masinakeelega. Oluline küsimus, mida sageli küsitakse, on see, milliseid programmeerimiskeeli saab CGI programmeerimiseks kasutada? Võite kasutada mis tahes keelt, mis võimaldab teil teha järgmist.

  • printida stdoutile
  • Loe standardsisendist
  • Loe muutuvatest režiimidest

Peaaegu kõik programmeerimiskeeled ja paljud skriptikeeled teevad neid kolme asja ja saate kasutada mõnda neist.

Keeled jagunevad ühte kahest järgmisest klassist: tõlgitud ja tõlgitud. Tõlgitud keel, nagu C või C++, on tavaliselt väiksem ja kiirem, samas kui tõlgitav keel, nagu Perl või Rexx, nõuab mõnikord käivitamisel suure tõlgi laadimist. Lisaks saate levitada binaarkoode (masinakeelde tõlgitud kood) ilma lähtekoodita, kui teie keel on tõlgitav. Tõlgendatud skriptide levitamine tähendab tavaliselt lähtekoodi levitamist.

Enne keele valimist peate esmalt kaaluma oma prioriteete. Peate hindama ühe programmeerimiskeele kiiruse ja tõhususe eeliseid teise programmeerimise lihtsusega. Kui teil on soov õppida mõnda teist keelt, siis selle asemel, et kasutada juba tuttavat keelt, kaaluge hoolikalt mõlema keele eeliseid ja puudusi.

Kaks CGI programmeerimiseks kõige sagedamini kasutatavat keelt on C ja Perl (mõlemad on selles raamatus käsitletud). Mõlemal on selged eelised ja puudused. Perl on väga kõrge tase, ja samal ajal võimas keel, mis sobib eriti hästi sõelumine tekst. Kuigi selle kasutuslihtsus, paindlikkus ja võimsus muudavad selle CGI programmeerimiseks atraktiivseks keeleks, muudab selle suhteliselt suur suurus ja aeglasem töö mõnikord mõne rakenduse jaoks sobimatuks. C-programmid on väiksemad, tõhusamad ja tagavad madalama taseme süsteemi juhtimise, kuid neid on keerulisem programmeerida, neil puuduvad kerged sisseehitatud tekstitöötlusrutiinid ja neid on raskem siluda.

Mis on CGI programmeerimiseks sobivaim keel? See, mida programmeerimise mõttes enda jaoks mugavamaks pead. Mõlemad on CGI-rakenduste programmeerimiseks võrdselt tõhusad ja õigete teekide korral on mõlemal sarnased võimalused. Kui teil on aga raskesti ligipääsetav server, saate kasutada väiksemaid kompileeritud C-programme. Kui teil on vaja kiiresti kirjutada rakendus, mis nõuab palju tekstitöötlust, võite selle asemel kasutada Perli.

Ettevaatust

CGI-rakendustele on mõned olulised alternatiivid. Paljud serverid sisaldavad nüüd API programmeerimist, mis muudab serveri otselaiendite programmeerimise lihtsaks, mitte eraldiseisvatele CGI-rakendustele. API-serverid on tavaliselt tõhusamad kui CGI-programmid. Teised serverid sisaldavad sisseehitatud funktsioone, mis saavad hakkama spetsiaalsete mitte-CGI-üksustega, näiteks andmebaaside sidumisega. Lõpuks saab mõnda rakendust hallata mõne uue kliendipoolse (mitte serveripoolse) tehnoloogiaga, nagu Java. Kas CGI vananeb nii kiirete tehnoloogiamuutuste taustal kiiresti?

Vaevalt. CGI-l on uuemate tehnoloogiate ees mitmeid eeliseid.

  • See on mitmekülgne ja kaasaskantav. Saate kirjutada CGI-rakenduse, kasutades peaaegu iga programmeerimiskeelt mis tahes platvormil. Mõned alternatiivid, näiteks serveri API, piiravad teid teatud keeltega ja neid on palju raskem õppida.
  • On ebatõenäoline, et sellised klienditehnoloogiad nagu Java asendaksid CGI-d, kuna on mõned rakendused, mille jaoks serverirakendused sobivad palju paremini.
  • Paljud CGI-piirangud on HTML- või HTTP-piirangud. Kuna Interneti-standardid üldiselt arenevad, arenevad ka CGI võimalused.

Kokkuvõte

Common Gateway Interface on protokoll, mille kaudu programmid suhtlevad veebiserveritega. CGI mitmekülgsus võimaldab programmeerijatel kirjutada lüüsiprogramme peaaegu igas keeles, kuigi erinevate keeltega on seotud palju kompromisse. Ilma selle võimaluseta oleks interaktiivsete veebilehtede loomine keeruline, parimal juhul vajaks serveri muudatusi ning interaktiivsus oleks enamikule kasutajatele, kes ei ole saidiadministraatorid, ligipääsmatu.

Peatükk 2. Põhitõed

Mõned aastad tagasi lõin Harvardi kolledži jaoks lehe, kus saate nende kohta oma kommentaare esitada. Tol ajal oli Internet noor ja dokumentatsioon napp. Mina, nagu paljud teised, olen CGI programmeerimise õppimisel toetunud kokkuvõtlikule dokumentatsioonile ja teiste loodud programmeerimissüsteemile. Kuigi see uurimismeetod nõudis mõningast otsimist, palju katseid ja tekitas palju küsimusi, oli see väga tõhus. See peatükk on minu varase CGI-ga töötamise vili (muidugi mõne täpsustusega).

Kuigi ühise lüüsi liidese täielik mõistmine ja omandamine võtab veidi aega, on protokoll ise üsna lihtne. Igaüks, kellel on mõned elementaarsed programmeerimisoskused ja tunneb veebi, saab kiiresti õppida üsna keerulisi CGI-rakendusi programmeerima, nagu mina ja teised õppisid paar aastat tagasi.

Selle peatüki eesmärk on esitada CGI põhitõed kõikehõlmavalt, kuigi lühidalt. Iga siin käsitletud kontseptsiooni tutvustatakse üksikasjalikult järgmistes peatükkides. Kuid pärast selle peatükiga tutvumist võite kohe alustada CGI rakenduste programmeerimist. Kui olete sellele tasemele jõudnud, saate õppida CGI läbi ja lõhki, lugedes ülejäänud raamatut või lihtsalt katsetades omal käel.

Saate taandada CGI programmeerimise kahele ülesandele: teabe hankimine veebibrauserist ja teabe saatmine brauserisse. See on üsna intuitiivne, kui olete CGI-rakenduste tavapärase kasutamisega selgeks saanud. Sageli palutakse kasutajal täita vorm, näiteks sisestada oma nimi. Kui kasutaja täidab vormi ja vajutab sisestusklahvi, saadetakse see teave CGI programmi. Seejärel peab CGI programm teisendama selle teabe arusaadavaks, töötlema seda asjakohaselt ja seejärel saatma selle tagasi brauserisse, olgu see siis lihtne kinnitus või mitmeotstarbelise andmebaasiotsingu tulemus.

Teisisõnu nõuab CGI programmeerimine arusaamist, kuidas Interneti-brauserist sisendit saada ja väljundit tagasi saata. See, mis toimub CGI-programmi sisend- ja väljundfaasi vahel, sõltub arendaja eesmärgist. Leiate, et CGI programmeerimise peamine raskus seisneb selles vaheetapis; Kui olete õppinud sisendi ja väljundiga töötama, piisab sellest põhimõtteliselt, et saada CGI arendajaks.

Selles peatükis saate teada CGI sisendi ja väljundi põhimõtteid ning muid põhioskusi, mida vajate CGI kirjutamiseks ja kasutamiseks, sealhulgas selliseid asju nagu HTML-vormide loomine ja CGI-programmide nimetamine. See peatükk hõlmab järgmisi teemasid:

  • Traditsiooniline programm "Tere, maailm!";
  • CGI väljund: teabe tagasisaatmine Interneti-brauseris kuvamiseks;
  • Rakenduse konfigureerimine, installimine ja käitamine. Õpid tundma erinevaid platvorme ja veebiservereid;
  • CGI sisend: veebibrauseri saadetud teabe tõlgendamine. Tutvumine mõne kasuliku programmeerimisteegiga sellise sisendi parsimiseks;
  • Lihtne näide: see hõlmab kõiki selle peatüki õppetunde;
  • Programmeerimisstrateegia.

Selle peatüki olemuse tõttu puudutan mõningaid teemasid vaid kergelt. Ärge muretsege; kõiki neid teemasid käsitletakse teistes peatükkides palju sügavamalt.

Tere, Maailm!

Alustate traditsioonilise sissejuhatava programmeerimisülesandega. Kirjutate programmi, mis kuvab "Tere, maailm!" oma veebibrauseris. Enne selle programmi kirjutamist peate mõistma, millist teavet veebibrauser CGI programmidelt ootab. Samuti peate teadma, kuidas seda programmi käivitada, et seda töös näha.

CGI on keelest sõltumatu, nii et saate seda programmi rakendada mis tahes keeles. Iga keele sõltumatuse demonstreerimiseks kasutatakse siin mitut erinevat keelt. Perlis on programmi "Tere, maailm!" näidatud nimekirjas 2.1.

Loetelu 2.1. Tere, Maailm! Perlis. #!/usr/local/bin/perl # Hello.cgi – minu esimene CGI-programmi väljatrükk "Content-Type: text/html\n\n"; printida" \n";prindi" Tere, Maailm!"; printida"\n";prindi" \n";prindi"

Tere, Maailm!

\n";prindi" \n";

Salvestage see programm nimega hello.cgi ja installige see sobivasse kohta. (Kui te pole kindel, kus see asub, ärge muretsege, selle leiate hiljem selle peatüki jaotisest "CGI-programmi installimine ja käitamine".) Enamiku serverite puhul nimetatakse õiget kataloogi cgi-bin. Nüüd helistage programmile oma veebibrauserist. Enamiku jaoks tähendab see järgmise ühtse ressursiotsija (URL) avamist:

http://hostinimi/katalooginimi/hello.cgi

Hostinimi on teie veebiserveri nimi ja katalooginimi on kataloog, kuhu sisestate hello.cgi (tõenäoliselt cgi-bin).

Tere.cgi poolitamine

Hello.cgi puhul tasub tähele panna mõnda asja.

Esiteks kasutate lihtsaid printimiskäske. CGI programmid ei vaja mingeid spetsiaalseid failideskriptoreid ega väljundkirjeldusi. Väljundi saatmiseks brauserisse printige lihtsalt stdout.

Teiseks pange tähele, et esimese prinditava avalduse sisu (sisutüüp: text/html) ei ilmu teie veebibrauseris. Saate saata brauserisse tagasi mis tahes teavet, mida soovite (HTML-leht, graafika või heli), kuid kõigepealt peate brauserile ütlema, milliseid andmeid te saadate. See rida annab brauserile teada, millist teavet oodata – antud juhul HTML-lehte.

Kolmandaks, programmi nimi on hello.cgi. Alati ei ole vaja kasutada CGI-programmi nimega laiendit .cgi. Kuigi paljude keelte lähtekoodis kasutatakse ka .cgi laiendit, ei kasutata seda keeletüübi näitamiseks, vaid see on viis, kuidas server tuvastab faili käivitatava failina, mitte pildifailina, HTML-failina või tekstifailina. Serverid on sageli konfigureeritud nii, et nad proovivad käivitada ainult neid faile, millel on see laiend, kuvades samal ajal kõigi teiste failide sisu. Kuigi laienduse .cgi kasutamine on valikuline, peetakse seda siiski heaks tavaks.

Üldiselt koosneb hello.cgi kahest põhiosast:

  • annab brauserile teada, millist teavet oodata (sisutüüp: text/html)
  • ütleb brauserile, mida kuvada (Tere, maailm!)

Tere, Maailm! C-s

Et näidata CGI-programmide sõltumatust keeltest, näitab loend 2.2 programmi hello.cgi C-ekvivalenti.

Loetelu 2.2. Tere, Maailm! in C. /* hello.cgi.c – Tere, maailm CGI */ #include int main() ( printf("Sisutüüp: text/html\r\n\r\n"); printf(" \n"); printf(" Tere, Maailm!\n"); printf("\n"); printf(" \n"); printf("

Tere, Maailm!

\n"); printf(" \n");)

Märge

Pange tähele, et hello.cgi Perli versioon kasutab sisutüüpi print ": text/html\n\n "; C-versioon kasutab printf(" Content-Type: text/html\r\n\r\n ");

Miks prindib Perl lause kahe reavahetusega (\n), C printf aga kahe reavahetuse ja reavahetusega (\r\n)?

Formaalselt peaksid päised (kõik väljundid enne tühja rida) olema eraldatud käru tagastusrea ja reavahetustega. Kahjuks tõlgib Perl DOS-i ja Windowsi masinates \r kui järjekordset reavahetust, mitte kui käru tagastamist.

Kuigi \rs erand Perlis on tehniliselt vale, töötab see peaaegu kõigis protokollides ja on ka kõikidele platvormidele kaasaskantav. Seetõttu kasutan kõigis selle raamatu Perli näidetes päiste eraldamiseks reavahetust, mitte reavahetust ja reavahetust.

Selle probleemi sobiv lahendus on esitatud 4. peatükis, Järeldus.

Ei veebiserverit ega brauserit ei huvita, mis keeles programmi kirjutatakse. Kuigi igal keelel on CGI programmeerimiskeelena oma eelised ja puudused, on kõige parem kasutada keelt, mis teile kõige mugavam on. (Programmeerimiskeele valikust on täpsemalt juttu 1. peatükis "Ühislüüsiliides (CGI)").

CGI väljund

Nüüd saame lähemalt vaadata veebibrauserisse teabe saatmise probleemi. Näites "Tere, maailm!" näete, et veebibrauserid ootavad kahte andmekogumit: päist, mis sisaldab teavet, näiteks seda, millist teavet kuvada (nt sisutüüp: rida) ja tegelikku teavet (mida veebibrauseris kuvatakse). Need kaks teabeplokki on eraldatud tühja reaga.

Päist nimetatakse HTTP päiseks. See annab olulisi üksikasju teabe kohta, mida brauser saab. Neid on mitu erinevat tüüpi HTTP-päised ja kõige üldisem on see, mida varem kasutasite: sisutüüp: päis. Saate kasutada erinevaid HTTP-päiste kombinatsioone, mis on eraldatud kelgu tagastusrea ja reavahetustega (\r\n). Päist andmetest eraldav tühi rida koosneb ka reavahetusest ja reavahetusest (milleks mõlemat vaja on, kirjeldatakse lühidalt eelmises märkuses ja täpsemalt peatükis 4). Teiste HTTP-päiste kohta leiate teavet 4. peatükist; teil on praegu tegemist Content-Type: päisega.

Sisutüüp: päis kirjeldab, millist tüüpi andmeid CGI tagastab. Selle päise sobiv vorming on:

Sisutüüp: alamtüüp/tüüp

Kui alamtüüp/tüüp on õige mitmeotstarbelise Interneti-posti laienduse (MIME) tüüp. Kõige tavalisem MIME-tüüp on HTML-tüüp: text/html. Tabelis 2.1 on loetletud mõned levinumad MIME-tüübid, mida arutatakse; MIME tüüpide täielikum loetelu ja analüüs on toodud 4. peatükis.

Märge

MIME leiutati algselt kirjade sisu kirjeldamiseks. Sellest on saanud sisutüüpi teabe esitamise üsna tavaline viis. MIME kohta saate rohkem lugeda RFC1521-st. Internetis leiduvad RFC-d tähistavad "Requests for Comments", mis on standardite kehtestamist püüdvate rühmade Internetis tehtud otsuste kokkuvõtted. RFC1521 tulemusi saate vaadata järgmisel aadressil: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabel 2.1. Mõned levinumad MIME-tüübid. MIME tüüp Kirjeldus Text/html Hüperteksti märgistuskeel (HTML) Tekst/lihtteksti failid Pilt/gif GIF-graafikafailid Pilt/jpeg JPEG-tihendatud graafikafailid Heli/põhilised Suni helifailid *.au Audio/x-wav Windowsi failid *.wav

Pärast päist ja tühja rida printige andmed lihtsalt vajalikul kujul. Kui saadate HTML-i, printige HTML-i sildid ja andmed päise järel stdout-i. Samuti saate saata graafikat, heli ja muid binaarfaile, printides faili sisu lihtsalt stdouti. Mõned näited selle kohta on toodud 4. peatükis.

CGI programmi installimine ja käitamine

See osa erineb mõnevõrra CGI programmeerimisest ja räägib teie veebiserveri konfigureerimisest CGI-d kasutama, programmide installimisest ja käitamisest. Te tunnete erinevate platvormide jaoks mõeldud servereid enam-vähem üksikasjalikult, kuid parima valiku leidmiseks peate oma serveri dokumentatsiooni sügavamalt uurima.

Kõik serverid vajavad ruumi serverifailide jaoks ja ruumi HTML-dokumentide jaoks. Selles raamatus nimetatakse serveri piirkonda ServerRoot ja dokumendi piirkonda DocumentRoot. UNIX-seadmetes asub ServerRoot tavaliselt kaustas /usr/local/etc/httpd/ ja DocumentRoot tavaliselt /usr/local/etc/httpd/htdocs/. Kuid see ei ole teie süsteemi jaoks oluline, seega asendage kõik viited ServerRootile ja DocumentRootile oma ServerRooti ja DocumentRootiga.

Kui pääsete failidele juurde veebibrauseri abil, määrate faili URL-is, mis on seotud DocumentRootiga. Näiteks kui teie serveri aadress on mymachine.org, pääsete sellele failile juurde järgmise URL-iga: http://mymachine.org/index.html

Serveri konfiguratsioon CGI jaoks

Enamik veebiservereid on CGI-programmide kasutamiseks eelkonfigureeritud. Tavaliselt näitavad serverile kaks parameetrit, kas fail on CGI-rakendus või mitte:

  • Määratud kataloog. Mõned serverid võimaldavad teil määrata, et kõik failid määratud kataloogis (vaikimisi nimetatakse seda tavaliselt cgi-biniks) on CGI-d.
  • Failinime laiendid. Paljud serverid on eelkonfigureeritud lubama kõiki cgi-lõpulisi faile määratleda CGI-na.

Määratud kataloogi meetod on mõnevõrra kinnine (esimesed serverid kasutasid seda ainsa meetodina, et määrata, millised failid on CGI-programmid), kuid sellel on mitmeid eeliseid.

  • See hoiab CGI-programmid tsentraliseeritud, vältides teiste kataloogide segamist.
  • Te ei ole piiratud ühegi konkreetse failinimelaiendiga, seega saate failidele nime anda nii, nagu soovite. Mõned serverid võimaldavad CGI kataloogidena määrata mitu erinevat kataloogi.
  • See annab teile ka suurema kontrolli selle üle, kes saab kirjutada CGI-d. Näiteks kui teil on server ja see toetab mitme kasutajaga süsteemi ning ei soovi, et nad kasutaksid oma CGI-skripte ilma programmi esmalt turvakaalutlustel üle vaatamata, saate määrata CGI-ks ainult need failid, mis asuvad piiratud tsentraliseeritud kataloogis. Seejärel peavad kasutajad andma teile installimiseks CGI-programmid ja saate esmalt koodi auditeerida, et veenduda, et programmil pole olulisi turbeprobleeme.

CGI tähistamine failinime laiendi kaudu võib selle paindlikkuse tõttu olla kasulik. Te ei piirdu ühe CGI-programmide kataloogiga. Enamikku servereid saab konfigureerida CGI-d ära tundma failinime laienduse kaudu, kuigi kõik pole vaikimisi sel viisil konfigureeritud.

Hoiatus

Serveri CGI jaoks seadistamisel pidage meeles turvaprobleeme. Siin käsitletakse mõningaid näpunäiteid ja 9. peatükis CGI turvamine käsitletakse neid aspekte üksikasjalikumalt.

CGI installimine UNIX-i serveritesse

Olenemata sellest, kuidas teie UNIX-server on konfigureeritud, peate tegema mitmeid samme, et tagada teie CGI-rakenduste õige töö. Teie veebiserver töötab tavaliselt olematu kasutajana (st UNIX-i kasutajana keegi - Konto, millel pole failiõigusi ja mida ei saa registreerida). CGI-skriptid (olenemata sellest, kas need on kirjutatud Perlis, Bourne'i shellis või mõnes muus skriptikeeles) peavad olema käivitatavad ja maailmas loetavad.

Vihje

Failide globaalselt loetavaks ja käivitatavaks muutmiseks kasutage järgmist UNIX-i lubade käsku: chmod 755 failinimi.

Kui kasutate skriptikeelt (nt Perl või Tcl), lisage skripti esimesele reale tõlgi täielik tee. Näiteks Perli skript, mis kasutab perli kataloogis /usr/local/bin, algaks järgmise reaga:

#!/usr/local/bin/perl

Hoiatus

Ärge kunagi asetage interpretaatorit (perl või Tcl Wish binaarfaili kataloogi /cgi-bin. See tekitab teie süsteemis turvariski. Seda käsitletakse üksikasjalikumalt 9. peatükis.

Mõned universaalsed UNIX-i serverid

NCSA ja Apache serveritel on sarnased konfiguratsioonifailid, kuna Apache server põhines algselt NCSA koodil. Vaikimisi on need konfigureeritud nii, et iga fail kataloogis cgi-bin (mis asub vaikimisi ServerRootis) on CGI-programm. Kataloogi cgi-bin asukoha muutmiseks saate redigeerida konfiguratsioonifaili conf/srm.conf. Selle kataloogi konfigureerimise vorming on

ScriptAlias ​​​​fakedirectoryname reaalkatalooginimi

kus fakedirectoryname on pseudokataloogi nimi (/cgi-bin) ja real directoryname on täielik tee, kuhu CGI-programmid tegelikult salvestatakse. Saate konfigureerida rohkem kui ühe ScriptAliase, lisades rohkem ScriptAlias ​​ridu.

Vaikekonfiguratsioon on enamiku kasutajate vajaduste jaoks piisav. Õige reaalkatalooginime määramiseks peate failis srm.conf niikuinii redigeerima rida. Kui teie CGI-programmid asuvad näiteks kaustas /usr/local/etc/httpd/cgi-bin, peaks ScriptAlias-rida teie failis srm.conf välja nägema järgmine:

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

Selles kataloogis asuvatele CGI-programmidele juurdepääsemiseks või nende linkimiseks kasutage järgmist URL-i:

http://hostinimi/cgi-bin/programminimi

Kus hostinimi on teie veebiserveri hostinimi ja programminimi teie CGI nimi.

Oletame näiteks, et olete kopeerinud programmi hello.cgi oma veebiserveri nimega www.company.com oma cgi-bin kataloogi (nt /usr/local/etc/httpd/cgi-bin). CGI-le juurdepääsuks kasutage järgmist URL-i: http://www.company.com/cgi-bin/hello.cgi

Kui soovite konfigureerida NCSA või Apache serveri tuvastama mis tahes .cgi-faili CGI-na, peate redigeerima kahte konfiguratsioonifaili. Esiteks, ärge kommenteerige failis srm.conf järgmist rida:

AddType rakendus/x-httpd-cgi .cgi

See seob MIME-tüüpi CGI laiendiga .cgi. Nüüd peame muutma faili access.conf, et saaksime CGI-d käivitada mis tahes kataloogis. Selleks lisage ExecCGI valik reale Option. See näeb välja umbes nagu järgmine rida:

Valikute indeksid FollowSymLinks ExecCGI

Nüüd loetakse iga .cgi-laiendiga faili CGI-ks; pääsete sellele juurde nagu mis tahes failile oma serveris.

CERN-i server on konfigureeritud samamoodi nagu Apache ja NCSA serverid. ScriptAliase asemel kasutab CERN-i server käsku Exec. Näiteks failis httpd.conf näete järgmist rida:

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

Teisi UNIX-servereid saab konfigureerida samal viisil; Rohkem üksikasju selle kohta on kirjeldatud serveri dokumentatsioonis.

CGI installimine Windowsi

Enamik Windows 3.1, Windows 95 ja Windows NT jaoks saadaolevatest serveritest on konfigureeritud CGI tuvastamiseks "failinimelaiendi" meetodiga. Üldiselt nõuab Windowsi-põhise serveri konfiguratsiooni muutmine lihtsalt serveri konfiguratsiooniprogrammi käivitamist ja vastavate muudatuste tegemist.

Mõnikord võib serveri konfigureerimine skripti (nagu Perl) korrektseks käivitamiseks olla keeruline. DOS-is või Windowsis ei saa te skripti esimesel real tõlgendajat määrata, nagu UNIXis. Mõned serverid on eelkonfigureeritud seostama tõlgiga teatud failinimelaiendeid. Näiteks eeldavad paljud Windowsi veebiserverid, et .pl-lõpulised failid on Perli skriptid.

Kui server seda tüüpi failiseotust ei rakenda, saate määratleda pakendaja pakkfaili, mis kutsub nii tõlgi kui ka skripti. Nagu UNIX-serveri puhul, ärge installige interpretaatorit ei cgi-bin kataloogi ega ühtegi veebijuurdepääsetavasse kataloogi.

CGI installimine Macintoshisse

Kaks kõige kuulsamat Macintoshi serverivalikut on WebStar StarNine ja selle eelkäija MacHTTP. Mõlemad tunnevad CGI ära selle failinime laienduse järgi.

MacHTTP mõistab kahte erinevat laiendit: .cgi ja .acgi, mis tähistab asünkroonset CGI-d. Tavalised Macintoshisse installitud CGI-programmid (.cgi-laiendiga) hoiavad veebiserveri hõivatuna seni, kuni CGI on täitmise lõpetanud, sundides serverit peatama kõik muud päringud. Asünkroonne CGI seevastu võimaldab serveril taotlusi vastu võtta isegi siis, kui see töötab.

Neid veebiservereid kasutav Macintoshi CGI arendaja peaks võimalusel kasutama .cgi laienduse asemel .acgi laiendust. See peaks töötama enamiku CGI programmidega; kui see ei tööta, nimetage programm ümber .cgi-ks.

CGI täitmine

Kui olete CGI installinud, on selle käivitamiseks mitu võimalust. Kui teie CGI on ainult väljundiga programm, näiteks Hello, World!, saate selle käivitada lihtsalt selle URL-i kaudu.

Enamik programme töötab serverirakendusena HTML-vormingus. Enne nende vormide teabe hankimise õppimist lugege esmalt lühike sissejuhatus selliste vormide loomise kohta.

Kiirõpetus HTML-vormide kohta

Kaks kõige olulisemat silti HTML-vormingus on sildid

Ja . Enamiku HTML-vorme saate luua ainult nende kahe sildi abil. Selles peatükis uurite neid silte ja väikest võimalike tüüpide või atribuutide alamhulka. . Täielik juhend ja link HTML-vormidele on 3. peatükis HTML ja vormid.

Tag

Tag kasutatakse selleks, et määrata, millist HTML-faili osa tuleks kasutaja sisestatud teabe jaoks kasutada. See viitab sellele, kuidas enamik HTML-lehti kutsub CGI programmi. Sildi atribuudid määravad programmi nime ja asukoha – kas kohapeal või täieliku URL-ina, kasutatava kodeeringu tüübi ja programmis kasutatava andmeedastusmeetodi.

Järgmine rida näitab sildi spetsifikatsioone :

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

Atribuudil ENCTYPE pole erilist rolli ja see ei ole tavaliselt sildiga kaasas . detailne info märgendi ENCTYPE kohta on kirjeldatud 3. peatükis. Üks võimalus ENCTYPE kasutamiseks on näidatud 14. peatükis "Brändilaiendid".

Atribuut ACTION viitab CGI programmi URL-ile. Pärast seda, kui kasutaja on vormi täitnud ja teabe esitanud, kodeeritakse kogu teave ja edastatakse CGI programmi. CGI programm otsustab teabe dekodeerimise ja töötlemise küsimuse ise; seda aspekti käsitletakse selle peatüki edaspidi jaotises "Brauseri sisendi aktsepteerimine".

Lõpuks kirjeldab atribuut METHOD, kuidas CGI programm peaks sisendi vastu võtma. Need kaks meetodit, GET ja POST, erinevad selle poolest, kuidas teavet CGI-programmi edastatakse. Mõlemat käsitletakse jaotises "Brauserist sisendi vastuvõtmine".

Selleks, et brauser võimaldaks kasutajal sisestust, peavad kõik vormisildid ja teave olema sildiga ümbritsetud . Ärge unustage viimast silti

vormi lõpu märkimiseks. Vormi sees ei saa olla, kuigi saate seadistada vormi, mis võimaldab teil esitada teavet erinevates kohtades; seda aspekti käsitletakse põhjalikult 3. peatükis.

Tag

Märgendi abil saate luua tekstisisestusribasid, raadionuppe, märkeruutusid ja muid viise sisendi vastuvõtmiseks . See jaotis hõlmab ainult tekstisisestusvälju. Selle välja rakendamiseks kasutage silti järgmiste atribuutidega:

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

NAME on muutuja sümboolne nimi, mis sisaldab kasutaja sisestatud väärtust. Kui lisate teksti atribuudile VALUE, paigutatakse see tekst tekstisisestusväljale vaikimisi. Atribuut SIZE võimaldab määrata sisestusvälja horisontaalse pikkuse nii, nagu see brauseriaknas kuvatakse. Lõpuks määrab MAXLENGTH maksimaalse märkide arvu, mida kasutaja saab väljale sisestada. Pange tähele, et atribuudid VALUE, SIZE, MAXLENGTH on valikulised.

Vormi esitamine

Kui vormi sees on ainult üks tekstiväli, saab kasutaja vormi esitada, tippides lihtsalt klaviatuuril teabe ja vajutades sisestusklahvi. Vastasel juhul peab kasutajal teabe esitamiseks olema mõni muu viis. Kasutaja edastab teabe järgmise märgisega esitamisnupu abil:

< Input type=submit >

See silt loob teie vormi sisse nupu Esita. Kui kasutaja on vormi täitmise lõpetanud, saab ta selle sisu esitada vormi atribuudiga ACTION määratud URL-ile, klõpsates nuppu Esita.

Brauserist sisendi vastuvõtmine

Eespool toodi näiteid CGI programmi kirjutamisest, mis saadab informatsiooni serverist brauserisse. Tegelikkuses pole CGI programmil, mis ainult andmeid väljastab, palju rakendusi (mõned näited on toodud 4. peatükis). CGI olulisem võimalus on saada teavet brauserist, funktsioon, mis muudab veebi interaktiivseks.

CGI programm saab brauserist kahte tüüpi teavet.

  • Esiteks saab see erinevat teavet brauseri (selle tüüp, mida ta saab sirvida, hosti jne), serveri (selle nimi ja versioon, täitmisport jne) ning CGI-programmi enda (programmi nimi ja asukoht) kohta. Server annab kogu selle teabe keskkonnamuutujate kaudu CGI programmile.
  • Teiseks saab CGI programm vastu võtta kasutaja sisestatud teavet. See teave saadetakse pärast seda, kui brauser on selle kodeerinud, kas keskkonnamuutuja (GET-meetod) või standardsisendi kaudu (stdin POST-meetod).

Keskkonnamuutujad

Kasulik on teada, millised keskkonnamuutujad on CGI programmi jaoks saadaval nii õppimiseks kui ka silumiseks. Tabelis 2.2 on loetletud mõned saadaolevad CGI keskkonnamuutujad. Samuti saate kirjutada CGI-programmi, mis väljastab veebibrauserisse keskkonnamuutujad ja nende väärtused.

Tabel 2.2. Mõned olulised CGI keskkonnamuutujad Keskkonnamuutuja Eesmärk REMOTE_ADDR Kliendi masina IP-aadress. REMOTE_HOST Kliendi masina hosti host. HTTP _ACCEPT Loetleb MIME andmetüübid, mida brauser saab tõlgendada. HTTP _USER_AGENT Brauseri teave (brauseri tüüp, versiooni number, operatsioonisüsteem jne). REQUEST_METHOD HANGI või POSTITA. CONTENT_LENGTH Sisestuse pikkus, kui see saadetakse POST-iga. Kui sisendit pole või kasutatakse GET-meetodit, on see parameeter määratlemata. QUERY_STRING Sisaldab sisendteavet, kui see esitatakse GET-meetodil. PATH_INFO Võimaldab kasutajal määrata tee alates käsurida CGI (näiteks http://hostinimi/cgi-bin/programminimi/tee). PATH_TRANSLATED Tõlgib PATH_INFO suhtelise tee tegelikuks teeks süsteemis.

Keskkonnamuutujaid kuvava CGI-rakenduse kirjutamiseks peate teadma, kuidas teha kahte asja.

  • Määratlege kõik keskkonnamuutujad ja nende vastavad väärtused.
  • Kuva brauseri tulemused.

Sa juba tead, kuidas viimast toimingut teha. Perlis salvestatakse keskkonnamuutujad %ENV assotsiatiivsesse massiivi, mille sisestab keskkonnamuutuja nimi. Nimekiri 2.3 sisaldab env.cgi, Perli programmi, mis täidab meie eesmärgi.

Loetelu 2.3. Perli programm, env.cgi, mis väljastab kõik CGI keskkonnamuutujad.

#!/usr/local/bin/perl print "Sisutüüp: text/html\n\n"; printida" \n";prindi" CGI keskkond\n";prindi"\n";prindi" \n";prindi"

CGI keskkond

\n"; foreach $env_var (klahvid %ENV) ( print " $env_var= $ENV($env_var)
\n"; ) print " \n";

Sarnase programmi võiks kirjutada ka C keeles; täielik kood on loendis 2.4.

Nimekiri 2.4. env.cgi.c C-s /* env.cgi.c */ #include extern char **keskkond; int main() ( char **p = keskkond; printf("Sisutüüp: text/html\r\n\r\n"); printf(" \n"); printf(" CGI keskkond\n"); printf("\n"); printf(" \n"); printf("

CGI keskkond

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

SAADA või POSTITA?

Mis vahe on GET- ja POST-meetoditel? GET edastab kodeeritud sisendstringi keskkonnamuutuja QUERY_STRING kaudu, POST aga stdini kaudu. Eriti suure andmemahuga vormide puhul on eelistatud meetod POST, sest saadetava info mahule pole piiranguid ning GET meetodi puhul on meediaruumi maht piiratud. GET-il on siiski teatud kasulik omadus; seda käsitletakse üksikasjalikult 5. peatükis Sisend.

Kasutatava meetodi kindlaksmääramiseks kontrollib CGI programm keskkonnamuutujat REQUEST_METHOD, mille väärtuseks määratakse kas GET või POST. Kui see on seatud väärtusele POST, salvestatakse kodeeritud teabe pikkus keskkonnamuutujasse CONTENT_LENGTH.

Kodeeritud sisend

Kui kasutaja vormi esitab, kodeerib brauser teabe esmalt enne serverisse ja seejärel CGI-rakendusse saatmist. Kui kasutate silti , omistatakse igale väljale sümboolne nimi. Kasutaja sisestatud väärtust esitatakse muutuja väärtusena.

Selle kindlaksmääramiseks kasutab brauser URL-i kodeeringu spetsifikatsiooni, mida saab kirjeldada järgmiselt:

  • Eraldab erinevad väljad ampersandiga (&).
  • Eraldab nime ja väärtused võrdusmärkidega (=), kusjuures nimi on vasakul ja väärtus paremal.
  • Asendab tühikud plussmärkidega (+).
  • Asendab kõik "ebanormaalsed" märgid protsendimärgiga (%), millele järgneb kahekohaline kuueteistkümnendkood.

Teie lõplik kodeeritud string näeb välja selline:

Nimi1=väärtus1&nimi2=väärtus2&nimi3=väärtus3 ...

Märkus. URL-i kodeerimise spetsifikatsioonid on standardis RFC1738.

Oletame näiteks, et teil oli vorm, mis küsis nime ja vanust. Selle vormi kuvamiseks kasutatud HTML-koodi on näidatud loendis 2.5.

Nimekiri 2.5. HTML-kood nime ja vanusevormi kuvamiseks.

nimi ja vanus

Sisestage oma nimi:

Sisesta oma vanus:

Oletame, et kasutaja sisestab nimeväljale Joe Schmoe ja vanuseväljale 20. Sisend kodeeritakse sisendstringi.

Nimi=Joe+Schmoe&age=20

Sisend sõelumine

Et see teave oleks kasulik, peate kasutama teavet millegi kohta, mida teie CGI-programmid saavad kasutada. Sisendite parsimise strateegiaid käsitletakse peatükis 5. Praktikas ei pea te kunagi mõtlema, kuidas sisendit sõeluda, sest mitmed inimesed on juba kirjutanud avalikult kättesaadavaid parsimist teostavaid teeke. Kaks sellist teeki on selles peatükis esitatud järgmistes jaotistes: cgi-lib.pl Perli jaoks (kirjutanud Steve Brenner) ja cgihtml C jaoks (kirjutanud mina).

Enamiku erinevates keeltes kirjutatud teekide üldeesmärk on sõeluda kodeeritud string ning panna nime- ja väärtusepaarid andmestruktuuri. Sisseehitatud andmestruktuuridega keele (nt Perl) kasutamisel on ilmne eelis; enamik madalama taseme keelte (nt C ja C++) teeke sisaldavad aga andmestruktuuri ja alamprogrammi täitmist.

Ei ole vaja saavutada täielikku arusaamist raamatukogudest; palju olulisem on õppida neid kasutama CGI programmeerija töö hõlbustamiseks.

cgi-lib.pl

Cgi-lib.pl kasutab Perli assotsiatiivseid massiive. Funktsioon &ReadParse analüüsib sisendstringi ja sisestab iga nime/väärtuse paari nime järgi. Näiteks äsja esitatud sisendstringi "nimi/vanus" dekodeerimiseks vajalikud vastavad Perli stringid oleksid

&ReadParse(*input);

Nüüd, et näha "name" sisestatud väärtust, võite viidata assotsiatiivsele massiivile $input("name"). Samamoodi, et viidata väärtusele "vanus", peate vaatama muutujat $input("age").

cgihtml

C-l pole sisseehitatud andmestruktuure, seega rakendab cgihtml oma CGI parsimisrutiinidega kasutamiseks oma linkide loendit. See määratleb kirjetüübi struktuuri järgmiselt:

Typedef struct ( Char *nimi; Char *väärtus; ) Kirjetüüp;

Sisestusstringi "nimi / vanus" C-s cgihtml-i abil sõelumiseks kasutatakse järgmist:

/* deklareerib lingitud loendi nimega input */ Llist input; /* parsi sisendit ja aseta lingitud loendisse */ read_cgi_input(&input);

Vanuse teabele juurdepääsu saamiseks saate loendit käsitsi sõeluda või kasutada pakutavat funktsiooni cgi _val().

#kaasa #kaasa Char *vanus = malloc (sizeof (char) * strlen (cgi _val (sisend, "vanus")) + 1); Strcpy(vanus, cgi_val(sisend, "vanus"));

Väärtus "vanus" on nüüd salvestatud vanusestringi.

Märkus. Selle asemel, et kasutada lihtsat massiivi (nt char age ;)), eraldan mäluruumi vanusestringi jaoks dünaamiliselt. Kuigi see muudab programmeerimise keeruliseks, on see turvalisuse seisukohast siiski oluline. Täpsemalt 9. peatükis.

Lihtne CGI programm

Olete kirjutamas CGI-programmi nimega nameage.cgi, mis käsitleb vormi "nimi/vanus". Andmetöötlus (mida ma tavaliselt nimetan "vahematerjaliks") on minimaalne. Nameage.cgi lihtsalt dekodeerib sisendi ja kuvab kasutajanime ja vanuse. Kuigi see pole sellise tööriista jaoks eriti kasulik, näitab see CGI programmeerimise kõige kriitilisemat aspekti: sisend ja väljund.

Kasutate ülalkirjeldatud vormi, kutsudes väljad "nimi ja vanus". Ärge veel muretsege vastupidavuse ja tõhususe pärast; lahendada antud ülesanne kõige lihtsamal viisil. Perli ja C lahendused on näidatud vastavalt loendites 2.6 ja 2.7.

Nimekiri 2.6. Nameage.cgi Perlis

#!/usr/local/bin/perl # nameage.cgi nõuab "cgi-lib.pl" &ReadParse(*input); print "Content-Type: text/html\r\n\r\n"; printida" \n";prindi" nimi ja vanus\n";prindi"\n";prindi" \n"; print "Tere, " . $input("nimi") . ". Olete\n"; print $input("vanus") . " aastat vana.

\n";prindi" \n";

Nimekiri 2.7. nameage.cgi keeles C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( listist sisend; read_cgi_input(&input); printf("Sisutüüp: text/html\r\n\r\n"); printf(" \n"); printf(" nimi ja vanus\n"); printf("\n"); printf(" \n"); printf("Tere, %s. Sa oled\n",cgi_val(input,"nimi")); printf("%s aastat vana.

\n",cgi_val(sisend,"vanus")); printf(" \n");)

Pange tähele, et need kaks programmi on peaaegu samaväärsed. Mõlemad sisaldavad sõelumisrutiine, mis võtavad vaid ühe rea ja töötlevad kogu sisendi (tänu vastavatele teegirutiinidele). Väljund on sisuliselt teie põhiprogrammi Hello, World! muudetud versioon.

Proovige programmi käivitada, täites vormi ja klõpsates nuppu Esita.

Üldine programmeerimisstrateegia

Nüüd teate kõiki CGI programmeerimiseks vajalikke põhiprintsiipe. Kui olete aru saanud, kuidas CGI teavet saab ja kuidas see brauserisse tagasi saadab, sõltub teie lõpptoote tegelik kvaliteet teie üldisest programmeerimisvõimest. Nimelt, kui programmeerite CGI-d (või üldse midagi), pidage meeles järgmisi omadusi:

  • Lihtsus
  • Tõhusus
  • Mitmekülgsus

Esimesed kaks omadust on üsna tavalised: proovige muuta oma kood võimalikult loetavaks ja tõhusaks. Mitmekülgsus kehtib rohkem CGI-programmide kui muude rakenduste puhul. Kui hakkate oma CGI-programme välja töötama, märkate, et on olemas mõned põhirakendused, mida kõik teha tahavad. Näiteks CGI-programmi üks levinumaid ja ilmsemaid ülesandeid on vormi töötlemine ja tulemuste e-postiga saatmine konkreetsele adressaadile. Teil võib olla mitu eraldi renderdatud vormi, millest igaühel on erinev adressaat. Selle asemel, et kirjutada iga vormi jaoks eraldi CGI-programm, saate säästa aega, kirjutades üldisema CGI-programmi, mis sobib kõigile vormidele.

Hõlmades kõiki CGI põhiaspekte, olen andnud teile piisavalt teavet, et alustada CGI programmeerimisega. Kuid selleks, et olla tõhus CGI arendaja, peab teil olema sügavam arusaam sellest, kuidas CGI suhtleb serveri ja brauseriga. Selle raamatu ülejäänud osas käsitletakse üksikasjalikult selles peatükis lühidalt mainitud küsimusi, samuti rakenduste arendusstrateegiaid, protokolli eeliseid ja piiranguid.

Kokkuvõte

Selles peatükis on lühidalt käsitletud CGI programmeerimise põhitõdesid. Loote väljundi, vormindades andmed õigesti ja printides stdout-vormingusse. CGI-sisendi hankimine on veidi keerulisem, kuna see tuleb enne kasutamist sõeluda. Õnneks on parsimisega tegelevaid raamatukogusid juba mitu.

Nüüdseks peaksite olema CGI-rakenduste programmeerimisega üsna rahul. Selle raamatu ülejäänud osa on pühendatud keerukamate ja keerukamate rakenduste spetsifikatsioonide, näpunäidete ja programmeerimisstrateegiate üksikasjalikumale esitlusele.

2012: Briti Logica ost

2012. aasta juunis teatas CGI Group, et on allkirjastanud lepingu Euroopa suurima süsteemiintegraatori Logica ostmiseks. Tehingu summa on 2,8 miljardit Kanada dollarit (2,7 miljardit dollarit). Osana saavutatud kokkulepetest nõustus CGI vastutama ka Logica 515 miljoni Kanada dollari suuruse võla tagasimaksmise eest.

Tehingu rahastamiseks plaanib CGI koguda 1 miljard Kanada dollarit täiendava 46,7 miljoni aktsia emiteerimise kaudu, 2 miljardi Kanada dollari laenamiseks Kanada Imperial Bank of Commerce'ilt, Kanada National Bankilt ja Toronto-Dominion Bankilt ning veel umbes 650 miljonit Kanada dollarit - olemasoleva krediidiliini raames.

Pakkumine aktsia kohta oli 59,8% kõrgem Logica sulgemishinnast 30. mail 2012. Tehing on ligikaudu 6,6-kordne Logica kasum enne makse, intresse ja kogunenud amortisatsiooni (EBITDA) 12-kuulisel perioodil, mis lõppes 31. detsembril 2011.

Logica omandamine suurendab eeldatavasti CGI kasumit aktsia kohta 25-30%, välja arvatud soetus- ja integreerimiskulud. Ühinemise tulemusena on tekkiva ettevõtte personal ja aastakäive enam kui 2 korda suuremad kui CGI. Ühendatud ettevõtte personali suurus on umbes 72 tuhat töötajat, kes asuvad kontorites 43 riigis ja aastakäive - umbes 10,4 miljardit Kanada dollarit (9,6 miljardit dollarit).

Uus ettevõte saab olema maailma IT-konsultantide seas suuruselt kuuendal kohal. Reutersi hinnangul on suurimad IBM, Accenture, Cap Gemini, Tata Consultancy ja Infosys.

"Logica on juhtiv äri- ja tehnoloogiateenuste ettevõte, millel on pühendunud spetsialistid ja usaldusväärsed pikaajalised lepingulised kliendid," ütles CGI president ja tegevjuht Michael Roach. õige aeg luua üks väheseid sõltumatuid integreeritud tehnoloogiateenuste pakkujaid.

CGI juhatus kiitis tehingu ühehäälselt heaks. See on kavas lõpule viia 2012. aasta septembriks pärast aktsionäride nõusoleku saamist ja standardprotseduuride järgimist. Ettevõtete integreerimise protsess plaanitakse lõpule viia 3 aasta jooksul