Ubevist handel cgi. Tydelig e-handel

Andover, Massachusetts, 19. november 2003

The Commerce Group, Inc. (NYSE: CGI), den største forfatteren av privat personbilforsikring i Massachusetts og CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), en ledende leverandør av informasjonsteknologi og forretningsbehandlingstjenester, kunngjorde i dag signeringen av en seksårig kontraktsfornyelse av forretningsprosesser outsourcing (BPO) til en verdi av USD 35 millioner. CGI vil tilby full policybehandlingstjenester for Massachusetts private passasjer- og kommersielle billinjer, samt tilby CGIs CollaborativeEdge-byrågrensesnittverktøy, applikasjonsstøtte og vedlikehold, regulatorisk støtte, systemrådgivning og dokumenthåndteringstjenester.

Gerald Fels, Commerce Groups konserndirektør og finansdirektør, uttalte: "Som den ledende leverandøren av private passasjerbiler i Massachusetts, er målet vårt å gi våre agenter og ansatte tjenester som hjelper dem å prestere på sitt høyeste nivå. Gjennom årene har vi fostret et sterkt forhold til CGI. Systemet deres er robust og nøyaktig, og teamet deres er godt kjent med våre interne prosesseringssystemer. Det er viktig for oss."

Serge LaPalme, president, forsikringsforretningstjenester for CGI la til: "Vi er veldig glade for å fortsette vårt forhold til Commerce Group, et som strekker seg over 30 år. Commerce Group fortsetter å være en av våre verdsatte forretningspartnere og er strategisk for å vår suksess Når vi hjelper kunden vår med å fokusere ytterligere på deres kjernevirksomhet, drar vi nytte av nye teknologier når og hvor det er fornuftig å tilpasse eksisterende løsninger til denne sektoren i stadig utvikling."

Om The Commerce Group, Inc.

The Commerce Group, Inc., et forsikringsholdingselskap, har hovedkontor i Webster, Massachusetts. Commerce Groups datterselskaper for eiendoms- og skadeforsikring inkluderer The Commerce Insurance Company og Citation Insurance Company i Massachusetts, Commerce West Insurance Company i California og American Commerce Insurance Company i Ohio. Gjennom datterselskapenes kombinerte forsikringsaktiviteter er Commerce Group rangert som den 22. største personlige bilforsikringsgruppe i landet av A.M. Best, basert på direkte skriftlig premieinformasjon fra 2002.

Om CGI
Grunnlagt i 1976, er CGI det femte største uavhengige infoi Nord-Amerika, basert på antall ansatte. CGI og dets tilknyttede selskaper sysselsetter 20 000 fagfolk. CGIs årlige inntektsløpsrate er for tiden 2,8 milliarder CDN (1,9 milliarder USD) og 30. september 2003 var CGIs ordrereserve på 12,3 milliarder USD (9,1 milliarder USD). CGI leverer ende-til-ende IT- og forretningsprosesstjenester til kunder over hele verden fra kontorer i Canada, USA og Europa. CGIs aksjer er notert på TSX (GIB.A) og NYSE (GIB) og er inkludert i TSX 100 Composite Index samt S&P/TSX Canadian Information Technology og Canadian MidCap-indekser: .

Eiere av nettbutikker er kjent med konseptet "elektronisk handel" de vet allerede svaret på spørsmålet "e-handel - hva er det?" Men hvis du kommer til bunns i det, dukker det opp mange nyanser og dette begrepet får en bredere betydning.

E-handel: hva er det?

Det generelle konseptet er som følger: e-handel forstås som en viss tilnærming til å drive forretning, som innebærer inkludering av en rekke operasjoner som bruker digital dataoverføring i levering av varer eller levering av tjenester/arbeid, inkludert bruk av Internett.

Det er altså enhver kommersiell transaksjon som utføres ved hjelp av et elektronisk kommunikasjonsmiddel.

Arbeidsordningen er innrettet som følger:

  • hvem som helst kan være blogger eller en hvilken som helst annen eier av sin egen internettside) registrerer seg i dette systemet;
  • får sin egen lenke;
  • plasserer en spesiell kode på nettsiden sin - en annonse for den valgte offisielle partneren til e-Commerce Partners Network vises;
  • overvåker nettstedkonvertering;
  • tjener en viss prosentandel for hvert kjøp av en besøkende på nettstedet ditt som følger en tilknyttet lenke.

WP e-handel

Et stort antall mennesker brenner nå for e-handel, først og fremst på grunn av ønsket om å lage sin egen nettside, en unik nettbutikk for å selge sine egne produkter. For å møte denne økende etterspørselen har utviklere fokusert på å lage e-handelsmaler. La oss se på hva dette er neste.

Et slikt eksempel på mal er WordPress e-handel. Det er en handlekurv-plugin for WordPress (et av de mest kjente webressursstyringssystemene), først og fremst beregnet på å lage og organisere blogger). Den tilbys helt gratis og lar besøkende på nettstedet foreta kjøp på nettstedet.

Med andre ord lar denne plugin deg lage en nettbutikk (basert på WordPress). Denne e-handelspluginen har alle nødvendige verktøy, innstillinger og alternativer for å dekke moderne behov.

2012: Kjøp av britiske Logica

I juni 2012 kunngjorde CGI Group at de hadde signert en avtale om å kjøpe den største europeiske systemintegratoren Logica. Transaksjonsbeløpet er på 2,8 milliarder kanadiske dollar (2,7 milliarder dollar). Som en del av avtalene som ble oppnådd, gikk CGI også med på å påta seg forpliktelser til å tilbakebetale Logicas gjeld på et beløp på C$515 millioner.

For å finansiere transaksjonen planlegger CGI å skaffe 1 milliard kanadiske dollar ved å utstede ytterligere 46,7 millioner aksjer, låne 2 milliarder kanadiske dollar fra Canadian Imperial Bank of Commerce, National Bank of Canada og The Toronto-Dominion Bank, og rundt 650 millioner kanadiske dollar. dollar mer dollar - innenfor gjeldende kredittgrense.

Den foreslåtte prisen per aksje var 59,8 % høyere enn Logicas sluttkurs 30. mai 2012. Avtalen representerer omtrent 6,6 ganger Logicas resultat før renter, skatter, avskrivninger og amortisering (EBITDA) for året som ble avsluttet 31. desember 2011

Oppkjøpet av Logica forventes å øke CGIs resultat per aksje med 25 % til 30 %, eksklusive oppkjøps- og integrasjonskostnader. Som et resultat av fusjonen vil det resulterende selskapets arbeidsstyrke og årlige inntekter være mer enn det dobbelte av CGI. Størrelsen på det kombinerte selskapets stab vil være rundt 72 tusen ansatte lokalisert på kontorer i 43 land, og årlig omsetning vil være rundt 10,4 milliarder kanadiske dollar (9,6 milliarder dollar).

Det nye selskapet blir det sjette største blant verdens IT-konsulenter. De største av disse er IBM, Accenture, Cap Gemini, Tata Consultancy og Infosys, ifølge Reuters estimater.

"Logica er et ledende forretnings- og teknologitjenesteselskap med dedikerte fagfolk og pålitelige, langsiktige kunder," sa CGI-president og administrerende direktør Michael Roach. "Vi er sikre på at vi gjør det rette til rett pris og til rett tid for å skape en av de få største uavhengige leverandørene av ende-til-ende teknologitjenester."

CGIs styre godkjente enstemmig transaksjonen. Det er planlagt ferdigstilt innen september 2012, etter å ha mottatt aksjonærgodkjenning og etter standardprosedyrer. Integrasjonsprosessen av selskapene er planlagt gjennomført innen 3 år

E-handel på tydelig russisk. Hvordan fungerer Internett-bedrift?

I det siste har det kommet flere og flere prosjekter knyttet til netthandel. Mens jeg studerte dette området, kunne jeg ikke finne en generell og forståelig beskrivelse av prosessen. Derfor bestemte jeg meg for å lage noe som et jukseark som du alltid kan referere til for å forstå prosedyren på et område som e-handel.

Jeg tar umiddelbart forbehold om at jeg fokuserte på prosessene og kanalene som hjelper til med å få inn kunder.

