Udokumenteret handel cgi. Tydelig e-handel

Andover, Massachusetts, 19. november 2003

The Commerce Group, Inc. (NYSE: CGI), den største forfatter af privat personbilforsikring i Massachusetts og CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), en førende udbyder af informationsteknologi og forretningsbehandlingstjenester, annoncerede i dag underskrivelsen af ​​en seksårig kontraktfornyelse af business process outsourcing (BPO) til en værdi af US$35 millioner. CGI vil levere fuld politikbehandlingstjenester til Massachusetts private passager- og kommercielle billinjer samt levere CGI's CollaborativeEdge agenturgrænsefladeværktøj, applikationssupport og vedligeholdelse, regulatorisk support, systemrådgivning og dokumenthåndteringstjenester.

Gerald Fels, Commerce Groups executive vice-president og CFO, udtalte: "Som den førende udbyder af private personbiler i Massachusetts, er vores mål at give vores agenter og medarbejdere tjenester, der hjælper dem med at præstere til deres højeste niveau. Gennem årene har vi opbygget et stærkt forhold til CGI. Deres system er robust og præcist, og deres team er meget fortrolige med vores interne behandlingssystemer. Det er vigtigt for os."

Serge LaPalme, præsident, forsikringsvirksomhedstjenester for CGI tilføjede: "Vi er meget glade for at kunne fortsætte vores forhold til Commerce Group, som strækker sig over 30 år. Commerce Group fortsætter med at være en af ​​vores værdsatte forretningspartnere og er strategisk til at vores succes Når vi hjælper vores kunder med at fokusere på deres kerneforretning, udnytter vi nye teknologier, når og hvor det giver mening. Vores team kender forsikringsbranchen og statens meget unikke reguleringsmiljø indgående og er derfor hurtige at tilpasse eksisterende løsninger til denne sektor i konstant udvikling."

Om The Commerce Group, Inc.

The Commerce Group, Inc., et forsikringsholdingselskab, har hovedkontor i Webster, Massachusetts. Commerce Groups ejendoms- og omfatter The Commerce Insurance Company og Citation Insurance Company i Massachusetts, Commerce West Insurance Company i Californien og American Commerce Insurance Company i Ohio. Gennem sine datterselskabers kombinerede forsikringsaktiviteter er Commerce Group rangeret som den 22. største personlige bilforsikringsgruppe i landet af A.M. Bedst, baseret på 2002 direkte skriftlige præmieoplysninger.

Om CGI
CGI blev grundlagt i 1976 og er det femtestørste uafhængige IT-servicefirma i Nordamerika baseret på dets antal ansatte. CGI og dets tilknyttede virksomheder beskæftiger 20.000 fagfolk. CGI's årlige omsætningsforløb er i øjeblikket CDN$2,8 milliarder (US$1,9 milliarder), og den 30. september 2003 var CGIs ordrebeholdning CDN$12,3 milliarder (US$9,1 milliarder). CGI leverer end-to-end IT- og forretningsprocestjenester til kunder over hele verden fra kontorer i Canada, USA og Europa. CGI's aktier er noteret på TSX (GIB.A) og NYSE (GIB) og er inkluderet i TSX 100 Composite Index samt S&P/TSX Canadian Information Technology og Canadian MidCap Indices: .

Ejere af onlinebutikker er bekendt med begrebet "elektronisk handel" de kender allerede svaret på spørgsmålet "e-handel - hvad er det?" Men hvis man kommer til bunds, kommer der mange nuancer frem, og dette begreb får en bredere betydning.

E-handel: hvad er det?

Det overordnede koncept er som følger: e-handel forstås som en vis tilgang til at drive forretning, hvilket involverer inddragelse af en række operationer, der anvender digital dataoverførsel ved levering af varer eller levering af tjenesteydelser/arbejde, herunder brug af Internettet.

Det er således enhver kommerciel transaktion, der udføres ved hjælp af et elektronisk kommunikationsmiddel.

Arbejdsgangen er som følger:

  • enhver kan være blogger eller enhver anden ejer af deres egen internetside) registrerer sig i dette system;
  • får sit eget link;
  • placerer en særlig kode på sin webside - en annonce for den valgte officielle partner i e-Commerce Partners Network vises;
  • overvåger webstedskonvertering;
  • tjener en vis procentdel for hvert køb af en besøgende på din hjemmeside, som følger et affiliatelink.

WP e-handel

Et stort antal mennesker brænder nu for e-handel, primært på grund af ønsket om at skabe deres egen hjemmeside, en unik netbutik til at sælge deres egne produkter. For at imødekomme denne voksende efterspørgsel har udviklere fokuseret på at skabe e-handelsskabeloner. Lad os se på, hvad det næste er.

Et sådant eksempel på skabelon er WordPress e-handel. Det er et indkøbskurv-plugin til WordPress (et af de mest berømte webressourcestyringssystemer), primært beregnet til at oprette og organisere blogs). Den leveres helt gratis og giver besøgende på webstedet mulighed for at foretage køb på webstedet.

Med andre ord giver dette plugin dig mulighed for at oprette en online butik (baseret på WordPress). Dette e-handelsplugin har alle de nødvendige værktøjer, indstillinger og muligheder, der passer til moderne behov.

2012: Køb af britiske Logica

I juni 2012 annoncerede CGI Group, at de havde underskrevet en aftale om at købe den største europæiske systemintegrator Logica. Transaktionsbeløbet er på 2,8 milliarder canadiske dollars (2,7 milliarder USD). Som en del af de indgåede aftaler indvilligede CGI også i at påtage sig forpligtelser til at tilbagebetale Logicas gæld på 515 millioner C$.

For at finansiere transaktionen planlægger CGI at rejse 1 milliard canadiske dollars ved at udstede yderligere 46,7 millioner aktier, låne 2 milliarder canadiske dollars fra Canadian Imperial Bank of Commerce, National Bank of Canada og The Toronto-Dominion Bank og omkring 650 millioner canadiske dollars. dollars mere - inden for den nuværende kreditgrænse.

Den foreslåede pris pr. aktie var 59,8 % højere end Logicas lukkekurs den 30. maj 2012. Handlen repræsenterer cirka 6,6 gange Logicas indtjening før renter, skat, afskrivninger og amortisering (EBITDA) for året, der sluttede 31. december 2011

Købet af Logica forventes at øge CGI's indtjening pr. aktie med 25% til 30%, eksklusive opkøbs- og integrationsomkostninger. Som et resultat af fusionen vil den resulterende virksomheds arbejdsstyrke og årlige omsætning være mere end det dobbelte af CGI. Størrelsen af ​​den kombinerede virksomheds personale vil være omkring 72 tusind ansatte placeret på kontorer i 43 lande, og den årlige omsætning vil være omkring 10,4 milliarder canadiske dollars ($9,6 milliarder).

Den nye virksomhed bliver den sjettestørste blandt verdens it-konsulenter. De største af disse er IBM, Accenture, Cap Gemini, Tata Consultancy og Infosys, ifølge Reuters estimater.

"Logica er et førende forretnings- og teknologiservicefirma med dedikerede fagfolk og pålidelige, langsigtede kunder," sagde CGI-præsident og administrerende direktør Michael Roach. "Vi er sikre på, at vi gør det rigtige til den rigtige pris og på det rigtige tidspunkt for at skabe en af ​​de få største uafhængige udbydere af end-to-end teknologitjenester."

CGI's bestyrelse godkendte enstemmigt transaktionen. Det er planlagt til at være afsluttet i september 2012 efter at have modtaget aktionærens godkendelse og efter standardprocedurer. Integrationsprocessen af ​​virksomhederne planlægges afsluttet inden for 3 år

E-handel på klar russisk. Hvordan fungerer online forretning?

På det seneste er der kommet flere og flere projekter relateret til online handel. Mens jeg studerede dette område, kunne jeg ikke finde en generel og forståelig beskrivelse af processen. Derfor besluttede jeg mig for at lave noget som et snydeark, som du altid kan henvise til for at forstå proceduren på et område som e-handel.