E-handel: hva handler det om?

Definisjoner fra ulike kilder sier noe om salg av varer eller tjenester via Internett. Med enkle ord, e-handel er enhver nettaktivitet der penger dukker opp.

Shopping, salg, forsikring, bank, elektroniske penger, alt er her. Ta den og signer den.

Fra målet

For å forstå problemet foreslår jeg at du starter veien helt fra slutten. Hva er målet for enhver bedrift? Det stemmer, tjen penger. Så forestill deg ethvert produkt, for eksempel silikonsokker. Hvorfor ikke!

Jeg tok det første jeg tenkte på, det viste seg at det var noe sånt som dette...

Vår oppgave er å tjene penger på disse sokkene. Vi tenker på Internett. Hmm ... hvorfor ikke "kutte ned" siden og det er hvordan salget vil gå, bare behold meg Maldivene! Men det er ikke så enkelt.

Jeg liker veldig godt å tegne. Dette bidrar til å forstå de ulike prosessene. La oss tegne?!

Så langt ser modellen vår slik ut. Vi tar sokker, legger dem på Internett og får penger. Dette er rett og slett kjempebra! Øynene dine brenner, håndflatene dine svetter, og du vil allerede begynne å jobbe. Men trenger du å lage en nettside eller en salgsplattform?

Nettsted eller plattform for salg

Det finnes ulike løsninger for å plassere produktet på World Wide Web. Du kan lage ditt eget nettsted eller bruke tredjepartsplattformer (grupper, sider på sosiale nettverk, oppslagstavler, etc.). La oss stoppe ved siden.

Du bestilte en nettside, tok en ferdig mal, eller laget den selv ved hjelp av en nettsidebygger (du kan google CMS), det spiller ingen rolle. Så plasserte de en haug med silikonsokker av forskjellige typer og var fornøyde.

Beklager å forstyrre lesingen. Bli med på telegramkanalen min. Nye kunngjøringer av artikler, utvikling av digitale produkter og veksthack, alt er der. Venter på deg! La oss fortsette...

Betalingssystemer

Men for at en person skal kunne kjøpe fra deg her og nå, vil det være nødvendig å justere betalingssystemene. Dette er en slags tjeneste som lar deg gjøre kjøp på nett gjennom: bankkort, internettpenger, mobiltelefoner og en haug med andre ting. For dette må du dele en prosentandel av transaksjonene, men på denne måten vil du gjøre livet ditt mye enklere.

Velg tjenesten som passer deg. Et sted vil prosentandelen være høyere, og et eller annet sted vil det være et abonnement eller noe annet. Bare gjør litt research. Legg inn den nødvendige koden på nettstedet ditt, koble alle transaksjoner til kortkontoen din og voila!

Det ser ut til å være alt. Det er en nettside, produktkort også, og til og med "kjøp"-knappen fungerer, men noe mangler... Det er ingen strøm av kunder som vil kjøpe.

Kundestrømmer

Hvor: CAC = Kostnad for å skaffe en ny kunde. MCC (markedsføringskampanjekostnader) = Den totale kostnaden for markedsføringsutgifter rettet mot å tiltrekke kunder (men ikke beholde dem). W (lønn) = Lønn for markedsførere og salgssjefer. S (programvare) = Kostnaden for programvare som brukes i reklame og salg (for eksempel salgsplattformen som brukes, markedsføringsautomatisering, A/B-testing, analysetjenester osv.). PS (profesjonelle tjenester) = Kostnader for profesjonelle tjenester levert til markeds- og salgsavdelinger (design, rådgivning, etc.). O (annet) = Andre faste kostnader knyttet til markeds- og salgsavdelingene. CA (kundeoppkjøpt) = Totalt antall tiltrukket kunder.

Men vi må ikke glemme kvaliteten på klienten LTV vil hjelpe her.

Viktige beregninger: LTV

Live Time Value, kundens livssyklus, er en annen indikator i e-handel som må tas i betraktning. Den viser hvor mye inntekt en klient i gjennomsnitt bringer inn. Det er forskjellige tilnærminger til beregning, jeg valgte den faktiske basert på profitt, som en av de mest nøyaktige.

Dette er ganske enkelt summen av den totale inntekten over hele kjøpshistorikken for hver enkelt kunde. Legg summen av alle kundekjøp (transaksjoner) til transaksjon N, der transaksjon N er det siste kjøpet kunden gjorde med din bedrift. Hvis du har tilgang til alle kundetransaksjonsdata, kan du enkelt beregne dette ved hjelp av Excel.

LTV = (transaksjon 1 + transaksjon 2 + transaksjon 3... + transaksjon N) x resultatandel i inntekt.

Beregning av LTV basert på netto fortjeneste viser til syvende og sist den faktiske fortjenesten en kunde bringer til bedriften din. Dette tar hensyn til kostnadene for kundeservice, kostnadene for oppbevaring, kostnadene for attraksjon, etc. Resultatet er et helt kompleks av beregninger basert på individuelle data. Den totale fortjenesten generert per kunde over tid vil gi deg en nøyaktig forståelse av lønnsomheten til kundene dine så langt.

Andre tilnærminger finner du på.

Viktige indikatorer: CAC og LTV ratio

For å forstå levedyktigheten til en virksomhet, er det veldig viktig å se på forholdet mellom de to nevnte CAC:LTV-forholdene.

  • Mindre enn 1:1 - Du suser i full fart mot konkursen.
  • 1:1 – Du taper penger på hver tiltrukket klient.
  • 1:2 – Det virker bra, men det ser ut til at du ikke investerer nok penger, og du kan utvikle deg raskere. Lanser mer aggressive kampanjer for kundeanskaffelse og oppnå priser nær 1:3.
  • 1:3 – Ideelt forhold. Du har en blomstrende virksomhet og en sterk forretningsmodell.

Viktige indikatorer: ROI ikke glem

Som vi diskuterte ovenfor, i e-handel må du tydelig forstå om det er lønnsomt å bruke en oppkjøpskanal eller ikke. I tillegg til LTV og CAC, er det en annen viktig indikator: ROI. Den viser om investeringen din, i vårt tilfelle i reklame, har lønnet seg. Det er. hvor mye 1 investert rubel ga oss til slutt.

En veldig enkel formel brukes for beregningen:

Der «Kampanjeinntekter» er forskjellen mellom inntekten fra kanalen og kostnaden for produktet ditt. Og for å beregne fortjeneste, trekk fra annonseringskostnader.

Dermed vil en mer detaljert formel se slik ut:

ROI = (Kanalinntekter – Kostnad) – Annonseringskostnader / Annonseutgifter x 100 %

Les et mer detaljert eksempel med utregning. Faktisk er denne enkle formelen plassert i den samme Excel-tabellen, hvor alt beregnes automatisk.

Alle de tre indikatorene vi har diskutert er viktige i e-handel. Hver av dem lar deg finne flaskehalser i strømmene dine og jobbe med dem. Det er her vekstpotensialet for næringslivet ligger. Jeg la til litt mer til modellen vår med sokker.

Det er umulig å sette alt inn i ett materiale, og hvem vil lese det så lenge? Senere skal jeg lage en egen guide om nyansene ved e-handel som kan forstyrre salget.

Total

Totalt sett har du nå en generell forståelse av netthandel eller e-handel. Videre, som de sier: "Djevelen er i detaljene." Studer hver kanal separat, beregn ytelsesindikatorer og se etter ny innsikt i de små tingene. Internett-salg for deg, og mer! Og jeg har ett materiale til.

Ja, jeg glemte nesten, godt nytt år, kjære lesere! Jeg ønsker deg store seire og prestasjoner neste år!

Takket være World Wide Web kan nesten hvem som helst gi informasjon på nettet i en form som er lett for øynene og som kan spres bredt. Du har uten tvil surfet på Internett og sett andre sider, og nå vet du sikkert at skumle akronymer som "HTTP" og "HTML" ganske enkelt er en forkortelse for "Web" og "måten informasjon uttrykkes på Internett." Du har kanskje allerede litt erfaring med å presentere informasjon på Internett.

Internett har vist seg å være et ideelt medium for å distribuere informasjon, noe man kan se av dets enorme popularitet og utbredte utvikling. Selv om noen har stilt spørsmål ved nytten av Internett og tilskriver dens utbredte utvikling og popularitet hovedsakelig påtrengende reklame, er Internett unektelig et viktig medium for å presentere all slags informasjon. Ikke bare er det mange tjenester tilgjengelig for å gi oppdatert informasjon (nyheter, vær, direktesendte sportsbegivenheter) og referansemateriale elektronisk, det er også betydelige mengder andre typer data tilgjengelig. Skattemyndighetene, som distribuerte alle sine 1995 selvangivelsesskjemaer og annen informasjon via World Wide Web, innrømmet nylig å ha mottatt fanmail for nettstedet. Hvem hadde trodd at skattemyndighetene noen gang ville motta fanmail? Dette var ikke fordi nettstedet hans var godt designet, men fordi det hadde vist seg å være et virkelig nyttig verktøy for tusenvis, kanskje millioner, av mennesker.

Hva gjør nettet unikt og en så attraktiv informasjonstjeneste? Først av alt gir det et hypermedia-grensesnitt til data. Tenk på datamaskinens harddisk. Vanligvis uttrykkes data på en lineær måte, som ligner på et filsystem. For eksempel har du en rekke mapper, og inne i hver mappe er det enten dokumenter eller andre mapper. Nettet bruker et annet paradigme for å uttrykke informasjon kalt hypermedia. Et hypertekstgrensesnitt består av et dokument og lenker. Lenker er ord som klikkes for å se andre dokumenter eller finne andre typer informasjon. Nettet utvider konseptet hypertekst til å omfatte andre typer medier, som grafikk, lyder, video (derav navnet "hypermedia"). Ved å velge tekst eller grafikk på et dokument kan du se relatert informasjon om det valgte elementet i et hvilket som helst antall former.

Nesten alle kan dra nytte av denne enkle og unike måten å presentere og distribuere informasjon på, fra akademikere som umiddelbart ønsker å bruke data med sine kolleger til forretningsfolk som deler informasjon om bedriften sin med alle. Men selv om det å gi informasjon er ekstremt viktig, har mange de siste årene følt at det å motta informasjon er en like viktig prosess.

Selv om nettet gir et unikt hypermedia-grensesnitt for informasjon, er det mange andre effektive måter å distribuere data på. For eksempel eksisterte nettverkstjenester som File Transfer Protocol (FTP) og Gopher-nyhetsgruppen lenge før World Wide Web. Elektronisk post har vært det primære mediet for kommunikasjon og informasjonsutveksling på Internett og de fleste andre nettverk nesten helt fra begynnelsen av disse nettverkene. Hvorfor har Internett blitt en så populær måte å distribuere informasjon på? Multimediaaspektet ved Internett har bidratt betydelig til dets enestående suksess, men for at Internett skal være mest effektivt, må det være interaktivt.

Uten muligheten til å motta brukerinndata og gi informasjon, ville nettet vært et fullstendig statisk miljø. Informasjonen vil kun være tilgjengelig i formatet spesifisert av forfatteren. Dette ville undergrave en av egenskapene til databehandling generelt: interaktiv informasjon. For eksempel, i stedet for å tvinge brukeren til å se flere dokumenter som om han eller hun ser gjennom en bok eller ordbok, ville det være bedre å la brukeren identifisere nøkkelord om et emne av interesse. Brukere kan tilpasse presentasjonen av data i stedet for å stole på en rigid struktur definert av innholdsleverandøren.

Begrepet "webserver" kan være misvisende fordi det kan referere til både den fysiske maskinen og programvaren den bruker for å kommunisere med nettlesere. Når en nettleser ber om en gitt webadresse, kobles den først til maskinen via Internett, og sender webserverprogramvaren en forespørsel om dokumentet. Denne programvaren kjører kontinuerlig, venter på at slike forespørsler kommer og svarer deretter.

Selv om servere kan sende og motta data, har serveren i seg selv begrenset funksjonalitet. For eksempel kan den mest primitive serveren bare sende den nødvendige filen til nettleseren. Serveren vet vanligvis ikke hva den skal gjøre med denne eller den ekstra inngangen. Hvis ISPen ikke forteller serveren hvordan denne tilleggsinformasjonen skal håndteres, vil serveren mest sannsynlig ignorere inndataene.

For at serveren skal kunne utføre andre operasjoner i tillegg til å søke og sende filer til nettleseren, må du vite hvordan du utvider funksjonaliteten til serveren. En webserver kan for eksempel ikke søke i en database basert på et nøkkelord angitt av en bruker og returnere flere samsvarende dokumenter med mindre en slik funksjon er programmert inn i serveren på en eller annen måte.

Hva er CGI?

Common Gateway Interface (CGI) er et grensesnitt til serveren som lar deg utvide funksjonaliteten til serveren. Ved å bruke CGI kan du interagere interaktivt med brukere som har tilgang til nettstedet ditt. På et teoretisk nivå lar CGI serveren kunne parse (tolke) input fra nettleseren og returnere informasjon basert på brukerens input. På et praktisk nivå er CGI et grensesnitt som lar en programmerer skrive programmer som enkelt kommuniserer med en server.

Vanligvis, for å utvide serverens muligheter, må du endre serveren selv. Denne løsningen er uønsket fordi den krever forståelse for det nedre laget av Internett-protokollnettverksprogrammering. Dette vil også kreve redigering og rekompilering av serverkildekoden eller skriving av en tilpasset server for hver oppgave. La oss si at du vil utvide serverens muligheter slik at den fungerer som en nett-til-e-post-gateway, som tar brukerangitt informasjon fra nettleseren og sender den til en annen bruker. Serveren må sette inn kode for å analysere inngangen fra nettleseren, videresende den via e-post til den andre brukeren og videresende svaret tilbake til nettleseren over nettverkstilkoblingen.

For det første krever en slik oppgave tilgang til serverkoden, noe som ikke alltid er mulig.

For det andre er det vanskelig og krever omfattende teknisk kunnskap.

For det tredje gjelder dette kun en bestemt server. Hvis du trenger å flytte serveren til en annen plattform, må du kjøre eller i det minste bruke mye tid på å portere kode til den plattformen.

Hvorfor CGI?

CGI tilbyr en bærbar og enkel løsning på disse problemene. CGI-protokollen definerer en standard måte for programmer å kommunisere med en webserver. Uten noen spesiell kunnskap kan du skrive et program på et hvilket som helst maskinspråk som grensesnitt og kommuniserer med webserveren. Dette programmet vil fungere med alle webservere som forstår CGI-protokollen.

CGI-kommunikasjon gjøres ved å bruke standard input og output, noe som betyr at hvis du vet hvordan du skriver ut og leser data ved å bruke programmeringsspråket ditt, kan du skrive en webserverapplikasjon. Bortsett fra å analysere input og output, er programmering av CGI-applikasjoner nesten tilsvarende programmering av alle andre applikasjoner. For å programmere programmet "Hello, World!", bruker du for eksempel språkets utskriftsfunksjoner og formatet som er definert for CGI-programmer for å skrive ut den tilsvarende meldingen.

Velge et programmeringsspråk

Fordi CGI er et universelt grensesnitt, er du ikke begrenset til noe spesifikt maskinspråk. Et viktig spørsmål som ofte stilles er: hvilke programmeringsspråk kan brukes til CGI-programmering? Du kan bruke et hvilket som helst språk som lar deg gjøre følgende:

  • Skriv ut til standard utskrift
  • Les fra standardinndata
  • Les fra variable moduser

Nesten alle programmeringsspråk og mange skriptspråk gjør disse tre tingene, og du kan bruke hvilken som helst av dem.

Språk faller inn i en av følgende to klasser: oversatt og tolket. Et oversatt språk som C eller C++ er vanligvis mindre og raskere, mens tolkede språk som Perl eller Rexx noen ganger krever at en stor tolk lastes ved oppstart. I tillegg kan du distribuere binære koder (kode som oversettes til maskinspråk) uten kildekode hvis språket ditt er oversettbart. Å distribuere tolkbare skript betyr vanligvis å distribuere kildekode.