Jeg vil straks tage forbehold om, at jeg fokuserede på de processer og kanaler, der hjælper med at hente kunder.

E-handel: hvad handler det om?

Definitioner fra forskellige kilder siger noget om at sælge varer eller tjenesteydelser via internettet. Med enkle ord er e-handel enhver online aktivitet, hvor penge optræder.

Shopping, salg, forsikring, bank, elektroniske penge, alt er her. Tag den og underskriv den.

Fra målet

For at forstå problemet foreslår jeg, at man starter vejen helt fra slutningen. Hvad er målet for enhver virksomhed? Det er rigtigt, tjen penge. Så forestil dig ethvert produkt, for eksempel silikonestrømper. Hvorfor ikke!

Jeg tog det første, der kom til at tænke på, det viste sig, at der var noget som dette...

Vores opgave er at tjene penge på disse sokker. Vi tænker på internettet. Hmm...hvorfor ikke "klippe ned" på siden og sådan vil salget gå, bare hold mig Maldiverne! Men det er ikke så enkelt.

Jeg kan rigtig godt lide at tegne. Dette hjælper med at forstå de forskellige processer. Lad os tegne?!

Indtil videre ser vores model sådan ud. Vi tager sokker, sætter dem på internettet og får penge. Det her er simpelthen fantastisk! Dine øjne brænder, dine håndflader sveder, og du vil allerede nu i gang. Men skal du lave en hjemmeside eller en salgsplatform?

Hjemmeside eller platform til salg

Der er forskellige løsninger til at placere dit produkt på World Wide Web. Du kan oprette din egen hjemmeside eller bruge tredjepartsplatforme (grupper, sider på sociale netværk, opslagstavler osv.). Lad os stoppe ved siden.

Du bestilte en hjemmeside, tog en færdig skabelon eller oprettede den selv ved hjælp af en hjemmesidebygger (du kan google CMS), det er lige meget. Så placerede de en masse silikonestrømper af forskellige typer og var glade.

Beklager at afbryde læsningen. Tilmeld dig min telegramkanal. Friske annonceringer af artikler, udvikling af digitale produkter og væksthack, det hele er der. Venter på dig! Lad os fortsætte...

Betalingssystemer

Men for at en person kan købe hos dig her og nu, vil det være nødvendigt at justere betalingssystemerne. Dette er en slags service, der giver dig mulighed for at foretage køb online gennem: bankkort, internetpenge, mobiltelefoner og en masse andre ting. Til dette bliver du nødt til at dele en procentdel af transaktionerne, men på denne måde vil du gøre dit liv meget lettere.

Vælg den service, der passer dig. Et eller andet sted vil procentdelen være højere, og et eller andet sted vil der være et abonnement eller noget andet. Bare lav lidt research. Indsæt den nødvendige kode på din hjemmeside, link alle transaktioner til din kortkonto og voila!

Det ser ud til at være alt. Der er en hjemmeside, produktkort også, og selv "køb"-knappen virker, men der mangler noget... Der er ingen strøm af kunder, der vil købe.

Kundestrømme

Hvor: CAC = Omkostninger ved at erhverve en ny kunde. MCC (marketingcampaign cost) = De samlede omkostninger til marketingudgifter, der har til formål at tiltrække kunder (men ikke at fastholde dem). W (løn) = Løn til marketingfolk og salgschefer. S (software) = Omkostningerne ved software, der bruges til annoncering og salg (f.eks. den anvendte salgsplatform, marketingautomatisering, A/B-test, analysetjenester osv.). PS (professionelle tjenester) = Omkostninger til professionelle tjenester leveret til marketing- og salgsafdelinger (design, rådgivning osv.). O (andet) = Andre faste omkostninger relateret til marketing- og salgsafdelingerne. CA (customersacquired) = Samlet antal tiltrukne kunder.

Men vi må ikke glemme kvaliteten af ​​kunden LTV vil hjælpe her.

Vigtige målinger: LTV

Live Time Value, kundens livscyklus, er en anden indikator i e-handel, der skal tages i betragtning. Det viser, hvor meget en klient i gennemsnit indbringer. Der er forskellige tilgange til beregning, jeg valgte den faktiske baseret på profit, som en af ​​de mest nøjagtige.

Dette er blot summen af ​​den samlede omsætning over hele købshistorikken for hver enkelt kunde. Tilføj summen af ​​alle kundekøb (transaktioner) til transaktion N, hvor transaktion N er det sidste køb, kunden har foretaget hos din virksomhed. Hvis du har adgang til alle kundetransaktionsdata, så kan du nemt beregne dette ved hjælp af Excel.

LTV = (transaktion 1 + transaktion 2 + transaktion 3... + transaktion N) x overskudsandel i omsætning.

Beregning af LTV baseret på nettooverskud viser i sidste ende det faktiske overskud en kunde bringer til din virksomhed. Dette tager højde for omkostningerne ved kundeservice, omkostningerne ved fastholdelse, omkostningerne ved tiltrækning osv. Resultatet er et helt kompleks af beregninger baseret på individuelle data. Det samlede overskud, der genereres pr. kunde over tid, vil give dig en præcis forståelse af dine kunders rentabilitet til dato.

Andre tilgange kan findes på.

Vigtige indikatorer: CAC og LTV ratio

For at forstå en virksomheds levedygtighed er det meget vigtigt at se på forholdet mellem de to nævnte CAC:LTV-forhold.

  • Mindre end 1:1 - Du haster med fuld fart mod konkurs.
  • 1:1 – Du taber penge på hver tiltrukket kunde.
  • 1:2 – Det virker godt, men det ser ud til, at du ikke investerer nok penge, og du kan udvikle dig hurtigere. Start mere aggressive kundehvervelseskampagner og opnå rater tæt på 1:3.
  • 1:3 – Ideelt forhold. Du har en blomstrende forretning og en stærk forretningsmodel.

Vigtige indikatorer: ROI glem ikke

Som vi diskuterede ovenfor, skal du i e-handel klart forstå, om det er rentabelt at bruge en opkøbskanal eller ej. Ud over LTV og CAC er der en anden vigtig indikator: ROI. Det viser, om din investering, i vores tilfælde i annoncering, har givet pote. Det er. hvor meget 1 investeret rubel indbragte os i sidste ende.

En meget simpel formel bruges til beregningen:

Hvor "Kampagneindtægt" er forskellen mellem indtægten fra kanalen og prisen på dit produkt. Og for at beregne fortjeneste skal du trække reklameomkostninger fra.

En mere detaljeret formel ser således ud:

ROI = (Kanalomsætning – Omkostninger) – Annonceringsomkostninger / Annonceringsudgifter x 100 %

Læs et mere detaljeret eksempel med beregning. Faktisk er denne simple formel placeret i den samme Excel-tabel, hvor alt beregnes automatisk.

Alle tre indikatorer, som vi har diskuteret, er vigtige i e-handel. Hver af dem giver dig mulighed for at finde flaskehalse i dine flows og arbejde med dem. Det er her vækstpotentialet for erhvervslivet ligger. Jeg tilføjede lidt mere til vores model med sokker.

Det er umuligt at samle alt i ét materiale, og hvem vil læse det så længe? Senere vil jeg lave en separat guide om nuancerne i e-handel, der kan forstyrre salget.

Total

Samlet set har du nu en generel forståelse af online handel eller e-handel. Yderligere, som de siger: "Djævelen er i detaljerne." Studer hver kanal separat, beregn præstationsindikatorer og se efter ny indsigt i de små ting. Internetsalg til dig og mere! Og jeg har endnu et materiale.

Ja, jeg glemte næsten, godt nytår, kære læsere! Jeg ønsker dig store sejre og præstationer næste år!

Takket være World Wide Web kan næsten enhver give information online i en form, der er let for øjnene og kan udbredes bredt. Du har uden tvivl surfet på internettet og set andre sider, og nu ved du sikkert, at skræmmende akronymer som "HTTP" og "HTML" simpelthen er en forkortelse for "Web" og "den måde, information udtrykkes på internettet." Du har muligvis allerede en vis erfaring med at præsentere information på internettet.

Internettet har vist sig at være et ideelt medium til at distribuere information, som det kan ses på dets enorme popularitet og udbredte udvikling. Selvom nogle har sat spørgsmålstegn ved internettets anvendelighed og tilskriver dets udbredte udvikling og popularitet hovedsageligt påtrængende annoncering, er internettet unægteligt et vigtigt medie til at præsentere alle former for information. Ikke alene er der mange tjenester tilgængelige til at levere ajourførte oplysninger (nyheder, vejr, live sportsbegivenheder) og referencemateriale elektronisk, der er også betydelige mængder af andre typer data tilgængelige. IRS, som distribuerede alle sine 1995 selvangivelsesformularer og andre oplysninger via World Wide Web, indrømmede for nylig at have modtaget fanmail til sit websted. Hvem ville have troet, at IRS nogensinde ville modtage fanmail? Dette var ikke fordi hans websted var godt designet, men fordi det havde vist sig at være et virkelig nyttigt værktøj for tusinder, måske millioner, af mennesker.

Hvad gør nettet unikt og så attraktiv en informationstjeneste? Først og fremmest giver det en hypermediegrænseflade til data. Tænk på din computers harddisk. Typisk udtrykkes data på en lineær måde, svarende til et filsystem. For eksempel har du et antal mapper, og inde i hver mappe er der enten dokumenter eller andre mapper. Internettet bruger et andet paradigme til at udtrykke information kaldet et hypermedie. En hypertekstgrænseflade består af et dokument og links. Links er ord, der klikkes på for at se andre dokumenter eller finde andre typer information. Internettet udvider begrebet hypertekst til at omfatte andre typer medier, såsom grafik, lyde, video (deraf navnet "hypermedia"). Valg af tekst eller grafik på et dokument giver dig mulighed for at se relaterede oplysninger om det valgte element i et vilkårligt antal former.

Næsten alle kan drage fordel af denne enkle og unikke måde at præsentere og distribuere information på, lige fra akademikere, der ønsker at bruge data med det samme med deres kolleger, til forretningsfolk, der deler information om deres virksomhed med alle. Men selvom det at give information er ekstremt vigtigt, har mange i de sidste par år følt, at det at modtage information er en lige så vigtig proces.

Selvom internettet giver en unik hypermediegrænseflade til information, er der mange andre effektive måder at distribuere data på. For eksempel eksisterede netværkstjenester som File Transfer Protocol (FTP) og Gopher-nyhedsgruppen længe før World Wide Web. Elektronisk post har været det primære medium for kommunikation og informationsudveksling på internettet og de fleste andre netværk næsten lige fra begyndelsen af ​​disse netværk. Hvorfor er internettet blevet så populær en måde at distribuere information på? Multimedieaspektet af internettet har bidraget væsentligt til dets hidtil usete succes, men for at internettet skal være mest effektivt, skal det være interaktivt.

Uden muligheden for at modtage brugerinput og give information, ville nettet være et fuldstændig statisk miljø. Oplysningerne vil kun være tilgængelige i det format, der er angivet af forfatteren. Dette ville underminere en af ​​computerens muligheder generelt: interaktiv information. For eksempel, i stedet for at tvinge brugeren til at se flere dokumenter, som om han eller hun kiggede gennem en bog eller ordbog, ville det være bedre at give brugeren mulighed for at identificere nøgleord om et emne af interesse. Brugere kan tilpasse præsentationen af ​​data i stedet for at stole på en rigid struktur defineret af indholdsudbyderen.

Udtrykket "webserver" kan være vildledende, fordi det kan referere til både den fysiske maskine og den software, den bruger til at kommunikere med internetbrowsere. Når en browser anmoder om en given webadresse, opretter den først forbindelse til maskinen via internettet og sender webserversoftwaren en anmodning om dokumentet. Denne software kører kontinuerligt, venter på, at sådanne anmodninger ankommer og svarer i overensstemmelse hermed.

Selvom servere kan sende og modtage data, har serveren i sig selv begrænset funktionalitet. For eksempel kan den mest primitive server kun sende den nødvendige fil til browseren. Serveren ved normalt ikke, hvad den skal gøre med dette eller hint ekstra input. Hvis internetudbyderen ikke fortæller serveren, hvordan denne yderligere information skal håndteres, vil serveren højst sandsynligt ignorere inputtet.

For at serveren skal kunne udføre andre handlinger udover at søge og sende filer til internetbrowseren, skal du vide, hvordan du udvider serverens funktionalitet. For eksempel kan en webserver ikke søge i en database baseret på et nøgleord indtastet af en bruger og returnere flere matchende dokumenter, medmindre en sådan funktion er blevet programmeret ind i serveren på en eller anden måde.

Hvad er CGI?

Common Gateway Interface (CGI) er en grænseflade til serveren, der giver dig mulighed for at udvide serverens funktionalitet. Ved hjælp af CGI kan du interagere interaktivt med brugere, der tilgår dit websted. På et teoretisk niveau giver CGI serveren mulighed for at parse (fortolke) input fra browseren og returnere information baseret på brugerens input. På et praktisk niveau er CGI en grænseflade, der gør det muligt for en programmør at skrive programmer, der nemt kommunikerer med en server.

For at udvide serverens muligheder skal du typisk selv ændre serveren. Denne løsning er uønsket, fordi den kræver forståelse for det nederste lag af internetprotokol-netværksprogrammering. Dette ville også kræve redigering og genkompilering af serverkildekoden eller skrivning af en brugerdefineret server for hver opgave. Lad os sige, at du vil udvide serverens muligheder, så den fungerer som en web-til-e-mail-gateway, der tager brugerindtastede oplysninger fra browseren og sender dem til en anden bruger. Serveren skal indsætte kode for at parse input fra browseren, videresende det via e-mail til den anden bruger og videresende svaret tilbage til browseren via netværksforbindelsen.

For det første kræver en sådan opgave adgang til serverkoden, hvilket ikke altid er muligt.

For det andet er det svært og kræver omfattende teknisk viden.

For det tredje gælder dette kun for en bestemt server. Hvis du skal flytte din server til en anden platform, bliver du nødt til at køre eller i det mindste bruge meget tid på at portere kode til den platform.

Hvorfor CGI?

CGI tilbyder en bærbar og enkel løsning på disse problemer. CGI-protokollen definerer en standard måde for programmer at kommunikere med en webserver. Uden nogen speciel viden kan du skrive et program på et hvilket som helst maskinsprog, der forbinder og kommunikerer med webserveren. Dette program vil fungere med alle webservere, der forstår CGI-protokollen.

CGI-kommunikation sker ved hjælp af standard input og output, hvilket betyder, at hvis du ved, hvordan du udskriver og læser data ved hjælp af dit programmeringssprog, kan du skrive en webserverapplikation. Bortset fra at analysere input og output svarer programmering af CGI-applikationer næsten til programmering af enhver anden applikation. For at programmere programmet "Hello, World!", bruger du f.eks. dit sprogs printfunktioner og det format, der er defineret for CGI-programmer, til at udskrive den tilsvarende meddelelse.

Valg af programmeringssprog

Fordi CGI er en universel grænseflade, er du ikke begrænset til noget specifikt maskinsprog. Et vigtigt spørgsmål, der ofte stilles, er: hvilke programmeringssprog kan bruges til CGI-programmering? Du kan bruge ethvert sprog, der giver dig mulighed for at gøre følgende:

  • Udskriv til standardoutput
  • Læs fra standard input
  • Læs fra variable tilstande

Næsten alle programmeringssprog og mange scriptsprog gør disse tre ting, og du kan bruge enhver af dem.