Før du velger språk, må du først vurdere prioriteringene dine. Du må veie fordelene med hastigheten og effektiviteten til ett programmeringsspråk mot programmeringsvennligheten til et annet. Hvis du har et ønske om å lære et annet språk, i stedet for å bruke det du allerede kan, vei nøye fordelene og ulempene med begge språkene.

De to mest brukte språkene for CGI-programmering er C og Perl (som begge er dekket i denne boken). Begge har klare fordeler og ulemper. Perl er et språk på meget høyt nivå, og samtidig et kraftig språk, spesielt egnet for å analysere tekst. Selv om dens brukervennlighet, fleksibilitet og kraft gjør det til et attraktivt språk for CGI-programmering, gjør dens relativt store størrelse og langsommere drift det noen ganger uegnet for noen applikasjoner. C-programmer er mindre, mer effektive og gir systemkontroll på lavere nivå, men er mer komplekse å programmere, har ikke lette innebygde tekstbehandlingsrutiner og er vanskeligere å feilsøke.

Hvilket språk er best egnet for CGI-programmering? Den du anser som mer praktisk fra et programmeringssynspunkt. Begge er like effektive for programmering av CGI-applikasjoner, og med de riktige bibliotekene har begge lignende funksjoner. Men hvis du har en vanskelig tilgjengelig server, kan du bruke mindre, oversatte C-programmer Hvis du raskt trenger å skrive en applikasjon som krever mye tekstbehandlingsarbeid, kan du bruke Perl i stedet.

Advarsler

Det er noen viktige alternativer til CGI-applikasjoner. Mange servere inkluderer nå API-programmering, som gjør det enklere å programmere direkte serverutvidelser i motsetning til frittstående CGI-applikasjoner. API-servere er generelt mer effektive enn CGI-programmer. Andre servere inkluderer innebygd funksjonalitet som kan håndtere spesielle ikke-CGI-elementer, for eksempel databasekobling. Til slutt kan noen applikasjoner håndteres av noen nye klient-side (i stedet for server-side) teknologier som Java. Med så raske endringer i teknologi, vil CGI raskt bli foreldet?

Neppe. CGI har flere fordeler i forhold til nyere teknologier.

  • Den er allsidig og bærbar. Du kan skrive en CGI-applikasjon ved å bruke nesten alle programmeringsspråk på hvilken som helst plattform. Noen av alternativene, som server-API, begrenser deg til visse språk og er mye vanskeligere å lære.
  • Det er lite sannsynlig at klientsideteknologier som Java vil erstatte CGI, fordi det er noen applikasjoner som serversideapplikasjoner er mye bedre egnet til å kjøre.
  • Mange av begrensningene til CGI er begrensninger for HTML eller HTTP. Ettersom Internett-standarder som helhet utvikler seg, utvikler CGI-funksjonene seg også.

Sammendrag

Common Gateway Interface er protokollen som programmer samhandler med webservere med. Allsidigheten til CGI gir programmerere muligheten til å skrive gateway-programmer på nesten alle språk, selv om det er mange avveininger knyttet til forskjellige språk. Uten denne muligheten ville det være vanskelig å lage interaktive nettsider, i beste fall kreve servermodifikasjoner, og interaktivitet ville være utilgjengelig for de fleste brukere som ikke er nettstedadministratorer.

Kapittel 2: Grunnleggende

For flere år siden opprettet jeg en side for en høyskole ved Harvard der folk kunne sende inn kommentarer om dem. På den tiden var Internett ungt og dokumentasjon var knapp. Jeg, som mange andre, stolte på kort dokumentasjon og programmeringssystemer laget av andre for å lære meg selv CGI-programmering. Selv om denne studiemetoden krevde litt søking, mange eksperimenter og skapte mange spørsmål, var den veldig effektiv. Dette kapittelet er resultatet av mitt tidlige arbeid med CGI (med noen få justeringer, selvfølgelig).

Selv om det tar litt tid å forstå og bli dyktig med det vanlige gateway-grensesnittet, er selve protokollen ganske enkel. Alle som har noen grunnleggende programmeringskunnskaper og er kjent med nettet kan raskt lære å programmere ganske komplekse CGI-applikasjoner akkurat som jeg og andre lærte å gjøre for flere år siden.

Formålet med dette kapittelet er å presentere det grunnleggende om CGI på en omfattende, om enn fortettet måte. Hvert konsept som diskuteres her presenteres i detalj i påfølgende kapitler. Men etter å ha fullført dette kapittelet, kan du umiddelbart begynne å programmere CGI-applikasjoner. Når du har nådd dette nivået, kan du lære detaljene med CGI, enten ved å lese resten av denne boken eller ganske enkelt eksperimentere på egenhånd.

Du kan koke ned CGI-programmering til to oppgaver: motta informasjon fra nettleseren og sende informasjon tilbake til nettleseren. Dette gjøres ganske intuitivt når du blir kjent med normal bruk av CGI-applikasjoner. Ofte blir brukeren bedt om å fylle ut et eller annet skjema, for eksempel sette inn navnet sitt. Når brukeren fyller ut skjemaet og trykker Enter, sendes denne informasjonen til CGI-programmet. CGI-programmet må da konvertere denne informasjonen til noe den forstår, behandle den deretter, og deretter sende den tilbake til nettleseren, enten det er en enkel bekreftelse eller et resultat av et søk i en flerbruksdatabase.

Med andre ord krever programmering av CGI å forstå hvordan man mottar input fra nettleseren og hvordan man sender utdata tilbake. Hva som skjer mellom input- og output-stadiene til et CGI-program avhenger av utviklerens mål. Du vil finne at hovedvanskeligheten i CGI-programmering ligger i dette mellomstadiet; Når du først har lært å jobbe med input og output, er det i hovedsak nok til å bli en CGI-utvikler.

I dette kapittelet lærer du prinsippene bak CGI-inndata og -utdata, samt andre grunnleggende ferdigheter du trenger for å skrive og bruke CGI, inkludert ting som å lage HTML-skjemaer og navngi CGI-programmene dine. Dette kapittelet dekker følgende emner:

  • Tradisjonelt program "Hei, verden!";
  • CGI Output: Sender informasjon tilbake for visning i en nettleser;
  • Konfigurere, installere og kjøre programmet. Du vil lære om ulike nettplattformer og servere;
  • CGI-inngang: Tolkning av informasjon sendt av nettleseren. Introduksjon til noen nyttige programmeringsbiblioteker for å analysere slike input;
  • Et enkelt eksempel: det dekker alle leksjonene i et gitt kapittel;
  • Programmeringsstrategi.

På grunn av dette kapitlets natur berører jeg bare noen emner. Ikke bekymre deg; Alle disse emnene er dekket mye mer i dybden i andre kapitler.

Hei Verden!

Du starter med et tradisjonelt innledende programmeringsproblem. Du skal skrive et program som viser "Hello, World!" på nettleseren din. Før du skriver dette programmet, må du forstå hvilken informasjon nettleseren forventer å motta fra CGI-programmer. Du må også vite hvordan du kjører dette programmet slik at du kan se det i aksjon.

CGI er språkuavhengig, så du kan implementere dette programmet på alle språk. Flere forskjellige språk brukes her for å demonstrere uavhengigheten til hvert språk. I Perl, programmet "Hello, World!" vist i oppføring 2.1.

Oppføring 2.1. Hei Verden! i Perl. #!/usr/local/bin/perl # Hello.cgi - Min første CGI-programutskrift "Content-Type: text/html\n\n"; skrive ut " \n"; skriv ut " Hei Verden!"; skrive ut "\n"; skriv ut " \n"; skriv ut "

Hei Verden!

\n"; skriv ut "

\n";

Lagre dette programmet som hello.cgi, og installer det på riktig sted. (Hvis du ikke er sikker på hvor det er, ikke bekymre deg; du vil finne ut av "Installere og kjøre et CGI-program" senere i dette kapittelet.) For de fleste servere er katalogen du trenger cgi-bin . Ring nå programmet fra nettleseren din. For de fleste betyr dette å åpne følgende enhetlige ressurssøker (URL):