Sprog falder i en af ​​følgende to klasser: oversat og fortolket. Et oversat sprog som C eller C++ er normalt mindre og hurtigere, mens fortolkede sprog som Perl eller Rexx nogle gange kræver, at en stor tolk skal indlæses ved opstart. Derudover kan du distribuere binære koder (kode, der oversættes til maskinsprog) uden kildekode, hvis dit sprog kan oversættes. Distribution af fortolkbare scripts betyder normalt at distribuere kildekode.

Før du vælger et sprog, skal du først overveje dine prioriteter. Du skal afveje fordelene ved hastigheden og effektiviteten af ​​et programmeringssprog mod letheden ved programmering af et andet. Hvis du har et ønske om at lære et andet sprog, skal du i stedet for at bruge det, du allerede kender, nøje afveje fordele og ulemper ved begge sprog.

De to mest almindeligt anvendte sprog til CGI-programmering er C og Perl (som begge er dækket i denne bog). Begge har klare fordele og ulemper. Perl er et sprog på meget højt niveau, og samtidig et kraftfuldt sprog, specielt velegnet til at analysere tekst. Selvom dets brugervenlighed, fleksibilitet og kraft gør det til et attraktivt sprog til CGI-programmering, gør dets relativt store størrelse og langsommere betjening det nogle gange uegnet til nogle applikationer. C-programmer er mindre, mere effektive og giver systemkontrol på et lavere niveau, men er mere komplekse at programmere, har ikke lette indbyggede tekstbehandlingsrutiner og er sværere at fejlfinde.

Hvilket sprog er bedst egnet til CGI-programmering? Den, som du anser for mere bekvem ud fra et programmeringssynspunkt. Begge er lige effektive til programmering af CGI-applikationer, og med de korrekte biblioteker har begge lignende muligheder. Men hvis du har en svær tilgængelig server, kan du bruge mindre, oversatte C-programmer Hvis du hurtigt skal skrive en applikation, der kræver meget tekstbehandlingsarbejde, kan du bruge Perl i stedet.

Forsigtighedsregler

Der er nogle vigtige alternativer til CGI-applikationer. Mange servere inkluderer nu API-programmering, som gør det nemmere at programmere direkte serverudvidelser i modsætning til selvstændige CGI-applikationer. API-servere er generelt mere effektive end CGI-programmer. Andre servere inkluderer indbygget funktionalitet, der kan håndtere specielle ikke-CGI-elementer, såsom databaselinking. Endelig kan nogle applikationer håndteres af nogle nye klient-side (i stedet for server-side) teknologier som Java. Med så hurtige ændringer i teknologi, vil CGI hurtigt blive forældet?

Næsten. CGI har flere fordele i forhold til nyere teknologier.

  • Den er alsidig og bærbar. Du kan skrive en CGI-applikation ved at bruge næsten ethvert programmeringssprog på enhver platform. Nogle af alternativerne, såsom server API, begrænser dig til visse sprog og er meget sværere at lære.
  • Det er usandsynligt, at klient-side-teknologier som Java vil erstatte CGI, fordi der er nogle applikationer, som server-side applikationer er meget bedre egnede til at køre.
  • Mange af begrænsningerne ved CGI er begrænsninger af HTML eller HTTP. I takt med at internetstandarder som helhed udvikler sig, udvikler CGI-funktionerne sig også.

Resumé

Common Gateway Interface er den protokol, hvorved programmer interagerer med webservere. CGI's alsidighed giver programmører mulighed for at skrive gateway-programmer på næsten alle sprog, selvom der er mange afvejninger forbundet med forskellige sprog. Uden denne evne ville det være vanskeligt at oprette interaktive websider, i bedste fald kræve serverændringer, og interaktivitet ville være utilgængelig for de fleste brugere, der ikke er webstedsadministratorer.

Kapitel 2: Grundlæggende

For flere år siden oprettede jeg en side til et college på Harvard, hvor folk kunne indsende kommentarer om dem. På det tidspunkt var internettet ungt, og dokumentationen var knap. Jeg, som mange andre, stolede på korte dokumentations- og programmeringssystemer skabt af andre for at lære CGI-programmering. Selvom denne studiemetode krævede en del søgning, mange eksperimenter og skabte mange spørgsmål, var den meget effektiv. Dette kapitel er resultatet af mit tidlige arbejde med CGI (selvfølgelig med et par justeringer).

Selvom det tager noget tid at forstå og mestre den fælles gateway-grænseflade fuldt ud, er selve protokollen ret enkel. Enhver, der har nogle grundlæggende programmeringsfærdigheder og er fortrolig med internettet, kan hurtigt lære at programmere ret komplekse CGI-applikationer, ligesom jeg og andre lærte at gøre for flere år siden.

Formålet med dette kapitel er at præsentere det grundlæggende i CGI på en omfattende, omend fortættet måde. Hvert koncept, der diskuteres her, præsenteres i detaljer i de efterfølgende kapitler. Men efter at have afsluttet dette kapitel, kan du straks begynde at programmere CGI-applikationer. Når du når dette niveau, kan du lære forviklingerne ved CGI, enten ved at læse resten af ​​denne bog eller blot ved at eksperimentere på egen hånd.

Du kan koge CGI-programmering ned til to opgaver: at modtage information fra webbrowseren og sende information tilbage til browseren. Dette gøres ganske intuitivt, når du først bliver fortrolig med den normale brug af CGI-applikationer. Ofte bliver brugeren bedt om at udfylde en form, for eksempel at indsætte sit navn. Når brugeren udfylder formularen og trykker på Enter, sendes denne information til CGI-programmet. CGI-programmet skal derefter konvertere disse oplysninger til noget, det forstår, behandle det i overensstemmelse hermed og derefter sende det tilbage til browseren, hvad enten det er en simpel bekræftelse eller resultatet af en søgning i en multi-purpose database.

Med andre ord kræver programmering af CGI, at man forstår, hvordan man modtager input fra internetbrowseren, og hvordan man sender output tilbage. Hvad der sker mellem input- og outputstadierne i et CGI-program afhænger af udviklerens mål. Du vil opdage, at den største vanskelighed ved CGI-programmering ligger i dette mellemtrin; Når du først har lært at arbejde med input og output, er det i bund og grund nok til at blive en CGI-udvikler.

I dette kapitel lærer du principperne bag CGI-input og -output, samt andre grundlæggende færdigheder, du skal bruge for at skrive og bruge CGI, herunder ting som at oprette HTML-formularer og navngive dine CGI-programmer. Dette kapitel dækker følgende emner:

  • Traditionelt program "Hej, verden!";
  • CGI Output: Sender information tilbage til visning i en internetbrowser;
  • Konfiguration, installation og kørsel af applikationen. Du vil lære om forskellige webplatforme og servere;
  • CGI-input: Fortolkning af information sendt af webbrowseren. Introduktion til nogle nyttige programmeringsbiblioteker til at analysere sådanne input;
  • Et simpelt eksempel: det dækker alle lektionerne i et givet kapitel;
  • Programmeringsstrategi.

På grund af dette kapitels karakter berører jeg kun nogle emner. Bare rolig; Alle disse emner er behandlet meget mere dybdegående i andre kapitler.

Hej Verden!

Du starter med et traditionelt indledende programmeringsproblem. Du vil skrive et program, der viser "Hej, verden!" på din webbrowser. Før du skriver dette program, skal du forstå, hvilken information webbrowseren forventer at modtage fra CGI-programmer. Du skal også vide, hvordan du kører dette program, så du kan se det i aktion.

CGI er sproguafhængig, så du kan implementere dette program på ethvert sprog. Her bruges flere forskellige sprog for at demonstrere hvert sprogs uafhængighed. I Perl, programmet "Hej, verden!" vist i oversigt 2.1.

Fortegnelse 2.1. Hej Verden! i Perl. #!/usr/local/bin/perl # Hello.cgi - Mit første CGI program print "Content-Type: text/html\n\n"; Print " \n"; udskriv " Hej Verden!"; Print "\n"; udskriv " \n"; udskriv "

Hej Verden!

\n"; udskriv "

\n";

Gem dette program som hello.cgi, og installer det på det rigtige sted. (Hvis du ikke er sikker på, hvor det er, så fortvivl ikke; du vil finde ud af det i afsnittet "Installation og kørsel af et CGI-program" senere i dette kapitel.) For de fleste servere er den mappe, du skal bruge, cgi-bin . Ring nu til programmet fra din webbrowser. For de fleste betyder det at åbne følgende ensartede ressourcefinder (URL):

http://værtsnavn/katalognavn/hello.cgi

Værtsnavn er navnet på din webserver, og biblioteksnavn er det bibliotek, hvor du sætter hello.cgi (sandsynligvis cgi-bin).

Opdeling hello.cgi

Der er et par ting at bemærke om hello.cgi.

Først bruger du simple udskriftskommandoer. CGI-programmer kræver ingen specielle filbeskrivelser eller outputdeskriptorer. For at sende output til browseren skal du blot udskrive til stdout.

For det andet skal du bemærke, at indholdet af den første udskriftserklæring (Indholdstype: tekst/html) ikke vises i din webbrowser. Du kan sende enhver information, du ønsker, tilbage til browseren (HTML-side, grafik eller lyd), men først skal du fortælle browseren, hvilken slags data du sender den. Denne linje fortæller browseren, hvilken slags information man kan forvente - i dette tilfælde en HTML-side.

For det tredje hedder programmet hello.cgi. Du behøver ikke altid at bruge .cgi-udvidelsen med navnet på dit CGI-program. Selvom kildekoden til mange sprog også bruger filtypen .cgi, bruges den ikke til at angive sprogtypen, men er en måde for serveren at identificere filen som en eksekverbar fil i stedet for en grafikfil, HTML-fil eller tekstfil. Servere er ofte konfigureret til kun at forsøge at udføre de filer, der har denne udvidelse, og vise indholdet af alle andre. Selvom det ikke er nødvendigt at bruge .cgi-udvidelsen, betragtes det stadig som god praksis.

Generelt består hello.cgi af to hoveddele:

  • fortæller browseren, hvilken information den kan forvente (indholdstype: text/html)
  • fortæller browseren, hvad den skal vise (Hej, verden!)

Hej Verden! i C

For at vise sproguafhængigheden af ​​CGI-programmer viser Listing 2.2 ækvivalenten til hello.cgi-programmet skrevet i C.

Liste 2.2. Hej Verden! i C. /* hello.cgi.c - Hej, World CGI */ #include int main() ( printf("Indholdstype: text/html\r\n\r\n"); printf(" \n"); printf(" Hej Verden!\n"); printf("\n"); printf(" \n"); printf("

Hej Verden!

\n"); printf("

\n"); )

Bemærk

Bemærk at Perl-versionen af ​​hello.cgi bruger Content-Type print ": text/html\n\n"; Mens version C bruger Printf("Content-Type: text/html\r\n\r\n");

Hvorfor udskriver Perl operatøren med to nye linjer (\n), mens C printf slutter med to vognretur og nye linjer (\r\n)?

Teknisk set forventes overskrifter (alle output før den tomme linje) at være adskilt af vognretur og nye linjer. Desværre oversætter Perl på DOS- og Windows-maskiner som endnu en ny linje snarere end som en vognretur.

Selvom Perls undtagelse er teknisk ukorrekt, vil den fungere på næsten alle protokoller og er lige bærbar på tværs af alle platforme. Derfor bruger jeg i alle Perl-eksemplerne i denne bog newline adskillende overskrifter i stedet for vognretur og newlines.

En passende løsning på dette problem er præsenteret i kapitel 4, konklusion.

Hverken webserveren eller browseren er ligeglad med, hvilket sprog der bruges til at skrive programmet. Selvom hvert sprog har fordele og ulemper som et CGI-programmeringssprog, er det bedst at bruge det sprog, du er mest tryg ved at arbejde med. (Valget af programmeringssprog er diskuteret mere detaljeret i kapitel 1, "Common Gateway Interface (CGI)").

CGI-gengivelse

Nu kan du se nærmere på spørgsmålet om at sende information til webbrowseren. Fra "Hej, verden!"-eksemplet kan du se, at webbrowsere forventer to sæt data: en header, som indeholder information som f.eks. hvilken information der skal vises (f.eks. Indholdstype: linje) og faktisk information (hvad webbrowseren) skærme). Disse to oplysninger er adskilt af en tom linje.

Headeren kaldes HTTP-headeren. Det giver vigtige oplysninger om de oplysninger, som browseren vil modtage. Der er flere forskellige typer HTTP-headere, og den mest almindelige er den, du har brugt før: Content-Type: header. Du kan bruge forskellige kombinationer af HTTP-headere, adskilt af vognretur og nylinjer (\r\n). Den tomme linie, der adskiller overskriften fra dataene, består også af en vognretur og en ny linje (hvorfor begge er nødvendige, diskuteres kort i den foregående note og detaljeret i kapitel 4). Du lærer om andre HTTP-headere i kapitel 4; I øjeblikket har du at gøre med Content-Type: header.

Indholdstype: Overskriften beskriver den type data, som CGI'en returnerer. Det passende format for denne overskrift er:

Indholdstype: undertype/type

Hvor undertype/type er den korrekte MIME-type (Multipurpose Internet Mail Extensions). Den mest almindelige MIME-type er HTML-typen: text/html. Tabel 2.1 viser et par mere almindelige MIME-typer, som vil blive diskuteret; En mere komplet liste og analyse af MIME-typer findes i kapitel 4.

Bemærk

MIME blev oprindeligt opfundet for at beskrive indholdet af postbeskeder. Det er blevet en ret almindelig måde at repræsentere indholdstypeoplysninger på. Du kan læse mere om MIME i RFC1521. RFC'er på internettet står for Requests for Comments, som er sammendrag af beslutninger truffet af grupper på internettet, der forsøger at sætte standarder. Du kan se resultaterne af RFC1521 på følgende adresse: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabel 2.1. Nogle almindelige MIME-typer. MIME Type Beskrivelse Tekst/html Hypertekst Markup Language (HTML) Tekst/almindelig tekstfiler Billede/gif Grafikfiler GIF Billede/jpeg Komprimerede grafikfiler JPEG-lyd/grundlæggende lydfiler Sun *.au Audio/x-wav Windows-filer *

Efter overskriften og en tom linje udskriver du blot dataene i den formular, du skal bruge. Hvis du sender HTML, så udskriv HTML-tags og data til stdout efter headeren. Du kan også sende grafik, lyd og andre binære filer ved blot at udskrive indholdet af filen til stdout. Der er givet flere eksempler på dette i kapitel 4.

Installation og kørsel af et CGI-program

Dette afsnit afviger noget fra CGI-programmering og taler om at konfigurere din webserver til at bruge CGI, installere og køre programmer. Du vil blive introduceret til forskellige servere til forskellige platforme mere eller mindre detaljeret, men du bliver nødt til at grave dybere ned i din servers dokumentation for at finde den bedste løsning.

Alle servere kræver plads til serverfiler og plads til HTML-dokumenter. I denne bog hedder serverområdet ServerRoot, og dokumentområdet hedder DocumentRoot. På UNIX-maskiner er ServerRoot normalt i /usr/local/etc/httpd/, og DocumentRoot er normalt i /usr/local/etc/httpd/htdocs/. Dette vil dog ikke gøre nogen forskel for dit system, så udskift alle referencer til ServerRoot og DocumentRoot med din egen ServerRoot og DocumentRoot.

Når du tilgår filer ved hjælp af din webbrowser, angiver du filen i URL'en i forhold til DocumentRoot. For eksempel, hvis din serveradresse er mymachine.org, så får du adgang til denne fil med følgende URL: http://mymachine.org/index.html

Konfiguration af serveren til CGI