http://vertsnavn/katalognavn/hello.cgi

Vertsnavn er navnet på webserveren din, og katalognavn er katalogen der du legger hello.cgi (sannsynligvis cgi-bin).

Splitting hello.cgi

Det er et par ting å merke seg om hello.cgi.

Først bruker du enkle utskriftskommandoer. CGI-programmer krever ingen spesielle filbeskrivelser eller utdatabeskrivelser. For å sende utdata til nettleseren, bare skriv ut til standard.

For det andre, merk at innholdet i den første utskriftserklæringen (Content-Type: text/html) ikke vises i nettleseren din. Du kan sende hvilken som helst informasjon du vil tilbake til nettleseren (HTML-side, grafikk eller lyd), men først må du fortelle nettleseren hva slags data du sender den. Denne linjen forteller nettleseren hva slags informasjon du kan forvente - i dette tilfellet en HTML-side.

For det tredje heter programmet hello.cgi. Du trenger ikke alltid å bruke .cgi-utvidelsen med navnet på CGI-programmet. Selv om kildekoden for mange språk også bruker filtypen .cgi, brukes den ikke til å angi språktypen, men er en måte for serveren å identifisere filen som en kjørbar fil i stedet for en grafikkfil, HTML-fil eller tekstfil. Servere er ofte konfigurert til å bare forsøke å kjøre de filene som har denne utvidelsen, og viser innholdet til alle andre. Selv om det ikke er nødvendig å bruke .cgi-utvidelsen, anses det fortsatt som god praksis.

Generelt består hello.cgi av to hoveddeler:

  • forteller nettleseren hvilken informasjon de kan forvente (innholdstype: text/html)
  • forteller nettleseren hva den skal vise (Hei, verden!)

Hei Verden! i C

For å vise språkuavhengigheten til CGI-programmer, viser Listing 2.2 ekvivalenten til hello.cgi-programmet skrevet i C.

Oppføring 2.2. Hei Verden! i C. /* hello.cgi.c - Hei, World CGI */ #include int main() ( printf("Innholdstype: text/html\r\n\r\n"); printf(" \n"); printf(" Hei Verden!\n"); printf("\n"); printf(" \n"); printf("

Hei Verden!

\n"); printf("

\n"); )

Merk

Merk at Perl-versjonen av hello.cgi bruker Content-Type print ": text/html\n\n "; Mens versjon C bruker Printf("Content-Type: text/html\r\n\r\n");

Hvorfor skriver Perl ut setningen med to nye linjer (\n) mens C printf slutter med to vognretur og nye linjer (\r\n)?

Teknisk sett forventes overskrifter (alle utdata før den tomme linjen) å være atskilt med vognretur og nye linjer. Dessverre, på DOS- og Windows-maskiner, oversetter Perl \r som en ny linje i stedet for som en vognretur.

Selv om Perls unntak er teknisk feil, vil det fungere på nesten alle protokoller og er like bærbart på tvers av alle plattformer. Derfor, i alle Perl-eksemplene i denne boken, bruker jeg linjeseparerende topptekster i stedet for vognretur og linjeskift.

En passende løsning på dette problemet er presentert i kapittel 4, konklusjon.

Verken webserveren eller nettleseren bryr seg om hvilket språk som brukes til å skrive programmet. Selv om hvert språk har fordeler og ulemper som et CGI-programmeringsspråk, er det best å bruke det språket du er mest komfortabel med å jobbe med. (Valget av programmeringsspråk er diskutert mer detaljert i kapittel 1, "Common Gateway Interface (CGI)").

CGI-gjengivelse

Nå kan du se nærmere på problemet med å sende informasjon til nettleseren. Fra "Hello, World!"-eksemplet kan du se at nettlesere forventer to sett med data: en header, som inneholder informasjon som for eksempel hvilken informasjon som skal vises (f.eks. Innholdstype: linje) og faktisk informasjon (hva nettleseren skjermer). Disse to opplysningene er atskilt med en tom linje.

Overskriften kalles HTTP-overskriften. Den gir viktig informasjon om informasjonen som nettleseren skal motta. Det finnes flere forskjellige typer HTTP-hoder, og den vanligste er den du har brukt før: Content-Type: header. Du kan bruke forskjellige kombinasjoner av HTTP-hoder, atskilt med vognretur og nylinjer (\r\n). Den tomme linjen som skiller overskriften fra dataene består også av en vognretur og en ny linje (hvorfor begge er nødvendig er kort diskutert i det foregående notatet og detaljert i kapittel 4). Du vil lære om andre HTTP-hoder i kapittel 4; For øyeblikket har du å gjøre med Content-Type: header.

Content-Type: Overskriften beskriver typen data som CGI returnerer. Det riktige formatet for denne overskriften er:

Innholdstype: undertype/type

Der undertype/type er den riktige typen Multipurpose Internet Mail Extensions (MIME). Den vanligste MIME-typen er HTML-typen: text/html. Tabell 2.1 viser noen flere vanlige MIME-typer som vil bli diskutert; En mer fullstendig liste og analyse av MIME-typer er gitt i kapittel 4.

Merk

MIME ble opprinnelig oppfunnet for å beskrive innholdet i e-postmeldinger. Det har blitt en ganske vanlig måte å representere informasjon av innholdstype. Du kan lese mer om MIME i RFC1521. RFC-er på Internett står for Requests for Comments, som er sammendrag av beslutninger tatt av grupper på Internett som prøver å sette standarder. Du kan se resultatene av RFC1521 på følgende adresse: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabell 2.1. Noen vanlige MIME-typer. MIME Type Beskrivelse Tekst/html Hypertekst Markup Language (HTML) Tekst/ren tekstfiler Bilde/gif Grafikkfiler GIF Bilde/jpeg Komprimerte grafikkfiler JPEG-lyd/grunnleggende lydfiler Sun *.au Audio/x-wav Windows-filer *

Etter overskriften og en tom linje skriver du ganske enkelt ut dataene i skjemaet du trenger. Hvis du sender HTML, skriv ut HTML-taggene og dataene til stdout etter overskriften. Du kan også sende grafikk, lyd og andre binære filer ved ganske enkelt å skrive ut innholdet i filen til stdout. Det er gitt flere eksempler på dette i kapittel 4.

Installere og kjøre et CGI-program

Denne delen avviker noe fra CGI-programmering og snakker om å konfigurere webserveren til å bruke CGI, installere og kjøre programmer. Du vil bli mer eller mindre detaljert kjent med forskjellige servere for forskjellige plattformer, men du må grave dypere i serverens dokumentasjon for å finne det beste alternativet.

Alle servere krever plass til serverfiler og plass til HTML-dokumenter. I denne boken heter serverområdet ServerRoot, og dokumentområdet heter DocumentRoot. På UNIX-maskiner er ServerRoot vanligvis i /usr/local/etc/httpd/, og DocumentRoot er vanligvis i /usr/local/etc/httpd/htdocs/. Dette vil imidlertid ikke utgjøre noen forskjell for systemet ditt, så bytt ut alle referanser til ServerRoot og DocumentRoot med din egen ServerRoot og DocumentRoot.

Når du får tilgang til filer ved hjelp av nettleseren, spesifiserer du filen i URL-en i forhold til DocumentRoot. For eksempel, hvis serveradressen din er mymachine.org, får du tilgang til denne filen med følgende URL: http://mymachine.org/index.html

Konfigurere serveren for CGI

De fleste webservere er forhåndskonfigurert for å tillate bruk av CGI-programmer. Vanligvis indikerer to parametere for serveren om filen er en CGI-applikasjon eller ikke:

  • Utpekt katalog. Noen servere lar deg bestemme at alle filene i en angitt katalog (vanligvis kalt cgi-bin som standard) er CGI.
  • Filnavnutvidelser. Mange servere har denne forhåndskonfigurasjonen som gjør at alle filer som slutter på .cgi kan defineres som CGI.

Den utpekte katalogmetoden er noe av en relikvie fra fortiden (de aller første serverne brukte den som den eneste metoden for å avgjøre hvilke filer som var CGI-programmer), men den har flere fordeler.

  • Det holder CGI-programmer sentralisert, og forhindrer at andre kataloger blir rotete.
  • Du er ikke begrenset til noen bestemt filtype, så du kan navngi filene dine hva du vil. Noen servere lar deg angi flere forskjellige kataloger som CGI-kataloger.
  • Det gir deg også mer kontroll over hvem som kan ta opp CGI. For eksempel, hvis du har en server og støtter et system med flere brukere og ikke vil at de skal bruke sine egne CGI-skript uten først å revidere programmet av sikkerhetsgrunner, kan du angi bare disse filene i en begrenset, sentralisert katalog som CGI . Brukere må da gi deg CGI-programmer for å installere, og du kan først revidere koden for å sikre at programmet ikke har noen store sikkerhetsproblemer.

CGI-notasjonen via filtypen kan være nyttig på grunn av dens fleksibilitet. Du er ikke begrenset til én enkelt katalog for CGI-programmer. De fleste servere kan konfigureres til å gjenkjenne CGI gjennom filtypen, selv om ikke alle er konfigurert på denne måten som standard.

Advarsel

Husk viktigheten av sikkerhetsproblemer når du konfigurerer serveren din for CGI. Noen tips vil bli dekket her, og kapittel 9, Protecting CGI, dekker disse aspektene mer detaljert.

Installere CGI på UNIX-servere

Uansett hvordan UNIX-serveren din er konfigurert, er det flere trinn du må ta for å sikre at CGI-applikasjonene kjører som forventet. Webserveren din vil vanligvis kjøre som en ikke-eksisterende bruker (det vil si UNIX-brukeren ingen - en konto som ikke har noen filrettigheter og ikke kan logges på). CGI-skript (skrevet i Perl, Bourne-skallet eller et annet skriptspråk) må være kjørbare og lesbare over hele verden.

Clue

For å gjøre filene dine verdenslesbare og kjørbare, bruk følgende UNIX-tillatelseskommando: chmod 755 filnavn.

Hvis du bruker et skriptspråk som Perl eller Tcl, oppgi hele banen til tolken på den første linjen i skriptet. For eksempel vil et Perl-skript som bruker perl i /usr/local/bin-katalogen begynne med følgende linje:

#!/usr/local/bin/perl

Advarsel

Plasser aldri tolken (perl, eller Tcl Wish binær) i /cgi-bin-katalogen. Dette skaper en sikkerhetsrisiko på systemet ditt. Dette er beskrevet mer detaljert i kapittel 9.

Noen generiske UNIX-servere

NCSA- og Apache-serverne har lignende konfigurasjonsfiler fordi Apache-serveren opprinnelig var basert på NCSA-koden. Som standard er de konfigurert slik at enhver fil i cgi-bin-katalogen (som ligger som standard i ServerRoot) er et CGI-program. For å endre plasseringen av cgi-bin-katalogen, kan du redigere konfigurasjonsfilen conf/srm.conf. Formatet for å konfigurere denne katalogen er

ScriptAlias ​​​​fakedirectoryname realdirectoryname

der fakedirectoryname er pseudokatalognavnet (/cgi-bin) og realdirectoryname er hele banen der CGI-programmene faktisk er lagret. Du kan konfigurere mer enn ett ScriptAlias ​​ved å legge til flere ScriptAlias-linjer.

Standardkonfigurasjonen er tilstrekkelig for de fleste brukeres behov. Du må redigere linjen i srm.conf-filen i begge tilfeller for å finne riktig realdirectoryname. Hvis for eksempel CGI-programmene dine er plassert i /usr/local/etc/httpd/cgi-bin, skal ScriptAlias-linjen i srm.conf-filen din være omtrent slik:

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

For å få tilgang til eller koble til CGI-programmer i denne katalogen, bruk følgende URL:

Http://vertsnavn/cgi-bin/programnavn

Der vertsnavn er navnet på verten til webserveren din, og programnavn er navnet på CGI-en din.

La oss for eksempel si at du kopierer hello.cgi-programmet til cgi-bin-katalogen din (f.eks. /usr/local/etc/httpd/cgi-bin) på webserveren din kalt www.company.com. For å få tilgang til din CGI, bruk følgende URL: http://www.company.com/cgi-bin/hello.cgi

Hvis du vil konfigurere NCSA- eller Apache-serveren til å gjenkjenne en fil med en .cgi-utvidelse som en CGI, må du redigere to konfigurasjonsfiler. Først, i srm.conf-filen, fjerner du følgende linje:

AddType application/x-httpd-cgi .cgi

Dette vil knytte MIME-typen CGI til .cgi-utvidelsen. Nå må vi endre filen access.conf slik at vi kan kjøre CGI i hvilken som helst katalog. For å gjøre dette, legg til ExecCGI-alternativet på Option-linjen. Det vil se omtrent ut som følgende linje:

Opsjonsindekser FollowSymLinks ExecCGI

Nå regnes enhver fil med filtypen .cgi som CGI; få tilgang til den som en hvilken som helst fil på serveren din.

CERN-serveren er konfigurert på samme måte som Apache- og NCSA-servere. I stedet for ScriptAlias ​​bruker CERN-serveren Exec-kommandoen. For eksempel, i httpd.conf-filen, vil du se følgende linje:

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

Andre UNIX-servere kan konfigureres på samme måte; Dette er beskrevet mer detaljert i serverdokumentasjonen.

Installere CGI på Windows

De fleste servere som er tilgjengelige for Windows 3.1, Windows 95 og Windows NT er konfigurert ved hjelp av "filnavn"-metoden for CGI-gjenkjenning. Generelt krever endring av konfigurasjonen til en Windows-basert server ganske enkelt å kjøre serverkonfigurasjonsprogrammet og gjøre de nødvendige endringene.

Noen ganger kan det være vanskelig å konfigurere en server til å kjøre et skript (som Perl) riktig. I DOS eller Windows vil du ikke kunne spesifisere tolken på den første linjen i skriptet, slik tilfellet er med UNIX. Noen servere har en forhåndsdefinert konfigurasjon for å knytte visse filnavnsutvidelser til tolken. For eksempel antar mange Windows-webservere at filer som slutter på .pl er Perl-skript.

Hvis serveren ikke utfører denne typen filtilknytning, kan du definere en pakkefil som kaller både tolken og skriptet. Som med UNIX-serveren, ikke installer tolken verken i cgi-bin-katalogen eller noen netttilgjengelig katalog.

Installere CGI på Macintosh

De to mest kjente serveralternativene for Macintosh er WebStar StarNine og forgjengeren MacHTTP. Begge gjenkjenner CGI ved filtypen.

MacHTTP forstår to forskjellige utvidelser: .cgi og .acgi, som står for asynkron CGI. Vanlige CGI-programmer installert på en Macintosh (med en .cgi-utvidelse) vil holde webserveren i en opptatt tilstand til CGI kjører ferdig, noe som får serveren til å suspendere alle andre forespørsler. Asynkron CGI, derimot, lar serveren godta forespørsler selv mens den kjører.

En CGI Macintosh-utvikler som bruker en av disse webserverne, bør, hvis mulig, bare bruke .acgi-utvidelsen i stedet for .cgi-utvidelsen. Det bør fungere med de fleste CGI-programmer; hvis det ikke fungerer, endre navn på programmet til .cgi.

Utfører CGI

Når du har installert CGI, er det flere måter å utføre den på. Hvis CGI-programmet ditt er et program med kun utgang, for eksempel Hello,World-programmet, kan du kjøre det ved å gå til URL-en.

De fleste programmer kjører som en serverapplikasjon på et HTML-skjema. Før du lærer hvordan du får informasjon fra disse skjemaene, bør du først lese en kort introduksjon om hvordan du lager slike skjemaer.

En rask veiledning om HTML-skjemaer

De to viktigste kodene i et HTML-skjema er

Og . Du kan lage de fleste HTML-skjemaer med bare disse to kodene. I dette kapittelet vil du utforske disse kodene og et lite undersett av mulige typer eller attributter. . En komplett veiledning og lenke til HTML-skjemaer er i kapittel 3, HTML og skjemaer.