De fleste webservere er forudkonfigureret til at tillade brug af CGI-programmer. Typisk angiver to parametre for serveren, om filen er en CGI-applikation eller ej:

  • Udpeget bibliotek. Nogle servere giver dig mulighed for at bestemme, at alle filer i en udpeget mappe (normalt kaldet cgi-bin som standard) er CGI.
  • Filnavneudvidelser. Mange servere har denne præ-konfiguration, der gør det muligt at definere alle filer, der ender på .cgi, som CGI.

Den udpegede biblioteksmetode er noget af et levn fra fortiden (de allerførste servere brugte den som den eneste metode til at afgøre, hvilke filer der var CGI-programmer), men den har flere fordele.

  • Det holder CGI-programmer centraliseret, hvilket forhindrer andre mapper i at blive rodet.
  • Du er ikke begrænset til nogen specifik filtypenavn, så du kan navngive dine filer, hvad du vil. Nogle servere giver dig mulighed for at udpege flere forskellige mapper som CGI-mapper.
  • Det giver dig også mere kontrol over, hvem der kan optage CGI. For eksempel, hvis du har en server og understøtter et system med flere brugere og ikke ønsker, at de skal bruge deres egne CGI-scripts uden først at revidere programmet af sikkerhedsmæssige årsager, kan du kun udpege disse filer i en begrænset, centraliseret mappe som CGI . Brugere bliver derefter nødt til at give dig CGI-programmer til installation, og du kan først revidere koden for at sikre, at programmet ikke har nogen større sikkerhedsproblemer.

CGI-notationen via filtypenavnet kan være nyttig på grund af dens fleksibilitet. Du er ikke begrænset til én enkelt mappe til CGI-programmer. De fleste servere kan konfigureres til at genkende CGI gennem filtypenavnet, selvom ikke alle er konfigureret på denne måde som standard.

Advarsel

Husk vigtigheden af ​​sikkerhedsproblemer, når du konfigurerer din server til CGI. Nogle tips vil blive dækket her, og kapitel 9, Beskyttelse af CGI, dækker disse aspekter mere detaljeret.

Installation af CGI på UNIX-servere

Uanset hvordan din UNIX-server er konfigureret, er der flere trin, du skal tage for at sikre, at dine CGI-applikationer kører som forventet. Din webserver vil typisk køre som en ikke-eksisterende bruger (det vil sige UNIX-brugeren ingen - en konto, der ikke har nogen filtilladelser og ikke kan logges ind). CGI-scripts (skrevet i Perl, Bourne-skallen eller et andet scriptsprog) skal kunne eksekveres og læses over hele verden.

Nøgle

For at gøre dine filer verdenslæsbare og eksekverbare skal du bruge følgende UNIX-tilladelseskommando: chmod 755 filnavn.

Hvis du bruger et scriptsprog såsom Perl eller Tcl, skal du angive den fulde sti til din tolk på den første linje i dit script. For eksempel vil et Perl-script, der bruger perl i mappen /usr/local/bin, begynde med følgende linje:

#!/usr/local/bin/perl

Advarsel

Placer aldrig tolken (perl eller Tcl Wish binær) i mappen /cgi-bin. Dette skaber en sikkerhedsrisiko på dit system. Dette er beskrevet mere detaljeret i kapitel 9.

Nogle generiske UNIX-servere

NCSA- og Apache-serverne har lignende konfigurationsfiler, fordi Apache-serveren oprindeligt var baseret på NCSA-koden. Som standard er de konfigureret, så enhver fil i cgi-bin-biblioteket (placeret som standard i ServerRoot) er et CGI-program. For at ændre placeringen af ​​cgi-bin-mappen kan du redigere conf/srm.conf-konfigurationsfilen. Formatet til at konfigurere denne mappe er

ScriptAlias ​​​​fakedirectoryname realdirectoryname

hvor fakedirectoryname er pseudo-mappenavnet (/cgi-bin), og realdirectoryname er den fulde sti, hvor CGI-programmerne rent faktisk er gemt. Du kan konfigurere mere end ét ScriptAlias ​​ved at tilføje flere ScriptAlias-linjer.

Standardkonfigurationen er tilstrækkelig til de fleste brugeres behov. Du skal i begge tilfælde redigere linjen i srm.conf-filen for at bestemme det korrekte realdirectoryname. Hvis f.eks. dine CGI-programmer er placeret i /usr/local/etc/httpd/cgi-bin, skulle ScriptAlias-linjen i din srm.conf-fil være sådan her:

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

For at få adgang til eller linke til CGI-programmer, der er placeret i denne mappe, skal du bruge følgende URL:

Http://hostname/cgi-bin/programnavn

Hvor værtsnavn er navnet på værten på din webserver, og programnavn er navnet på din CGI.

Lad os f.eks. sige, at du kopierer programmet hello.cgi til dit cgi-bin-bibliotek (f.eks. /usr/local/etc/httpd/cgi-bin) på din webserver kaldet www.company.com. For at få adgang til din CGI skal du bruge følgende URL: http://www.company.com/cgi-bin/hello.cgi

Hvis du vil konfigurere din NCSA- eller Apache-server til at genkende enhver fil med en .cgi-udvidelse som en CGI, skal du redigere to konfigurationsfiler. Først, i srm.conf-filen skal du fjerne kommentaren til følgende linje:

AddType application/x-httpd-cgi .cgi

Dette vil knytte MIME-typen CGI til .cgi-udvidelsen. Nu skal vi ændre filen access.conf, så vi kan køre CGI i enhver mappe. For at gøre dette skal du tilføje ExecCGI-indstillingen til Option-linjen. Det vil ligne følgende linje:

Optionsindekser FollowSymLinks ExecCGI

Nu betragtes enhver fil med filtypenavnet .cgi som CGI; få adgang til den som enhver fil på din server.

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

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

Andre UNIX-servere kan konfigureres på samme måde; Dette er beskrevet mere detaljeret i serverdokumentationen.

Installation af CGI på Windows

De fleste servere, der er tilgængelige til Windows 3.1, Windows 95 og Windows NT, er konfigureret ved hjælp af metoden "filnavnudvidelse" til CGI-genkendelse. Generelt kræver ændring af konfigurationen af ​​en Windows-baseret server blot at køre serverkonfigurationsprogrammet og foretage de relevante ændringer.

Nogle gange kan det være svært at konfigurere en server til at køre et script (såsom Perl) korrekt. I DOS eller Windows vil du ikke være i stand til at angive fortolkeren på den første linje i scriptet, som det er tilfældet med UNIX. Nogle servere har en foruddefineret konfiguration til at knytte bestemte filnavne til tolken. For eksempel antager mange Windows-webservere, at filer, der ender på .pl, er Perl-scripts.

Hvis serveren ikke udfører denne type filtilknytning, kan du definere en pakker-batchfil, der kalder både fortolkeren og scriptet. Som med UNIX-serveren, skal du ikke installere tolken i hverken cgi-bin-biblioteket eller nogen web-tilgængelig mappe.

Installation af CGI på Macintosh

De to mest kendte servermuligheder til Macintosh er WebStar StarNine og dens forgænger MacHTTP. Begge genkender CGI ved sin filtypenavn.

MacHTTP forstår to forskellige udvidelser: .cgi og .acgi, som står for asynkron CGI. Almindelige CGI-programmer installeret på en Macintosh (med en .cgi-udvidelse) vil holde webserveren i en travl tilstand, indtil CGI'en er færdig med at køre, hvilket får serveren til at suspendere alle andre anmodninger. Asynkron CGI giver på den anden side serveren mulighed for at acceptere anmodninger, selv mens den kører.

En CGI Macintosh-udvikler, der bruger en af ​​disse webservere, bør, hvis det er muligt, kun bruge .acgi-udvidelsen i stedet for .cgi-udvidelsen. Det burde fungere med de fleste CGI-programmer; hvis det ikke virker, omdøb programmet til .cgi.

Udførelse af CGI