stikkord

stikkord brukes til å bestemme hvilken del av HTML-filen som skal brukes for brukeroppgitt informasjon. Dette refererer til hvordan de fleste HTML-sider kaller et CGI-program. Tag-attributter spesifiserer programmets navn og plassering – enten lokalt eller som en fullstendig URL, typen koding som brukes, og dataoverføringsmetoden som brukes av programmet.

Den neste linjen viser spesifikasjonene for taggen :

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

ENCTYPE-attributtet spiller ingen spesiell rolle og er vanligvis ikke inkludert i taggen . Detaljert informasjon om ENCTYPE-taggen er gitt i kapittel 3. En måte å bruke ENCTYPE på er vist i kapittel 14, "Branded Extensions".

ACTION-attributtet refererer til URL-en til CGI-programmet. Når brukeren fyller ut skjemaet og gir informasjon, blir all informasjon kodet og overført til CGI-programmet. CGI-programmet løser selv problemet med dekoding og prosessering av informasjon; Dette aspektet er diskutert i "Godta inndata fra nettleseren," senere i dette kapittelet.

Til slutt beskriver METHOD-attributtet hvordan CGI-programmet skal motta input. De to metodene, GET og POST, er forskjellige i hvordan de sender informasjon til CGI-programmet. Begge er omtalt i "Godta inndata fra nettleseren."

For at nettleseren skal tillate brukerinndata, må alle skjematagger og informasjon være omgitt av taggen . Ikke glem den avsluttende taggen

for å angi slutten av skjemaet. Du kan ikke ha et skjema i et skjema, selv om du kan sette opp et skjema som lar deg presentere deler av informasjon på forskjellige steder; dette aspektet er grundig omtalt i kapittel 3.

stikkord

Du kan opprette tekstinndatafelter, alternativknapper, avmerkingsbokser og andre måter å godta inndata ved å bruke taggen . Denne delen dekker bare tekstinntastingsfelt. For å implementere dette feltet, bruk taggen med følgende attributter:

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

NAME er det symbolske navnet på variabelen som inneholder verdien angitt av brukeren. Hvis du inkluderer tekst i VALUE-attributtet, vil denne teksten bli plassert som standard i tekstinntastingsfeltet. SIZE-attributtet lar deg spesifisere den horisontale lengden på inndatafeltet slik det vil vises i nettleservinduet. Til slutt spesifiserer MAXLENGTH maksimalt antall tegn brukeren kan skrive inn i feltet. Vær oppmerksom på at attributtene VALUE, SIZE, MAXLENGTH er valgfrie.

Skjemainnlevering

Hvis du bare har ett tekstfelt i et skjema, kan brukeren sende inn skjemaet ved å skrive inn informasjon på tastaturet og trykke Enter. Ellers må det være en annen måte for brukeren å presentere informasjonen på. Brukeren sender inn informasjon ved å bruke en send-knapp med følgende tag:

< Input type=submit >

Denne taggen oppretter en Send-knapp inne i skjemaet ditt. Når brukeren er ferdig med å fylle ut skjemaet, kan han eller hun sende inn innholdet til URL-en spesifisert av skjemaets ACTION-attributt ved å klikke på Send-knappen.

Godtar input fra nettleseren

Ovenfor var eksempler på opptak av et CGI-program som sender informasjon fra serveren til nettleseren. I virkeligheten har ikke et CGI-program som bare sender ut data mange applikasjoner (noen eksempler er gitt i kapittel 4). Den viktigste evnen til CGI er å motta informasjon fra nettleseren - funksjonen som gir nettet dens interaktive karakter.

CGI-programmet mottar to typer informasjon fra nettleseren.

  • Først innhenter den ulike deler av informasjon om nettleseren (type, hva den kan se, vertsvert og så videre), serveren (navn og versjon, utførelsesport og så videre), og CGI-programmet seg selv (programnavn og hvor det er plassert). Serveren gir all denne informasjonen til CGI-programmet gjennom miljøvariabler.
  • For det andre kan CGI-programmet motta brukerinndata. Denne informasjonen, etter å ha blitt kodet av nettleseren, sendes enten gjennom en miljøvariabel (GET-metoden) eller gjennom standardinndata (stdin - POST-metoden).

Miljøvariabler

Det er nyttig å vite hvilke miljøvariabler som er tilgjengelige for et CGI-program, både under trening og for feilsøking. Tabell 2.2 viser noen av de tilgjengelige CGI-miljøvariablene. Du kan også skrive et CGI-program som sender ut miljøvariabler og deres verdier til en nettleser.