Når du har installeret CGI, er der flere måder at udføre det på. Hvis dit CGI-program kun er et output-program, såsom Hello,World-programmet, så kan du udføre det blot ved at få adgang til dets URL.

De fleste programmer kører som en serverapplikation på en HTML-formular. Før du lærer, hvordan du modtager information fra disse formularer, skal du først læse en kort introduktion om oprettelse af sådanne formularer.

En hurtig tutorial om HTML-formularer

De to vigtigste tags i en HTML-form er

Og . Du kan oprette de fleste HTML-formularer ved at bruge disse to tags. I dette kapitel vil du udforske disse tags og en lille undergruppe af mulige typer eller attributter. . En komplet vejledning og link til HTML-formularer findes i kapitel 3, HTML og formularer.

Tag

Tag bruges til at bestemme, hvilken del af HTML-filen, der skal bruges til brugerindtastede oplysninger. Dette refererer til, hvordan de fleste HTML-sider kalder et CGI-program. Tag-attributter angiver programmets navn og placering - enten lokalt eller som en fuld URL, den anvendte kodningstype og den dataflytningsmetode, som programmet bruger.

Den næste linje viser specifikationerne for tagget :

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

ENCTYPE-attributten spiller ikke en særlig rolle og er normalt ikke inkluderet i tagget . Detaljerede oplysninger om ENCTYPE-tagget er givet i kapitel 3. En måde at bruge ENCTYPE på er vist i kapitel 14, "Branded Extensions".

ACTION-attributten henviser til CGI-programmets URL. Når brugeren udfylder formularen og giver oplysninger, kodes alle oplysninger og overføres til CGI-programmet. CGI-programmet løser selv problemet med afkodning og behandling af information; Dette aspekt diskuteres i "Acceptering af input fra browseren," senere i dette kapitel.

Til sidst beskriver METHOD-attributten, hvordan CGI-programmet skal modtage input. De to metoder, GET og POST, adskiller sig i, hvordan de videregiver information til CGI-programmet. Begge er diskuteret i "Acceptering af input fra browseren."

For at browseren kan tillade brugerinput, skal alle formular-tags og information være omgivet af tagget . Glem ikke det afsluttende tag

for at angive slutningen af ​​formularen. Du kan ikke have en formular i en formular, selvom du kan oprette en formular, der giver dig mulighed for at præsentere informationer forskellige steder; dette aspekt diskuteres udførligt i kapitel 3.

Tag

Du kan oprette tekstinputbjælker, alternativknapper, afkrydsningsfelter og andre måder at acceptere input ved hjælp af tagget . Dette afsnit dækker kun tekstindtastningsfelter. Brug tagget for at implementere dette felt med følgende egenskaber:

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

NAME er det symbolske navn på den variabel, der indeholder den værdi, som brugeren har indtastet. Hvis du inkluderer tekst i VALUE-attributten, vil denne tekst blive placeret som standard i tekstindtastningsfeltet. SIZE-attributten giver dig mulighed for at angive den vandrette længde af inputfeltet, som det vil blive vist i browservinduet. Til sidst angiver MAXLENGTH det maksimale antal tegn, som brugeren kan indtaste i feltet. Bemærk venligst, at attributterne VALUE, SIZE, MAXLENGTH er valgfrie.

Formular indsendelse

Hvis du kun har ét tekstfelt i en formular, kan brugeren indsende formularen ved blot at indtaste oplysninger på tastaturet og trykke på Enter. Ellers skal der være en anden måde for brugeren at præsentere oplysningerne på. Brugeren indsender oplysninger ved hjælp af en send-knap med følgende tag:

< Input type=submit >

Dette tag opretter en Send-knap inde i din formular. Når brugeren er færdig med at udfylde formularen, kan han eller hun indsende dens indhold til den URL, der er angivet af formularens ACTION-attribut ved at klikke på knappen Send.

Accepter input fra browseren

Ovenfor var eksempler på optagelse af et CGI-program, der sender information fra serveren til browseren. I virkeligheden har et CGI-program, der kun udsender data, ikke mange applikationer (nogle eksempler er givet i kapitel 4). Den vigtigere evne ved CGI er at modtage information fra browseren - den funktion, der giver nettet dens interaktive karakter.

CGI-programmet modtager to typer information fra browseren.

  • For det første indhenter den forskellige stykker information om browseren (dens type, hvad den kan se, værtsværten osv.), serveren (dens navn og version, dens eksekveringsport og så videre) og CGI-programmet sig selv (programnavn og hvor det er placeret). Serveren giver al denne information til CGI-programmet gennem miljøvariabler.
  • For det andet kan CGI-programmet modtage brugerinput. Denne information, efter at være blevet kodet af browseren, sendes enten gennem en miljøvariabel (GET-metoden) eller gennem standardinput (stdin - POST-metoden).

miljøvariabler

Det er nyttigt at vide, hvilke miljøvariabler der er tilgængelige for et CGI-program, både under træning og til fejlretning. Tabel 2.2 viser nogle af de tilgængelige CGI-miljøvariabler. Du kan også skrive et CGI-program, der udsender miljøvariabler og deres værdier til en webbrowser.

Tabel 2.2. Nogle vigtige CGI-miljøvariabler Miljøvariabel Formål REMOTE_ADDR IP-adressen på klientmaskinen. REMOTE_HOST Værten for klientmaskinen. HTTP _ACCEPT Viser de MIME-datatyper, som browseren kan fortolke. HTTP _USER_AGENT Browseroplysninger (browsertype, versionsnummer, operativsystem osv.). REQUEST_METHOD GET eller POST. CONTENT_LENGTH Størrelsen af ​​inputtet, hvis det sendes via POST. Hvis der ikke er noget input, eller hvis GET-metoden bruges, er denne parameter udefineret. QUERY_STRING Indeholder inputoplysningerne, når de sendes ved hjælp af GET-metoden. PATH_INFO Giver brugeren mulighed for at angive en sti fra CGI-kommandolinjen (f.eks. http://værtsnavn/cgi-bin/programnavn/sti). PATH_TRANSLATED Oversætter den relative sti i PATH_INFO til en faktisk sti på systemet.

For at skrive en CGI-applikation, der viser miljøvariabler, skal du vide, hvordan du gør to ting:

  • Definer alle miljøvariabler og deres tilsvarende værdier.
  • Udskriv resultater til browseren.

Du ved allerede, hvordan du udfører den sidste operation. I Perl er miljøvariabler gemt i den associative matrix %ENV, som introduceres af navnet på miljøvariablen. Liste 2.3 indeholder env.cgi, et Perl-program, der opfylder vores mål.

Fortegnelse 2.3. Et Perl-program, env.cgi, der udskriver alle CGI-miljøvariablerne.

#!/usr/local/bin/perl print "Indholdstype: text/html\n\n"; Print " \n"; udskriv " CGI miljø\n"; udskriv "\n"; udskriv " \n"; udskriv "

CGI miljø

\n"; foreach $env_var (nøgler %ENV) ( print " $env_var= $ENV($env_var)
\n"; ) udskriv "

\n";

Et lignende program kunne skrives i C; den komplette kode er i Listing 2.4.

Fortegnelse 2.4. Env.cgi.c i C. /* env.cgi.c */ #include ekstern char **miljø; int main() ( char **p = environ; printf("Indholdstype: 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?

Hvad er forskellen mellem GET- og POST-metoderne? GET sender den kodede inputstreng gennem miljøvariablen QUERY_STRING, mens POST sender den gennem stdin. POST er den foretrukne metode, især for formularer med mange data, fordi der ikke er begrænsninger på mængden af ​​afsendt information, mens med GET-metoden er mængden af ​​medieplads begrænset. GET har dog en vis nyttig egenskab; dette er beskrevet detaljeret i kapitel 5, Input.

For at bestemme hvilken metode der bruges, tjekker CGI-programmet miljøvariablen REQUEST_METHOD, som vil blive sat til enten GET eller POST. Hvis den er indstillet til POST, lagres længden af ​​den kodede information i miljøvariablen CONTENT_LENGTH.

Kodet input

Når en bruger indsender en formular, koder browseren først informationen, før den sendes til serveren og derefter til CGI-applikationen. Når du bruger et tag , får hvert felt et symbolsk navn. Værdien indtastet af brugeren repræsenteres som værdien af ​​variablen.

For at bestemme dette bruger browseren en URL-kodningsspecifikation, som kan beskrives som følger:

  • Adskiller forskellige felter med et og-tegn (&).
  • Adskiller navn og værdier med lighedstegn (=), med navnet til venstre og værdien til højre.
  • Erstatter mellemrum med plustegn (+).
  • Erstatter alle "unormale" tegn med et procenttegn (%) efterfulgt af en tocifret hex-kode for tegnet.

Din endelige kodede streng vil ligne følgende:

Navn1=værdi1&navn2=værdi2&navn3=værdi3 ...

Bemærk: Specifikationer for URL-kodning findes i RFC1738.

Lad os f.eks. sige, at du havde en formular, der bad om navn og alder. HTML-koden, der blev brugt til at vise denne formular, er vist i liste 2.5.

Liste 2.5. HTML-kode til at vise navn og aldersformular.

Navn og Alder

Indtast dit navn:

Indtast din alder:



Lad os sige, at brugeren indtaster Joe Schmoe i navnefeltet og 20 i aldersfeltet. Inputtet vil blive kodet i inputstrengen.

Navn=Joe+Schmoe&age=20

Parsing input

For at disse oplysninger skal være nyttige, skal du bruge oplysningerne om noget, der kan bruges af dine CGI-programmer. Strategier til at analysere input er dækket i kapitel 5. I praksis behøver du aldrig at tænke på, hvordan du parser input, fordi flere eksperter allerede har skrevet biblioteker, der udfører parsingen, tilgængelige for alle. To sådanne biblioteker præsenteres i dette kapitel i de følgende afsnit: cgi -lib.pl for Perl (skrevet af Steve Brenner) og cgihtml for C (skrevet af mig).

Det generelle mål for de fleste biblioteker skrevet på forskellige sprog er at parse en kodet streng og indsætte navne- og værdipar i en datastruktur. Der er en åbenlys fordel ved at bruge et sprog, der har indbyggede datastrukturer som Perl; dog inkluderer de fleste biblioteker til lavniveausprog som C og C++ datastruktur og subrutineudførelse.

Det er ikke nødvendigt at opnå en fuldstændig forståelse af biblioteker; det er vigtigere at lære at bruge dem som værktøjer til at gøre CGI-programmørens arbejde lettere.

Cgi-lib.pl

Cgi-lib.pl bruger Perl associative arrays. &ReadParse-funktionen analyserer inputstrengen og indtaster hvert navn/værdipar efter navn. For eksempel ville de tilsvarende Perl-strenge, der er nødvendige for at afkode "navn/alder"-inputstrengen, der lige er blevet præsenteret

&ReadParse(*input);

For nu at se værdien indtastet for "navn", kan du få adgang til det associative array $input("navn"). På samme måde, for at få adgang til værdien af ​​"alder", skal du se på variablen $input ("alder").

Cgihtml

C har ingen indbyggede datastrukturer, så cgihtml implementerer sin egen linkliste til brug med sine CGI-parsing-rutiner. Dette definerer entrytype-strukturen som følger:

Typedef struct ( Char *navn; Char *værdi; ) Entrytype;

For at parse inputstrengen "navn/alder" i C ved hjælp af cgihtml, bruges følgende:

/* erklærer en sammenkædet liste kaldet input */ Llist input; /* parse input og placering i linket liste */ read_cgi_input(&input);

For at få adgang til aldersoplysninger kan du enten parse listen manuelt eller bruge den tilgængelige cgi _val() funktion.

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

"Alder"-værdien er nu gemt i aldersstrengen.

Bemærk: I stedet for at bruge et simpelt array (som char age ;), allokerer jeg dynamisk hukommelsesplads til strengalderen. Selvom dette gør programmering sværere, er det ikke desto mindre vigtigt ud fra et sikkerhedssynspunkt. Dette er beskrevet nærmere i kapitel 9.

Et simpelt CGI-program

Du skal skrive et CGI-program kaldet nameage.cgi, der håndterer navn/aldersformen. Databehandling (det jeg plejer at kalde "stuff in between") er minimal. Nameage.cgi afkoder blot input og viser brugerens navn og alder. Selvom der ikke er meget brug for et sådant værktøj, demonstrerer det det mest kritiske aspekt af CGI-programmering: input og output.

Du bruger samme formular som ovenfor og kalder "navn og alder"-felterne frem. Du skal ikke bekymre dig om robusthed og effektivitet endnu; løse det eksisterende problem på den enkleste måde. Perl- og C-løsningerne er vist i henholdsvis liste 2.6 og 2.7.

Liste 2.6. Nameage.cgi i Perl

#!/usr/local/bin/perl # nameage.cgi kræver "cgi-lib.pl" &ReadParse(*input); print "Indholdstype: tekst/html\r\n\r\n"; Print " \n"; udskriv " Navn og Alder\n"; udskriv "\n"; udskriv " \n"; udskriv "Hej, " . $input("navn") . ". Du er\n"; print $input("alder") . " år gammel.

\n"; udskriv "

\n";

Fortegnelse 2.7. nameage.cgi i C

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

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

\n"); )

Bemærk venligst, at disse to programmer næsten svarer til hinanden. De indeholder begge parsing-rutiner, der kun fylder én linje og behandler hele inputtet (takket være de tilsvarende biblioteksrutiner). Outputtet er i det væsentlige en modificeret version af dit primære Hello, World!

Prøv at køre programmet ved at udfylde formularen og klikke på knappen Send.

Generel programmeringsstrategi

Du kender nu alle de grundlæggende principper, der kræves til CGI-programmering. Når du først forstår, hvordan CGI modtager information, og hvordan den sender den tilbage til browseren, afhænger den faktiske kvalitet af dit endelige produkt af dine generelle programmeringsevner. Nemlig, når du programmerer CGI (eller noget som helst, for den sags skyld), skal du huske på følgende kvaliteter:

  • Enkelhed
  • Effektivitet
  • Alsidighed

De første to kvaliteter er ret almindelige: prøv at gøre din kode så læsbar og effektiv som muligt. Alsidighed gælder mere for CGI-programmer end for andre applikationer. Når du begynder at udvikle dine egne CGI-programmer, vil du lære, at der er flere grundlæggende applikationer, som alle ønsker at lave. For eksempel er en af ​​de mest almindelige og oplagte opgaver i et CGI-program at behandle en formular og e-maile resultaterne til en bestemt modtager. Du kan få behandlet flere separate formularer, hver med en anden modtager. I stedet for at skrive et CGI-program til hver enkelt formular, kan du spare tid ved at skrive et mere generelt CGI-program, der gælder for alle formularer.

Ved at dække alle de grundlæggende aspekter af CGI, har jeg givet dig nok information til at komme i gang med CGI-programmering. For at blive en effektiv CGI-udvikler skal du dog have en dybere forståelse af, hvordan CGI kommunikerer med serveren og browseren. Resten af ​​denne bog dækker i detaljer de problemer, der kort blev nævnt i dette kapitel, såvel som applikationsudviklingsstrategi og protokollens fordele og begrænsninger.

Resumé

Dette kapitel introducerede kort det grundlæggende i CGI-programmering. Du opretter output ved at formatere dine data korrekt og udskrive til stdout. Det er lidt mere komplekst at modtage CGI-input, fordi det skal analyseres, før det kan bruges. Heldigvis findes der allerede flere biblioteker, der udfører parsing.

Nu burde du være i stand til at programmere CGI-applikationer forholdsvis nemt. Resten af ​​denne bog går i flere detaljer om specifikationer, tips og programmeringsstrategier til mere avancerede og komplekse applikationer.