Tabell 2.2. Noen viktige CGI-miljøvariabler Miljøvariabel Formål REMOTE_ADDR IP-adressen til klientmaskinen. REMOTE_HOST Verten for klientmaskinen. HTTP _ACCEPT Viser MIME-datatypene som nettleseren kan tolke. HTTP _USER_AGENT Nettleserinformasjon (nettlesertype, versjonsnummer, operativsystem osv.). REQUEST_METHOD GET eller POST. CONTENT_LENGTH Størrelsen på inndata hvis det sendes via POST. Hvis det ikke er noen inndata eller hvis GET-metoden brukes, er denne parameteren udefinert. QUERY_STRING Inneholder inndatainformasjonen når den sendes med GET-metoden. PATH_INFO Lar brukeren spesifisere en bane fra CGI-kommandolinjen (for eksempel http://vertsnavn/cgi-bin/programnavn/bane). PATH_TRANSLATED Oversetter den relative banen i PATH_INFO til en faktisk bane på systemet.

For å skrive en CGI-applikasjon som viser miljøvariabler, må du vite hvordan du gjør to ting:

  • Definer alle miljøvariabler og deres tilsvarende verdier.
  • Skriv ut resultater til nettleseren.

Du vet allerede hvordan du utfører den siste operasjonen. I Perl lagres miljøvariabler i den assosiative matrisen %ENV, som introduseres av navnet på miljøvariabelen. Oppføring 2.3 inneholder env.cgi, et Perl-program som oppnår målet vårt.

Oppføring 2.3. Et Perl-program, env.cgi, som skriver ut alle CGI-miljøvariablene.

#!/usr/local/bin/perl print "Innholdstype: text/html\n\n"; skrive ut " \n"; skriv ut " CGI-miljø\n"; skriv ut "\n"; skriv ut " \n"; skriv ut "

CGI-miljø

\n"; foreach $env_var (nøkler %ENV) ( skriv ut " $env_var= $ENV($env_var)
\n"; ) skriv ut "

\n";

Et lignende program kan skrives i C; den fullstendige koden er i oppføring 2.4.

Oppføring 2.4. Env.cgi.c i C. /* env.cgi.c */ #include ekstern røye **miljø; int main() ( char **p = environ; printf("Innholdstype: text/html\r\n\r\n"); printf(" \n"); printf(" CGI-miljø\n"); printf("\n"); printf(" \n"); printf("

CGI-miljø

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

\n"); )

FÅ eller POST?

Hva er forskjellen mellom GET- og POST-metodene? GET sender den kodede inndatastrengen gjennom miljøvariabelen QUERY_STRING, mens POST sender den gjennom stdin. POST er den foretrukne metoden, spesielt for skjemaer med mye data, fordi det ikke er noen begrensninger på mengden informasjon som sendes, mens med GET-metoden er mengden medieplass begrenset. GET har imidlertid en viss nyttig egenskap; dette er dekket i detalj i kapittel 5, Innspill.

For å finne ut hvilken metode som brukes, sjekker CGI-programmet miljøvariabelen REQUEST_METHOD, som settes til enten GET eller POST. Hvis den er satt til POST, lagres lengden på den kodede informasjonen i miljøvariabelen CONTENT_LENGTH.

Kodet inngang

Når en bruker sender inn et skjema, koder nettleseren først informasjonen før den sendes til serveren og deretter til CGI-applikasjonen. Når du bruker en tag , får hvert felt et symbolsk navn. Verdien angitt av brukeren er representert som verdien av variabelen.

For å fastslå dette bruker nettleseren en URL-kodingsspesifikasjon, som kan beskrives som følger:

  • Skiller forskjellige felt med et og-tegnet (&).
  • Skiller navn og verdier med likhetstegn (=), med navnet til venstre og verdien til høyre.
  • Erstatter mellomrom med plusstegn (+).
  • Erstatter alle "unormale" tegn med et prosenttegn (%) etterfulgt av en tosifret sekskantkode for tegnet.

Den endelige kodede strengen din vil ligne på følgende:

Navn1=verdi1&navn2=verdi2&navn3=verdi3 ...

Merk: Spesifikasjoner for URL-koding finnes i RFC1738.

La oss for eksempel si at du hadde et skjema som ba om navn og alder. HTML-koden som ble brukt til å vise dette skjemaet er vist i oppføring 2.5.

Oppføring 2.5. HTML-kode for å vise navn og aldersskjema.

Navn og alder

Skriv inn navnet ditt:

Skriv inn alderen din:



La oss si at brukeren skriver inn Joe Schmoe i navnefeltet og 20 i aldersfeltet. Inndataene vil bli kodet i inndatastrengen.

Navn=Joe+Schmoe&age=20

Parsing input

For at denne informasjonen skal være nyttig, må du bruke informasjonen om noe som kan brukes av CGI-programmene dine. Strategier for å analysere input er dekket i kapittel 5. I praksis vil du aldri trenge å tenke på hvordan du analyserer input, fordi flere eksperter allerede har skrevet biblioteker som gjør parsingen, tilgjengelig for alle. To slike biblioteker presenteres i dette kapittelet i følgende avsnitt: cgi -lib.pl for Perl (skrevet av Steve Brenner) og cgihtml for C (skrevet av meg).

Det generelle målet for de fleste biblioteker skrevet på forskjellige språk er å analysere en kodet streng og sette navn og verdipar inn i en datastruktur. Det er en åpenbar fordel med å bruke et språk som har innebygde datastrukturer som Perl; Imidlertid inkluderer de fleste biblioteker for lavnivåspråk som C og C++ datastruktur og subrutinekjøring.

Det er ikke nødvendig å oppnå en fullstendig forståelse av biblioteker; det er viktigere å lære å bruke dem som verktøy for å gjøre jobben til CGI-programmereren enklere.

Cgi-lib.pl

Cgi-lib.pl bruker Perl assosiative arrays. &ReadParse-funksjonen analyserer inndatastrengen og legger inn hvert navn/verdipar etter navn. For eksempel vil de tilsvarende Perl-strengene som trengs for å dekode "navn/alder"-inndatastrengen som nettopp ble presentert være

&ReadParse(*input);

Nå, for å se verdien angitt for "navn", kan du få tilgang til den assosiative matrisen $input("navn"). På samme måte, for å få tilgang til verdien av "alder", må du se på variabelen $input ("alder").

Cgihtml

C har ingen innebygde datastrukturer, så cgihtml implementerer sin egen lenkeliste for bruk med sine CGI-parserutiner. Dette definerer oppføringstypestrukturen som følger:

Typedef struct ( Char *navn; Char *verdi; ) Entrytype;

For å analysere inndatastrengen "navn/alder" i C ved hjelp av cgihtml, brukes følgende:

/* erklærer en koblet liste kalt input */ Llist input; /* analyser input og plassering i koblet liste */ read_cgi_input(&input);

For å få tilgang til aldersinformasjon kan du enten analysere listen manuelt eller bruke den tilgjengelige cgi _val()-funksjonen.

#inkludere #inkludere Char *alder = malloc(sizeof(char)*strlen(cgi_val(input, "alder")) + 1); Strcpy(alder, cgi_val(input, "alder"));

"Alder"-verdien er nå lagret i aldersstrengen.

Merk: I stedet for å bruke en enkel matrise (som char age ;), tildeler jeg dynamisk minneplass for strengalderen. Selv om dette gjør programmering vanskeligere, er det likevel viktig fra et sikkerhetssynspunkt. Dette er nærmere omtalt i kapittel 9.

Et enkelt CGI-program

Du skal skrive et CGI-program kalt nameage.cgi som håndterer navn/alder-skjemaet. Databehandling (det jeg vanligvis kaller "ting i mellom") er minimal. Nameage.cgi dekoder ganske enkelt inndataene og viser brukerens navn og alder. Selv om det ikke er mye bruk for et slikt verktøy, demonstrerer det det mest kritiske aspektet ved CGI-programmering: input og output.

Du bruker samme skjema som ovenfor, og ringer opp "navn og alder"-feltene. Ikke bekymre deg for robusthet og effektivitet ennå; løse det eksisterende problemet på den enkleste måten. Perl- og C-løsningene er vist i henholdsvis liste 2.6 og 2.7.

Oppføring 2.6. Nameage.cgi i Perl

#!/usr/local/bin/perl # nameage.cgi krever "cgi-lib.pl" &ReadParse(*input); print "Innholdstype: tekst/html\r\n\r\n"; skrive ut " \n"; skriv ut " Navn og alder\n"; skriv ut "\n"; skriv ut " \n"; skriv ut "Hei, " . $input("navn") . ". Du er\n"; print $input("alder") . " år gammel.

\n"; skriv ut "

\n";

Oppføring 2.7. nameage.cgi i C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() ( llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Navn og alder\n"); printf("\n"); printf(" \n"); printf("Hei, %s. Du er\n",cgi_val(input,"navn")); printf("%s år gammel.

\n",cgi_val(input,"alder")); printf("

\n"); )

Vær oppmerksom på at disse to programmene er nesten likeverdige. De inneholder begge parseringsrutiner som kun opptar én linje og behandler hele inndata (takket være de tilsvarende biblioteksrutinene). Utgangen er i hovedsak en modifisert versjon av ditt viktigste Hello, World!

Prøv å kjøre programmet ved å fylle ut skjemaet og klikke på Send.

Generell programmeringsstrategi

Du kjenner nå alle de grunnleggende prinsippene som kreves for CGI-programmering. Når du forstår hvordan CGI mottar informasjon og hvordan den sender den tilbake til nettleseren, avhenger den faktiske kvaliteten på det endelige produktet av dine generelle programmeringsevner. Nemlig, når du programmerer CGI (eller noe i det hele tatt, for den saks skyld), husk følgende egenskaper:

  • Enkelhet
  • Effektivitet
  • Allsidighet

De to første egenskapene er ganske vanlige: prøv å gjøre koden så lesbar og effektiv som mulig. Allsidighet gjelder mer for CGI-programmer enn for andre programmer. Når du begynner å utvikle dine egne CGI-programmer, vil du lære at det er flere grunnleggende applikasjoner som alle ønsker å lage. For eksempel er en av de vanligste og mest åpenbare oppgavene til et CGI-program å behandle et skjema og sende resultatene på e-post til en bestemt mottaker. Du kan ha flere separate skjemaer behandlet, hver med en annen mottaker. I stedet for å skrive et CGI-program for hvert enkelt skjema, kan du spare tid ved å skrive et mer generelt CGI-program som gjelder alle skjemaer.

Ved å dekke alle de grunnleggende aspektene ved CGI, har jeg gitt deg nok informasjon til å komme i gang med CGI-programmering. For å bli en effektiv CGI-utvikler må du imidlertid ha en dypere forståelse av hvordan CGI kommuniserer med serveren og nettleseren. Resten av denne boken dekker i detalj problemene som kort ble nevnt i dette kapittelet, samt applikasjonsutviklingsstrategi og fordelene og begrensningene ved protokollen.

Sammendrag

Dette kapittelet introduserte kort det grunnleggende om CGI-programmering. Du lager utdata ved å formatere dataene dine riktig og skrive ut til standard. Å motta CGI-inndata er litt mer komplekst fordi det må analyseres før det kan brukes. Heldigvis finnes det allerede flere biblioteker som utfører parsing.

Nå bør du være ganske komfortabel med å programmere CGI-applikasjoner. Resten av denne boken går mer i detalj om spesifikasjoner, tips og programmeringsstrategier for mer avanserte og komplekse applikasjoner.