dijeta... Dlaka Pribor

Prisutnost c ploča cgi. Programiranje s CGI. Kako CGI radi

Andover, Massachusetts, 19. studenog 2003

Commerce Group, Inc. (NYSE: CGI), najveći pisac privatnih osiguranja osobnih automobila u Massachusettsu i CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), vodeći pružatelj usluga informacijske tehnologije i poslovne obrade, najavio je danas potpisivanje šestogodišnjeg ugovora o eksternalizaciji poslovnih procesa (BPO) u vrijednosti od 35 milijuna američkih dolara. CGI će pružiti potpune usluge obrade politike za privatne putničke i komercijalne automobilske linije u Massachusettsu, kao i pružanje CGI-jevog alata za agencijsko sučelje CollaborativeEdge, podršku i održavanje aplikacija, regulatornu podršku, savjetovanje sustava i usluge upravljanja dokumentima.

Gerald Fels, izvršni potpredsjednik i financijski direktor Commerce Groupa, izjavio je: „Kao vodeći ponuđač osobnih osobnih automobila u Massachusettsu, naš je cilj pružiti našim agentima i zaposlenicima usluge koje im pomažu da rade na najvišoj razini. Tijekom godina njegovali smo čvrst odnos s CGI-jem. Njihov je sustav robustan i točan, a njihov tim je vrlo upoznat s našim internim sustavima obrade. To nam je važno."

Serge LaPalme, predsjednik, usluge osiguranja za CGI, dodao je: "Veoma nam je drago što nastavljamo naš odnos s Commerce Group, odnosom koji se proteže preko 30 godina. Commerce Group nastavlja biti jedan od naših cijenjenih poslovnih partnera i strateški je naš uspjeh. Pomažući našem klijentu da se dalje usredotoči na svoju osnovnu djelatnost, koristimo prednosti novih tehnologija kada i gdje to ima smisla. Naš tim blisko poznaje industriju osiguranja i jedinstveno regulatorno okruženje države i kao rezultat toga brzo se prilagođava postojeća rješenja za ovaj sektor koji se neprestano razvija."

O The Commerce Group, Inc.

Commerce Group, Inc., osiguravajuće holding društvo, ima sjedište u Websteru, Massachusetts. Podružnice za osiguranje imovine i nezgoda tvrtke Commerce Group uključuju The Commerce Insurance Company i Citation Insurance Company u Massachusettsu, Commerce West Insurance Company u Kaliforniji i American Commerce Insurance Company u Ohiju. Kroz svoje podružnice" kombinirane aktivnosti osiguranja, Commerce Group je rangirana kao 22. najveća osobna grupa za osiguranje automobila u zemlji od strane AM Najbolji, na temelju izravnih pisanih premium informacija iz 2002. godine.

O CGI-ju
Osnovan 1976., CGI je peta najveća neovisna tvrtka za pružanje usluga informacijske tehnologije u Sjevernoj Americi, na temelju broja zaposlenih. CGI i njegove pridružene tvrtke zapošljavaju 20.000 stručnjaka. Godišnja stopa prihoda CGI-ja trenutno iznosi 2,8 milijardi CDN (1,9 milijardi USD), a 30. rujna 2003. zaostatak CGI-jevih narudžbi iznosio je 12,3 milijarde CDN (9,1 milijarda USD). CGI pruža sveobuhvatne IT i usluge poslovnih procesa klijentima diljem svijeta iz ureda u Kanadi, Sjedinjenim Državama i Europi. Dionice CGI uvrštene su na TSX (GIB.A) i NYSE (GIB) i uključene su u TSX 100 Composite Index, kao i S&P/TSX kanadske informacijske tehnologije i kanadske MidCap indekse. Web stranica: .

Poglavlje 9.

Programiranje s CGI

Uključivanje odjeljka o CGI-u u knjigu baze podataka može se činiti čudnim kao i imati poglavlje o popravku automobila u kuharici. Naravno, da biste otišli u trgovinu, potreban vam je servisan automobil, ali je li prikladno razgovarati o tome? Potpuni uvod u CGI i web programiranje općenito je izvan dosega ove knjige, ali kratak uvod u ove teme dovoljan je da proširi sposobnost MySQL-a i mSQL-a da predstavlja podatke u području weba.

Ovo poglavlje je uglavnom namijenjeno onima koji uče o bazama podataka, ali bi željeli steći i neka znanja o web programiranju. Ako se prezivate Berners-Lee ili Andressen, malo je vjerojatno da ćete ovdje pronaći nešto što već ne znate. Ali čak i ako niste novi u CGI-u, pri ruci imate brzu referencu dok uranjate u misterije MySQL-a i mSQL-a može biti od velike pomoći.

Što je CGI?

Kao i većina akronima, Common Gateway Interface (CGI je skraćenica od Common Gateway Interface) zapravo ne govori puno. Sučelje s čime? Gdje je ovaj gateway? O kojoj zajednici govorimo? Da bismo odgovorili na ova pitanja, vratimo se malo unatrag i pogledajmo WWW u cjelini.

Tim Berners-Lee, fizičar koji je radio u CERN-u, došao je na web 1990. godine, iako plan datira još iz 1988. godine. Ideja je bila omogućiti istraživačima fizike čestica jednostavnu i brzu razmjenu multimedijskih podataka - teksta, slika i zvuka - putem interneta. WWW se sastojao od tri glavna dijela: HTML, URL i HTTP. HTML- jezik oblikovanja koji se koristi za predstavljanje sadržaja na webu. url- ovo je adresa koja se koristi za dobivanje sadržaja u HTML formatu (ili na neki drugi način) s web poslužitelja. I konačno http- to je jezik koji web poslužitelj razumije i omogućuje klijentima da traže dokumente od poslužitelja.

Mogućnost slanja svih vrsta informacija putem Interneta bila je revolucija, no ubrzo je otkrivena još jedna mogućnost. Ako možete poslati bilo koji tekst preko weba, zašto onda ne možete poslati tekst koji je kreirao program, a nije preuzet iz gotove datoteke? Ovo otvara more mogućnosti. Jednostavan primjer je korištenje programa koji ispisuje trenutno vrijeme tako da čitatelj vidi točno vrijeme svaki put kada pogleda stranicu. Nekoliko pametnih glava u Nacionalnom centru za superračunalske aplikacije (NCSA) koji su gradili web poslužitelj vidjeli su ovu priliku i ubrzo se rodio CGI.

CGI je skup pravila prema kojima programi na poslužitelju mogu slati podatke klijentima putem web poslužitelja. CGI specifikacija bila je popraćena promjenama u HTML-u i HTTP-u koje su uvele novu značajku poznatu kao obrasci.

Dok CGI dopušta programima slanje podataka klijentu, obrasci proširuju ovu mogućnost dopuštajući klijentu slanje podataka tom CGI programu. Sada korisnik ne samo da može vidjeti trenutno vrijeme, već i postaviti sat! CGI oblici otvorili su vrata istinskoj interaktivnosti u svijetu weba. Uobičajene CGI aplikacije uključuju:

  • Dinamički HTML. Čitave stranice mogu se generirati pomoću jednog CGI programa.
  • Tražilice koje pronalaze dokumente s riječima koje je odredio korisnik.
  • Knjige gostiju i oglasne ploče na koje korisnici mogu dodati svoje poruke.
  • Obrasci za narudžbu.
  • Upitnici.
  • Ekstrahiranje informacija iz baze podataka koja se nalazi na poslužitelju.

U sljedećim poglavljima raspravljat ćemo o svim ovim CGI aplikacijama, kao i o nekoliko drugih. Svi oni pružaju izvrsnu priliku za povezivanje CGI-ja s bazom podataka, što nas zanima u ovom dijelu.

HTML obrasci

Prije nego što istražite specifičnosti CGI-ja, korisno je pogledati najčešći način na koji krajnji korisnici dobivaju sučelje za CGI programe: HTML obrasci. Obrasci su dio HTML jezika koji krajnjem korisniku pruža različite vrste polja. Podaci uneseni u polja mogu se poslati na web poslužitelj. Polja se mogu koristiti za unos teksta ili biti gumbi koje korisnik može kliknuti ili označiti. Evo primjera HTML stranice koja sadrži obrazac:

<НТМL><НЕАD><ТITLЕ>Moja stranica obrasca


<р>Ovo je stranica obrasca.


Unesite svoje ime:



Ovaj obrazac stvara niz od 40 znakova u koji korisnik može unijeti svoje ime. Ispod retka za unos nalazi se gumb, kada se pritisne, podaci obrasca se prenose na poslužitelj. Sljedeće su oznake koje se odnose na obrasce koje podržava HTML 3.2, danas najčešće korišteni standard. Nazivi oznaka i atributa mogu se unijeti u svakom slučaju, ali se pridržavamo opcione konvencije da se početne oznake pišu velikim, a završne malim slovima.


Ova oznaka pokazuje na početak obrasca. Završna oznaka je obavezna na kraju obrasca

. Između oznaka
Dopuštena su tri atributa: ACTION specificira URL ili relativni put do CGI programa kojem će se podaci slati; METHOD specificira HTTP metodu kojom će se obrazac poslati (ovo može biti GET ili POST, ali gotovo uvijek ćemo koristiti POST); ENCTYPE specificira metodu kodiranja podataka (treba se koristiti samo ako jasno razumijete što radite).


Pruža najfleksibilniji način za unos korisnika. Zapravo postoji devet različitih vrsta oznaka . Vrsta je određena atributom TYPE. Prethodni primjer koristi dvije oznake : jedan tipa SUBMIT, a drugi tipa TEXT prema zadanim postavkama. Devet vrsta je kako slijedi:

TEKST

Polje u koje korisnik može unijeti jedan redak teksta.

ZAPORKA

Isto kao i TEKST, ali se uneseni tekst ne prikazuje na ekranu.

POKAZATELJI

Oznaka koju korisnik može postaviti i izbrisati.

RADIO

Radio gumb koji se mora kombinirati s barem još jednim radio gumbom. Korisnik može odabrati samo jedan od njih.

PODNIJETI

Gumb koji, kada se klikne, šalje obrazac na web poslužitelj.

RESET

Gumb koji, kada se klikne, vraća obrazac na zadane vrijednosti.

DATOTEKA

Slično tekstualnom okviru, ali zahtijeva unos naziva datoteke koja će biti poslana na poslužitelj.

SKRIVEN

Nevidljivo polje koje može pohraniti podatke.

SLIKA

Slično gumbu SUBMIT, ali možete postaviti sliku za sliku na gumb.

Osim oznaka TYPE atributa obično imaju atribut NAME koji povezuje podatke unesene u polje s nekim imenom. Ime i podaci se prosljeđuju poslužitelju u stilu vrijednost=vrijednost. U prethodnom primjeru, tekstualno polje je dobilo naziv firstname . Možete koristiti atribut VALUE za postavljanje polja tipa TEXT, PASSWORD, FILE i HIDDEN na unaprijed definirane vrijednosti. Isti atribut, koji se koristi s gumbima poput SUBMIT ili RESET, prikazuje navedeni tekst na njima. Polja tipa RADIO i CHECKBOX mogu se prikazati kao postavljena pomoću atributa CHECKED bez vrijednosti.

Atribut SIZE koristi se za postavljanje duljine polja TEKST, LOZINKA i DATOTEKA. Atribut MAXLENGTH može se koristiti za ograničavanje duljine unesenog teksta. Atribut SRC specificira URL slike koja se koristi u vrsti IMAGE. Konačno, atribut ALIGN specificira poravnanje slike za tip SLIKA i može biti TOP, MIDDLE, BOTTOM (zadano), LIJEVO ili DESNO (gore, u sredini, dolje, lijevo, desno).

.

Kao oznaka , kod oznake , a svaki tekst između oznaka bit će prihvaćen kao zadani tekst , slično atributu VALUE za oznaku . Za oznaku

, dajući mjesto za ulazak u esej. Podaci se nazivaju "esej". Blok teksta je širok 70 znakova i dubok 10 redaka. Razmak između oznaka

može se koristiti kao ogledni esej. -->

vrste "SUBMIT" i "RESET", respektivno. Gumb "POŠALJI" ima poništenu oznaku "Unesite podatke", a gumb "RESET" ima zadanu oznaku (definiranu od strane preglednika). Klikom na gumb "POŠALJI" podaci će se poslati na web poslužitelj, gumb "RESET" vratit će R podatke u izvorno stanje, brišući sve podatke koje je unio korisnik. -->


Jedina vrsta unosa koju ovdje nismo koristili je tip IMAGE za oznaku . Može se koristiti kao alternativni način podnošenja obrasca. Međutim, tip IMAGE rijetko je kompatibilan s preglednicima koji se temelje na tekstu i koji slabo reagiraju, stoga ga je razborito izbjegavati osim ako vaša stranica nema bogat grafički stil.

Sada kada ste upoznati s osnovama HTML obrazaca, spremni ste istražiti sam CGI.

CGI specifikacija

Dakle, koji je zapravo "skup pravila" koji CGI programu u, recimo, Batavia, Illinois, omogućuje komunikaciju s web preglednikom u vanjskoj Mongoliji? Službena CGI specifikacija, zajedno s nizom drugih informacija o CGI-u, može se pronaći na NCSA poslužitelju na adresi http://hoohoo . ncsa.uluc.edu/cgi/. Međutim, ovo poglavlje postoji kako ne biste morali dugo putovati i sami ga tražiti.

Postoje četiri načina na koje CGI prosljeđuje podatke između CGI-npor okvira i web poslužitelja, a time i web klijenta:

  • varijable okoline.
  • Naredbeni redak.
  • Standardni ulazni uređaj.
  • standardni izlazni uređaj.

S ove četiri metode poslužitelj šalje sve podatke koje je klijent poslao u CGI program. CGI program tada čini svoju magiju i šalje izlaz natrag na poslužitelj, koji ga prosljeđuje klijentu.

Ovi se podaci temelje na Apache HTTP poslužitelju. Apache je najčešće korišteni web poslužitelj i radi na gotovo svim platformama, uključujući Windows 9x i Windows NT. Međutim, mogu se primijeniti na sve HTTP poslužitelje koji podržavaju CGI. Neki vlasnički poslužitelji, poput onih iz Microsofta i Netscapea, mogu imati dodatne značajke ili raditi drugačije. Kako se lice weba nastavlja mijenjati nevjerojatnom brzinom, standardi se još uvijek razvijaju i budućnost će se sigurno promijeniti. Međutim, što se CGI-ja tiče, čini se da je ova tehnologija dobro uhodana - cijena za to je što su je druge tehnologije, poput apleta, istisnule. Svi CGI programi koje napišete koristeći ove informacije gotovo će sigurno moći raditi na većini web poslužitelja dugi niz godina.

Kada se CGI program pozove putem obrasca, najčešćeg sučelja, preglednik šalje poslužitelju dugački niz koji počinje stazom do CGI programa i njegovim imenom. Nakon toga slijede razni drugi podaci, koji se nazivaju informacija o putu, koji se prosljeđuju CGI programu preko PATH_INFO varijable okruženja (slika 9-1). Nakon informacija o stazi slijedi "?", a zatim podaci obrasca, koji se šalju poslužitelju pomoću HTTP GET metode. Ovi podaci su dostupni CGI programu putem QUERY_STRING varijable okoline. Svi podaci koje stranica pošalje koristeći HTTP POST metodu, koja je najčešće korištena, bit će proslijeđeni CGI programu putem standardnog unosa. Tipičan niz koji poslužitelj može primiti od preglednika prikazan je na slici 1. 9-1. imenovani program formread u katalogu cgi-bin poziva poslužitelj s dodatnim informacijama o putu dodatne informacije i podaci zahtjeva za odabir=pomoć - vjerojatno kao dio izvornog URL-a. Konačno, sami podaci obrasca (tekst "CGI programiranje" u polju "ključne riječi") šalju se metodom HTTP POST.

Varijable okoline

Kada poslužitelj izvršava CGI program, on mu prije svega prosljeđuje neke podatke kako bi se pokrenuo u obliku varijabli okruženja. Postoji sedamnaest varijabli službeno definiranih u specifikaciji, ali mnoge se više neslužbeno koriste kroz mehanizam opisan u nastavku pod nazivom HTTP_/nec/zams/n. CGI program

ima pristup tim varijablama baš kao i sve varijable okoline ljuske kada se pokrene iz naredbenog retka. U skripti ljuske, na primjer, varijabli okoline F00 može se pristupiti kao $F00; u Perlu ovaj poziv izgleda kao $ENV("F00") ; u C - getenv("F00") ; i tako dalje. Tablica 9-1 navodi varijable koje uvijek postavlja poslužitelj, čak i ako su null. Osim ovih varijabli, podaci koje je klijent vratio u zaglavlju zahtjeva dodijeljeni su varijablama oblika HTTP_F00 , gdje je F00 naziv zaglavlja. Na primjer, većina web preglednika uključuje informacije o verziji u zaglavlju pod nazivom USEfl_AGENT. Vaš CGI npor framework može dobiti ove informacije iz varijable HTTP_USER_AGENT.

Tablica 9-1.CGI varijable okruženja

varijabla okoline

Opis

CONTENT_LENGTH

Duljina podataka proslijeđenih metodama POST ili PUT, u bajtovima.

CONTENT_TYPE

MIME tip podataka priloženih pomoću metoda POST ili PUT.

GATEWAY_INTERFACE

Broj verzije CGI specifikacije koju podržava poslužitelj.

PATH_INFO

Dodatne informacije o putu koje daje klijent. Na primjer, za zahtjev http://www.myserver.eom/test.cgi/this/is/a/ put?polje=zeleno vrijednost varijable PATH_INFO bit će /ovo/je/a/put.

PATH_TRANSLATED

Isto kao PATH_INFO, ali poslužitelj proizvodi sve


Mogući prijevod, na primjer, proširenje naziva poput "-account". »

QUERY_STRING

Svi podaci nakon "?" u URL-u. Ovo su također podaci proslijeđeni kada je REQ-UEST_METHOD obrasca GET.

REMOTE_ADDR

IP adresa klijenta koji podnosi zahtjev.

REMOTE_HOST

Ime hosta klijentskog stroja, ako je dostupno.

REMOTE_IDENT

Ako web poslužitelj i klijent podržavaju identifikaciju tipa identd, tada je to korisničko ime računa koji podnosi zahtjev.

REQUEST_METHOD

Metoda koju klijent koristi za podnošenje zahtjeva. Za CGI programe koje ćemo izraditi, to će obično biti POST ili GET.

SERVER_NAME Ime hosta - ili IP adresa ako ime nije dostupno - stroja na kojem je pokrenut web poslužitelj.
SERVER_PORT Broj porta koji koristi web poslužitelj.
SERVER_PROTOCOL
Protokol koji klijent koristi za komunikaciju s poslužiteljem. U našem slučaju, ovaj protokol je gotovo uvijek HTTP.
SERVER_SOFTWARE Informacije o verziji web poslužitelja na kojem je pokrenut CGI program.

SCRIPT_NAME

Put do skripte koja će se izvršiti, kako je odredio klijent. Može se koristiti kada se URL odnosi na sebe i tako da se skripte na koje se upućuje na različitim mjestima mogu izvršavati različito ovisno o mjestu.

Evo primjera Perl CGI skripte koja ispisuje sve varijable okruženja koje postavlja poslužitelj, kao i sve naslijeđene varijable, kao što je PATH, koje postavlja ljuska koja je pokrenula poslužitelj.

#!/usr/bin/perl -w

ispisati<< HTML;

Vrsta sadržaja: tekst/html\n\n

<р>Varijable okoline

HTML

foreach (tipke %ENV) ( ispis "$_: $ENV($_)
\n";)

ispisati<

HTML

Sve ove varijable može se koristiti, pa čak i modificirati vaš CGI program. Međutim, ove promjene ne utječu na web poslužitelj koji je pokrenuo program.

Naredbeni redak

CGI omogućuje prosljeđivanje argumenata CGI programu kao opcije naredbenog retka, što se rijetko koristi. Rijetko se koristi jer je njegova praktična primjena malobrojna i nećemo se detaljnije zadržavati na njoj. Zaključak je da ako varijabla okruženja QUERY_STRING ne sadrži znak "=", tada će se CGI program izvršiti s parametrima naredbenog retka preuzetim iz QUERY_STRING. Na primjer, http://www.myserver.com/cgi- bin/prst?korijen pokrenut će korijen prsta www.myserver.com.

Postoje dvije glavne biblioteke koje pružaju CGI sučelje za Perl. Prvi od njih - cgi-lib.pl Korisnost cgi-lib.pl vrlo čest jer je dugo vremena bila jedina dostupna velika knjižnica. Dizajnirana je za rad u Perlu 4, ali također radi i s Perl 5. Druga biblioteka, CGI.pm, novije i po mnogočemu superiornije cgi-lib.pl CGI.pm napisan za Perl 5 i koristi potpuno objektno orijentiranu shemu za rad s CGI podacima. Modul CGI.pm analizira standardni unos i varijablu QUERY_STRING te pohranjuje podatke u CGI objekt. Vaš program treba samo stvoriti novi CGI objekt i koristiti jednostavne metode kao što je paramQ za izdvajanje podataka koji su vam potrebni. Primjer 9-2 služi kao kratka demonstracija kako CGI.pm interpretira podatke. Koristit će se svi primjeri Perla u ovom poglavlju CGI.pm.

Primjer 9-2. Parsiranje CGI podataka u Perlu

#!/usr/bin/perl -w

koristiti CGI qw(:standard);

# Koristi se CGI.pm modul. qw(:standard) uvozi

# imenski prostor standardnih CGI funkcija za dobivanje

# kod za čišćenje. To se može učiniti ako skripta

# koristi se samo jedan CGI objekt.

$mycgi = novi CGI; #Izradite CGI objekt koji će biti "pristupnik" za podatke obrasca

@polja = $mycgi->param; # Izdvojite nazive svih ispunjenih polja obrasca

zaglavlje ispisa, start_html("CGI.pm test"); ft metode "header" i "start_html",

# osigurano

# CGI.pm olakšava dobivanje HTML-a.

# "header" ispisuje potrebno HTTP zaglavlje, a

#"start_html" ispisuje HTML zaglavlje s danim imenom,

#a također označiti .

ispis"<р>Podaci obrasca:
";

foreach (@fields) (ispis $_, ":",- $mycgi->param($_), "
"; }

# Za svako polje prikažite naziv i vrijednost dobivenu pomoću

# $mycgi->param("naziv polja").

ispis end_html; # Skraćenica za izlaz završnih oznaka "".

Obrada unosa u C

Budući da su glavni API-ji za MySQL i mSQL napisani na C, nećemo potpuno napustiti C u korist Perla, ali ćemo dati neke primjere C gdje je to prikladno. Postoje tri široko korištene C biblioteke za CGI programiranje: cgic Tom Boutell*; cgihtml Eugene Kim t i libcgi iz EIT-a*. Vjerujemo u to cgic je najpotpuniji i jednostavan za korištenje. Međutim, nedostaje mu mogućnost nabrajanja svih varijabli oblika kada vam nisu unaprijed poznate. Zapravo, može se dodati jednostavnim zakrpom, ali to je izvan dosega ovog poglavlja. Stoga u primjeru 9-3 koristimo biblioteku cgihtml, da ponovite gornju Perl skriptu u C.

Primjer 9-3.Raščlanjivanje CGI podataka u C

/* cgihtmltest.c - Generički CGI program za ispis ključeva i njihovih vrijednosti

iz podataka dobivenih iz obrasca */

#uključiti

#include "cgi-lib.h" /* Ovo sadrži sve definicije CGI funkcija */

#include "html-lib.h" /* Ovo sadrži "sve definicije pomoćnih funkcija za HTML */

void print_all(lllist 1)

/* Ove funkcije izlaze obrascu poslane podatke u istom formatu kao i gornja Perl skripta. Cgihtml također nudi ugrađenu funkciju

Print_entries() koji čini isto koristeći format HTML liste. */ (

čvor*prozor;

/* Tip "čvor" definiran je u cgihtml biblioteci i odnosi se na povezani popis koji sadrži sve podatke obrasca. */

prozor = i.glava; /* Postavlja pokazivač na početak podataka obrasca */

dok (prozor != NULL) ( /* Prijelaz preko povezanog popisa do posljednjeg (prvog praznog) elementa */

printf(" %s:%s
\n",window->entry.name,replace_ltgt(window->entry.value));

/* Izlazni podaci. Replace__ltgt() je funkcija koja razumije HTML kodiranje teksta i osigurava da je ispravno prikazan u pregledniku klijenta. */

prozor = prozor->sljedeća; /* Prelazak na sljedeći element na popisu. */

} }

int main() (

popis unosa; /* Pokazivač na raščlanjene podatke*/

status int; /* Cijeli broj koji predstavlja status */

html_header(); /* HTML pomoćna funkcija koja daje HTML zaglavlje */

html_begin("cgihtml test");

/* HTML pomoćna funkcija koja daje početak HTML stranice s navedenim naslovom. */

status = read_cgi_input(&unosi); /* Izvodi unos i raščlanjivanje podataka obrasca */

printf("<р>Podaci obrasca:
");

print_sve(unosi); /* Poziva funkciju print_all() definiranu gore. */

html_end(); /* HTML pomoćna funkcija koja daje kraj HTML stranice. */

List_clear(&unosi); /* Oslobađa memoriju koju zauzimaju podaci obrasca. */

vrati 0; )

Standardni izlazni uređaj

Podatke koje CGI program šalje na standardni izlaz čita web poslužitelj i šalje klijentu. Ako naziv skripte počinje s nph-, podaci se šalju izravno klijentu bez intervencije web poslužitelja. U ovom slučaju, CGI program mora generirati važeće HTTP zaglavlje koje će klijent razumjeti. U suprotnom, neka web poslužitelj generira HTTP zaglavlje umjesto vas.

Čak i ako ne koristite nph-script, morate poslužitelju dati jednu direktivu koja će mu reći informacije o vašem izdavanju. Ovo je obično HTTP zaglavlje Content-Type, ali može biti i zaglavlje lokacije. Nakon naslova mora biti prazan redak, tj. novi redak ili kombinacija CR/LF.

Zaglavlje Content-Type govori poslužitelju koju vrstu podataka vaš CGI program poslužuje. Ako je ovo HTML stranica, niz bi trebao biti Content-Type: tekst/html. Zaglavlje Lokacija govori poslužitelju drugi URL - ili drugačiji put na istom poslužitelju - kamo usmjeriti klijenta. Naslov bi trebao izgledati ovako: Lokacija: http:// www. moj poslužitelj. com/drugo/mjesto/.

Nakon HTTP zaglavlja i praznog niza, možete poslati stvarne podatke koje vaš program proizvodi - HTML stranicu, sliku, tekst ili bilo što drugo. Među CGI programima koji dolaze s Apache poslužiteljem su nph-test-cgi i test cgi, koji dobro pokazuju razliku između nph i ne-nph naslova, redom.

U ovom ćemo odjeljku koristiti knjižnice CGI.pm i cgic, koji imaju funkcije za izlaz i HTTP i HTML zaglavlja. To će vam omogućiti da se usredotočite na izlaz stvarnog sadržaja. Ove pomoćne funkcije koriste se u primjerima ranije u ovom poglavlju.

Važne značajke CGI skripti

Već znate u osnovi kako CGI radi. Klijent šalje podatke, obično putem obrasca, na web poslužitelj. Poslužitelj izvršava CGI program, prosljeđujući mu podatke. CGI program obavlja svoju obradu i vraća svoj izlaz poslužitelju, koji ga šalje klijentu. Sada, od razumijevanja kako CGI-npor okviri rade, moramo prijeći na razumijevanje zašto se tako široko koriste.

Iako već znate dovoljno iz ovog poglavlja da sastavite jednostavan CGI program koji radi, potrebno je razmotriti još nekoliko važnih stvari prije nego što počnete pisati stvarno funkcionalne programe za MySQL ili mSQL. Prvo morate naučiti kako raditi s više oblika. Zatim morate naučiti neke sigurnosne mjere koje će spriječiti napadače da dobiju nezakonit pristup datotekama vašeg poslužitelja ili ih unište.

Državno pamćenje

Izvještavanje o stanju je vitalno sredstvo za pružanje dobre usluge vašim korisnicima, a ne samo za borbu protiv okorjelih kriminalaca, kako se čini. Problem je uzrokovan činjenicom da je HTTP takozvani "memoryless" protokol. To znači da klijent šalje podatke poslužitelju, poslužitelj vraća podatke klijentu, a onda svatko ide svojim putem. Poslužitelj ne pohranjuje podatke o klijentu koji bi mogli biti potrebni u narednim operacijama. Isto tako, nema jamstva da će klijent spremiti podatke o transakciji koji se mogu kasnije koristiti. To nameće trenutno i značajno ograničenje na korištenje World Wide Weba.

Skriptiranje CGI-a prema ovom protokolu analogno je nemogućnosti pamćenja razgovora. Kad god s nekim razgovarate, bez obzira koliko ste često razgovarali s njim prije, morate se predstaviti i pronaći zajedničku temu za razgovor. Nepotrebno je reći da to ne doprinosi produktivnosti. Slika 9-2 pokazuje da svaki put kada zahtjev stigne do CGI programa, to je potpuno nova instanca programa bez veze s prethodnom.

Na strani klijenta, s pojavom Netscape Navigatora, postojalo je rješenje koje se zvalo kolačići. Sastoji se od stvaranja novog HTTP zaglavlja koje se može slati naprijed-natrag između klijenta i poslužitelja, slično zaglavljima Content-Type i Location. Klijentski preglednik, po primitku zaglavlja kolačića, mora pohraniti podatke u kolačić, kao i naziv domene na kojoj kolačić djeluje. Nakon toga, kad god se posjeti URL unutar navedene domene, zaglavlje kolačića mora se vratiti poslužitelju za korištenje u CGI programima na tom poslužitelju.

Metoda kolačića uglavnom se koristi za pohranu korisničkog ID-a. Podaci o posjetiteljima mogu se pohraniti u datoteku na poslužiteljskom stroju. Jedinstveni ID ovog korisnika može se poslati kao kolačić u korisnikov preglednik, nakon čega, svaki put kada korisnik posjeti stranicu, preglednik automatski šalje ovaj ID poslužitelju. Poslužitelj prosljeđuje ID CGI programu, koji otvara odgovarajuću datoteku i dobiva pristup svim podacima o korisniku. Sve se to događa na način koji je korisniku nevidljiv.

Koliko god ova metoda bila korisna, većina velikih web stranica je ne koristi kao jedini način pamćenja stanja. Za to postoji niz razloga. Prvo, ne podržavaju svi preglednici kolačiće. Donedavno glavni preglednik za slabovidne (da ne spominjemo osobe s slabom brzinom mreže) - Lynx - nije podržavao kolačiće. Još uvijek ih "službeno" ne podržava, iako neke od njegovih široko dostupnih "bočnih grana" podržavaju. Drugo, i što je još važnije, kolačići povezuju korisnika s određenim strojem. Jedna od velikih vrlina Weba je da je dostupan s bilo kojeg mjesta na svijetu. Bez obzira na to gdje je vaša web stranica stvorena ili pohranjena, može se prikazati s bilo kojeg uređaja spojenog na internet. Međutim, ako pokušate pristupiti web-mjestu s omogućenim kolačićima s tuđeg računala, svi vaši osobni podaci koje je kolačić podržavao bit će izgubljeni.

Mnoga web-mjesta još uvijek koriste kolačiće za personalizaciju korisničkih stranica, ali većina ih nadopunjuje tradicionalnim sučeljem u stilu prijave/lozinke. Ako se stranici pristupa iz preglednika koji ne podržava kolačiće, tada stranica sadrži obrazac u kojem korisnik upisuje korisničko ime i lozinku koja mu je dodijeljena kada je prvi put posjetio stranicu. Obično je ovaj obrazac malen i skroman kako ne bi uplašio većinu korisnika koje ne zanima nikakva personalizacija, već jednostavno žele ići dalje. Kada korisnik unese korisničko ime i lozinku u obrazac, CGI pronalazi korisničku podatkovnu datoteku kao da je ime poslano s kolačićem. Koristeći ovu metodu, korisnik se može registrirati na personaliziranoj web stranici s bilo kojeg mjesta u svijetu.

Osim zadataka obračuna korisničkih preferencija i dugotrajnog pohranjivanja informacija o tome, može se dati suptilniji primjer pamćenja stanja, koji pružaju popularne tražilice. Kada pretražujete pomoću usluga kao što su AltaVista ili Yahoo, obično dobivate daleko više rezultata nego što možete prikazati u lako čitljivom formatu. Ovaj se problem rješava prikazivanjem malog broja rezultata - obično 10 ili 20 - i pružanjem nekih sredstava za navigaciju za prikaz sljedeće grupe rezultata. Iako se ovo ponašanje čini uobičajenim i očekivanim za prosječnog web surfera, stvarna implementacija nije trivijalna i zahtijeva pamćenje stanja.

Kada korisnik prvi put uputi zahtjev tražilici, ona prikuplja sve rezultate, možda podliježu nekom unaprijed definiranom ograničenju. Trik je dati ove rezultate u isto vrijeme u maloj količini, a pritom zapamtiti kakav je korisnik tražio ove rezultate i koji dio očekuje sljedeći. Ostavljajući po strani složenost same tražilice, suočeni smo s problemom dosljednog pružanja korisniku neke informacije na jednoj stranici. Razmotrite primjer 9-4, koji prikazuje CGI skriptu koja daje deset redaka datoteke i omogućuje joj da pogleda sljedećih ili prethodnih deset redaka.

Primjer 9-4. Spremanje stanja u CGI skriptu

#!/usr/bin/perl -w

koristiti CGI;

Open(F,"/usr/dict/words") ili die("Ne mogu otvoriti! $!");

#Ovo je datoteka koja će biti izlazna, može biti bilo što.

$output = novi CGI;

sub print_range ( # Ovo je glavna funkcija programa, moj $start = shift;

# Početni redak datoteke, moj $count = 0;

# Pokazivač, moj $line = "";

# Trenutni redak datoteke, ispis $output->header,

$output->start_html("Moj rječnik");

# Generira HTML s naslovom "Moj rječnik", ispis " \n";

dok (($broj< $start) and ($line = )) ( $count++; )

# Preskoči sve retke prije početka, dok (($count< $start+10) and ($line ? )) ( ispis $line; $count++; )

# Ispišite sljedećih 10 redaka.

moj $newnext = $start+10; moj $newprev = $start-10;

# Postavite početne nizove za "Sljedeći" i "Prethodni" URL,

ispis"

";

osim ako ($start == 0) ( # Omogućite "Prethodni" URL osim ako vi

# više nije na početku.

ispis qq%Prethodni%; )

osim ako (eof) ( # Uključite "Sljedeći" URL osim ako # ne na kraju datoteke.

ispis qq%Sljedeći%;

}

ispis "HTML;HTML

izlaz (0); )

# Ako nema podataka, počni ispočetka,

ako (ne $output->param) (

&raspon_ispisa(0); )

# Inače, počnite od niza navedenog u podacima.

&print_range($output->param("start"));

U ovom primjeru, pamćenje stanja se obavlja najjednostavnijom metodom. Nema problema sa spremanjem podataka, jer ih čuvamo u datoteci na serveru. Moramo samo znati odakle započeti izlaz, tako da skripta jednostavno uključuje početnu točku za sljedeću ili prethodnu grupu redaka u URL-u, što je sve što je potrebno za generiranje sljedeće stranice.

Međutim, ako vam je potrebno više od pukog pomicanja kroz "datoteku, oslanjanje na URL može biti glomazno. Ovu poteškoću možete ublažiti korištenjem HTML obrasca i uključivanjem podataka o stanju u oznake. SKRIVENI tip. Ovu tehniku ​​s uspjehom koriste mnoga web-mjesta, omogućujući vam povezivanje između povezanih CGI programa ili proširenje upotrebe jednog CGI programa, kao u prethodnom primjeru. Umjesto upućivanja na određeni entitet, kao što je početna stranica, URL podaci mogu upućivati ​​na automatski generirani korisnički ID.

Ovako rade AltaVista i druge tražilice. Prvo pretraživanje generira korisnički ID koji je implicitno uključen u sljedeće URL-ove. Ovaj ID je povezan s jednom ili više datoteka koje sadrže rezultate upita. U URL su uključene još dvije vrijednosti: trenutna pozicija u datoteci rezultata i smjer u kojem se želite dalje kretati u njoj. Ove tri vrijednosti su sve što je potrebno za pokretanje moćnih navigacijskih sustava velikih tražilica.

Međutim, nedostaje još nešto. Datoteka korištena u našem primjeru /usr/diet/words vrlo velika. Što ako ga ostavimo usred čitanja, ali mu se želimo vratiti kasnije? Ako se ne sjećate URL-a sljedeće stranice, nema načina da se vratite, čak vam ni AltaVista ne dopušta. Ako ponovno pokrenete računalo ili počnete raditi s drugog, nemoguće je vratiti se na prethodne rezultate pretraživanja bez ponovnog unosa upita. Međutim, ova dugoročna zadržavanje stanja u središtu je personalizacije web stranice o kojoj smo gore govorili i vrijedi vidjeti kako se to može iskoristiti. Primjer 9-5 je modificirana verzija primjera 9-4.

Primjer 9-5. Trajna memorija stanja

#!/usr/bin/perl -w

koristiti CGI;

umask 0;

Open(F,"/usr/dict/words") ili die("Ne mogu otvoriti! $!");

Chdir("users") ili die("Ne mogu se promijeniti u direktorij $!");

# Ovo je direktorij u koji će se pohranjivati ​​svi podaci

# o korisniku.

Izlaz = novi CGI;

ako (ne $output->param) (

ispis $output->header,

$output->start_html("Moj rječnik");

ispis "HTML;


<р>Unesite svoje korisničko ime:


HTML

izlaz (0); )

$user = $output->param("korisničko ime");

## Ako korisnička datoteka ne postoji, kreirajte je i instalirajte

## početna vrijednost u "0",

ako (ne -e "$user") (

open (U, ">$user") ili die("Ne mogu otvoriti! $!");

ispiši U "0\n";

zatvori U;

&raspon_ispisa("0");

## ako korisnik postoji i nije naveden u URL-u

## početna vrijednost, pročitajte posljednju vrijednost i počnite odatle.

) elsif (ne $output->param("start")) (

Open(U,"Suser") ili die("Ne mogu otvoriti korisnika! $!");

$početak = ; zatvori U;

chomp $starl;

raspon ispisa ($start);

## Ako korisnik postoji i nije naveden u URL-u

## početna vrijednost, napišite početnu vrijednost

## u korisničku datoteku i pokrenite izlaz.

) ostalo (

Open(U,">$user") ili die("Ne mogu otvoriti korisnika za pisanje! $!");

ispis U $output->param("start"), "\n";

zatvori U;

&print_range($output->param("početak 1)); )

podraspon_ispisa(

moj $start = pomak;

moj $broj = 0;

moja $line = " "

ispis $output->header,

$output->start_html(" Moj rječnik ");

ispis"

\n"; 

dok (($broj< $start) and ($line = )) ( $count++; )

dok (($broj< $start+10) and ($line = ))

ispis $line; $broj++;

moj $newnext = $start+10;

moj $newprev = $start-10;

ispis"

osim ako (Početak == 0)

{

ispisati

qq%

prethodni%;

}

osim ako (eof) (ispiši qq%Sljedeći%;

# Primijetite da je korisničko ime "korisničko ime" dodano URL-u.

# Inače će CGI zaboraviti s kojim je korisnikom imao posla.

}

ispis $output->end_html;

izlaz (0") ;

}

Sigurnosne mjere

Prilikom pokretanja internetskih poslužitelja, bilo da su HTTP ili drugi, sigurnost je glavna briga. Razmjena podataka između klijenta i poslužitelja, izvedena u okviru

CGI postavlja niz važnih pitanja vezanih za zaštitu podataka. Sam CGI protokol prilično je siguran. CGI program prima ulaz od poslužitelja putem standardnog unosa ili varijabli okruženja, a obje su sigurne. Ali jednom kada CGI program ima kontrolu nad podacima, njegove radnje su neograničene. Loše napisan CGI program može omogućiti napadaču da dobije pristup poslužiteljskom sustavu. Razmotrimo sljedeći primjer CGI programa:

#!/usr/bin/perl -w

koristiti CGI;

moj $output = novi CGI;

moje $username = $output"param("username");

ispis $output->header, $output->start_html("Finger Output"),

"

", "prst $korisničko ime", "
", $output->end_html;

Ovaj program pruža važeće CGI sučelje naredbi prst. Ako pokrenete program baš kao finger.cgi, izlistati će sve trenutne korisnike na poslužitelju. Ako ga pokrenete kao finger.cgi?username=fred, tada će prikazati informacije o korisniku "fred" na poslužitelju. Možete ga čak pokrenuti kao prst. oo.com za prikaz informacija o udaljenom korisniku. Međutim, ako ga pokrenete kao finger.cgi?username=fred; mogu se dogoditi neželjene stvari. Leđni operator """ " u Perlu pokreće proces ljuske i izvršava naredbu koja vraća rezultat. U ovom programu" prst $korisničko ime* koristi se kao jednostavan način za izvršavanje naredbe prsta i dobivanje njezina izlaza. Međutim, većina ljuski dopušta kombiniranje više naredbi u istom retku. Na primjer, bilo koji procesor poput Bourneovog procesora to čini s "; ". Tako"prst fred;pošta prvo pokrenite naredbu prst, i zatim zapovjedi pošta koji može poslati cijelu datoteku lozinke poslužitelja neželjenom korisniku.

Jedno rješenje je raščlaniti podatke obrasca kako biste potražili zlonamjerni sadržaj. Možete, recimo, tražiti simbol ";" i izbrišite sve znakove koji slijede. Takav napad moguće je onemogućiti korištenjem alternativnih metoda. Gornji CGI program može se prepisati ovako:

#!/usr/local/bin/perl -w

koristiti CGI;

moj $output = novi CGI;

moje $username = $output->param("korisničko ime");

$|++;

# Onemogućite međuspremnik kako biste poslali sve podatke klijentu,

ispis $output->header, $putput->start_html("Finger Output"), "

\n"; 

$pid = open(C_OUT, "-|");# Ovaj Perl idiom pokreće podređeni proces i otvara

# kanal između roditeljskog i podređenog procesa,

if ($pid) (# Ovo je roditeljski proces.

ispisati ; ft Ispišite izlaz podređenog procesa.

ispis"

", $output->end_html;

izlaz (O); ft Prekinite program. )

elsif (definiran $pid) ( # Ovo je podređeni proces.

$|++; # Onemogući međuspremnik.

exec("/usr/bin/finger",$username) ili die("exec() poziv nije uspio.");

# Izvršite program prsta s korisničkim imenom kao jedinim
# argument naredbenog retka. ) else ( die("fork() nije uspjela"); )

# Provjera pogreške.

Kao što vidite, ovo nije puno složeniji program. Ali ako ga pokrenete kao finger.cgi?username=fred; tada će se program prsta izvršiti s argumentom fred; pošta kao jedno korisničko ime.

Kao dodatna sigurnosna mjera, ova skripta izvodi prst eksplicitno kao /usr/bin/finger. U malo vjerojatnom slučaju da web poslužitelj proslijedi neobičan PATH vašem CGI programu, pokretanje samo prsta može uzrokovati pokretanje pogrešnog programa. Druga sigurnosna mjera može se poduzeti ispitivanjem varijable okruženja PATH i osiguravanjem da ima prihvatljivu vrijednost. Dobra je ideja ukloniti trenutni radni direktorij iz PATH-a, osim ako niste sigurni da to nije slučaj kada stvarno trebate izvršiti program u njemu.

Još jedno važno sigurnosno razmatranje odnosi se na prava korisnika. Prema zadanim postavkama, web poslužitelj pokreće CGI program s pravima korisnika koji je pokrenuo sam poslužitelj. Obično se radi o pseudo-korisniku, poput "nitko", koji ima ograničena prava, pa i CGI program ima malo prava. To je obično dobra stvar, jer ako napadač može pristupiti poslužitelju putem CGI programa, neće moći učiniti mnogo štete. Primjer krađe lozinke pokazuje što se može učiniti, ali stvarna šteta na sustavu obično je ograničena.

Međutim, rad kao ograničeni korisnik također ograničava mogućnosti CGI-ja. Ako CGI program treba čitati ili pisati datoteke, to može učiniti samo ako ima tu dozvolu. Na primjer, u drugom primjeru stanja, datoteka se održava za svakog korisnika. CGI program mora imati dopuštenje za čitanje i pisanje u direktorij koji sadrži te datoteke, a da ne spominjemo same datoteke. To se može učiniti stvaranjem direktorija kao isti korisnik kao i poslužitelj, s dopuštenjima čitanja/pisanja samo za tog korisnika. Međutim, za korisnika poput "nitko", samo root ima ovu mogućnost. Ako niste superkorisnik, morat ćete komunicirati s administratorom sustava za svaku promjenu u CGI-ju.

Drugi način je učiniti imenik slobodnim za čitanje i pisanje, učinkovito uklanjajući svaku zaštitu iz njega. Budući da je jedini način za pristup tim datotekama iz vanjskog svijeta putem vašeg programa, opasnost nije tako velika kao što se može činiti. Međutim, ako se pronađe rupa u programu, udaljeni korisnik imat će potpuni pristup svim datotekama, uključujući mogućnost da ih uništi. Osim toga, legitimni korisnici koji rade na poslužitelju također će moći mijenjati ove datoteke. Ako ćete koristiti ovu metodu, svi korisnici poslužitelja moraju biti pouzdani. Također, koristite otvoreni direktorij samo za datoteke koje su potrebne CGI programu; drugim riječima, nemojte ugrožavati nepotrebne datoteke.

Ako je ovo vaše prvo izlaganje CGI programiranju, daljnje učenje može se nastaviti na razne načine. Deseci knjiga su napisani na tu temu, od kojih mnoge ne pretpostavljaju nikakvo znanje o programiranju. CGI programiranje na World Wide Webu Izdavačka kuća O "Reilly and Associates pokriva materijal od jednostavnih skripti na različitim jezicima do stvarno nevjerojatnih trikova i trikova. Javnih informacija također ima u izobilju na WWW-u. Dobro je započeti s CGI je vrlo jednostavan(Zaista samo o CGI) na http://www.jmarshall.com/easy/cgi/ .

CGI i baze podataka

Od početka internetske ere, baze podataka su bile u interakciji s razvojem World Wide Weba. U praksi, mnogi ljudi gledaju na web kao samo jednu divovsku bazu podataka multimedijskih informacija.

Tražilice pružaju svakodnevni primjer prednosti baza podataka. Tražilica ne ide cijelim internetom tražeći ključne riječi u trenutku kada ih tražite. Umjesto toga, programeri stranice koriste druge programe za stvaranje golemog indeksa koji služi kao baza podataka iz koje tražilica dohvaća zapise. Baze podataka pohranjuju informacije na način koji omogućuje brzi slučajni pristup.

Zbog svoje nestabilnosti, baze podataka daju webu još više snage: pretvaraju ga u potencijalno sučelje za bilo što. Na primjer, administracija sustava može se obaviti na daljinu putem web sučelja umjesto da se od administratora traži da se prijavi na željeni sustav. Povezivanje baza podataka s webom u središtu je nove razine interaktivnosti na internetu.

Jedan od razloga zašto su baze podataka povezane s webom redovito se pojavljuje: velik dio svjetskih informacija već je u bazama podataka. Baze podataka koje su postojale prije pojave weba nazivaju se naslijeđenim bazama podataka (za razliku od baza podataka koji nisu povezani s webom stvorenih u novije vrijeme, što bi se trebalo nazvati "lošom idejom"). Mnoge korporacije (pa čak i pojedinci) sada su suočeni s izazovom pružanja pristupa ovim naslijeđenim bazama podataka putem weba. Osim ako vaša naslijeđena baza podataka nije MySQL ili mSQL, ova tema je izvan dosega ove knjige.

Kao što je već rečeno, samo vaša mašta može ograničiti komunikaciju između baza podataka i weba. Trenutno postoje tisuće jedinstvenih i korisnih baza podataka dostupnih na webu. Vrste baza podataka koje rade izvan ovih aplikacija prilično su različite. Neki od njih koriste CGI programe kao sučelje za poslužitelj baze podataka kao što je MySQL ili mSQL. Ove vrste nas najviše zanimaju. Drugi koriste komercijalne aplikacije za interakciju s popularnim stolnim bazama podataka kao što su Microsoft Access i Claris FileMaker Pro. A drugi jednostavno rade s ravnim tekstualnim datotekama, koje su najjednostavnije moguće baze podataka.

Ove tri vrste baza podataka mogu se koristiti za razvoj korisnih web stranica bilo koje veličine i složenosti. Jedan od naših ciljeva u sljedećih nekoliko poglavlja bit će prenijeti snagu MySQL mSQL na web pomoću CGI programiranja.

E-trgovina na razumljivom ruskom. Kako posao funkcionira na internetu?

U posljednje vrijeme sve je više projekata vezanih uz online trgovinu. Proučavajući ovaj smjer, nisam mogao pronaći opći i razumljiv opis procesa. Stoga sam odlučio napraviti nešto poput cheat sheeta, na koji se uvijek možete pozvati kako biste razumjeli postupak u takvom području kao što je e-trgovina.

Odmah ću rezervirati da sam se usredotočio na procese i kanale koji pomažu privlačenju kupaca.

E-trgovina: o čemu se radi?

Definicije iz raznih izvora govore nešto o prodaji robe ili usluga putem interneta. Jednostavnim riječima, e-trgovina je svaka aktivnost na mreži u kojoj se pojavljuje novac.

Kupovina, prodaja, osiguranje, bankarstvo, elektronički novac, sve je tu. Uzmi, potpiši.

Od mete

Kako bih razumio problem, predlažem da krenemo na putovanje od samog kraja. Što je cilj svakog posla? Tako je, zaradite. Dakle, zamislite bilo koji proizvod, na primjer, silikonske čarape. Zašto ne!

Uzeo sam prvo što mi je palo na pamet, pokazalo se da postoji ovo ...

Naš zadatak je zaraditi novac na ovim čarapama. Razmišljamo o internetu. Hm...zašto ne "skratite" stranicu i tako će ići prodaja, samo zadržite Maldive! No, nije sve tako jednostavno.

Jako volim crtati. Pomaže razumjeti različite procese. Nacrtajmo?!

Do sada naš model izgleda ovako. Uzimamo čarape, stavljamo ih na internet i dobivamo novac. Jednostavno je super! Oči peku, dlanovi se znoje i već se želim uhvatiti ovog posla. Ali trebate napraviti web stranicu ili platformu za prodaju?

Web stranica ili platforma na prodaju

Postoje razna rješenja za postavljanje vašeg proizvoda na World Wide Web. Možete izraditi vlastitu web stranicu ili koristiti stranice trećih strana (grupe, stranice na društvenim mrežama, oglasne ploče itd.). Zaustavimo se na mjestu.

Naručili su web stranicu, uzeli gotov predložak ili su ga sami izradili pomoću konstruktora (CMS se može proguglati), nije važno. Zatim su stavili hrpu silikonskih čarapa različitih vrsta i sretni su.

Oprostite mi što prekidam čitanje. Pridružite se mom telegram kanalu. Svježe najave članaka, razvoj digitalnih proizvoda i rast hack, sve je tu. Čekam te! Nastavljamo ...

Sustavi plaćanja

No, da bi osoba mogla kupovati od vas ovdje i sada, bit će potrebno dotjerati sustave plaćanja. Ovo je svojevrsna usluga koja vam omogućuje kupnju putem interneta putem: bankovnih kartica, internetskog novca, mobitela i gomile drugih stvari. Za to ćete morati podijeliti postotak transakcija, ali ćete na taj način uvelike pojednostaviti svoj život.

Odaberite uslugu koja Vama odgovara. Negdje će biti veći postotak, a negdje pretplatnik ili nešto treće. Samo malo istraži pitanje. Stavite sebi potreban kod na stranicu, povežite sve transakcije sa svojim kartičnim računom i voila!

Činilo se da je to sve. Postoji web stranica, kartice proizvoda, pa čak i tipka “kupi” radi, ali nešto nedostaje... Nema protoka kupaca koji će kupiti.

Tokovi kupaca

Gdje: CAC = trošak akvizicije novog korisnika. MCC (marketingcampaigncosts) = ukupni trošak marketinške potrošnje za stjecanje (ali ne i zadržavanje) kupaca. W (plate) = Plaća za trgovce i menadžere prodaje. S (softver) = trošak softvera koji se koristi u oglašavanju i prodaji (npr. prodajna platforma, marketinška automatizacija, A/B testiranje, analitičke usluge, itd.). PS (professionalservices) = Trošak profesionalnih usluga koje se pružaju odjelima marketinga i prodaje (dizajn, savjetovanje, itd.). O (ostalo) = Ostali režijski troškovi povezani s odjelima marketinga i prodaje. CA (customersacquired) = ukupan broj stečenih kupaca.

Ali ne smijemo zaboraviti na kvalitetu klijenta, LTV će ovdje pomoći.

Važni pokazatelji: LTV

Live Time Value, životni ciklus korisnika, još je jedna metrika e-trgovine koju treba uzeti u obzir. Pokazuje koliki prihod u prosjeku donosi jedan klijent. Postoje različiti pristupi obračunu, ja sam odabrao stvarnu dobit kao jedan od najtočnijih.

To je jednostavno zbroj ukupnog prihoda povijesti kupnji za svakog pojedinog kupca. Dodajte zbroj svih kupovina (transakcija) na transakciju N, gdje je transakcija N posljednja kupnja koju je kupac napravio u vašoj tvrtki. Ako imate pristup svim podacima o transakcijama kupaca, to možete jednostavno izračunati pomoću Excela.

LTV = (transakcija 1 + transakcija 2 + transakcija 3… + transakcija N) x udio u dobiti u prihodu.

Izračun LTV-a na temelju neto prihoda u konačnici pokazuje stvarnu dobit koju klijent donosi vašoj tvrtki. Ovdje se uzimaju u obzir trošak korisničke usluge, trošak zadržavanja, trošak nabave itd. Rezultat je cijeli kompleks izračuna na temelju pojedinačnih podataka. Kumulativna dobit koju je ostvario jedan klijent tijekom vremena pružit će vam točno razumijevanje dosadašnje profitabilnosti vaših klijenata.

Ostali pristupi se mogu naći na.

Važni pokazatelji: omjer CAC i LTV

Da biste razumjeli održivost poslovanja, vrlo je važno pogledati omjer dvaju spomenutih CAC:LTV metrika.

  • Manje od 1:1 - Idete prema bankrotu.
  • 1:1 - Gubite novac na svakom privučenom klijentu.
  • 1:2 - Zvuči dobro, ali izgleda da ne ulažete dovoljno i da biste mogli brže rasti. Pokrenite agresivnije kampanje za privlačenje kupaca i postignite omjer blizu 1:3.
  • 1:3 - Idealan omjer. Imate uspješan posao i snažan poslovni model.

Važni pokazatelji: ROI nije zaboravljen

Kao što smo gore raspravljali, u e-trgovini je potrebno jasno razumjeti je li isplativo koristiti kanal akvizicije ili ne. Uz LTV i CAC, postoji još jedan važan pokazatelj, a to je ROI. To pokazuje da li se vaša investicija isplatila, u našem slučaju u oglašavanju. To je. koliko nam je na kraju donijela 1 uložena rublja.

Za izračun se koristi vrlo jednostavna formula:

Gdje je "Prihod od kampanje" razlika između prihoda kanala i cijene vašeg proizvoda. A da biste izračunali dobit, oduzmite više troškova oglašavanja.

Dakle, detaljnija formula bi izgledala ovako:

ROI = (prihodi kanala - troškovi) - troškovi oglašavanja / troškovi oglašavanja x 100%

Pročitajte detaljniji primjer s izračunom. Zapravo, ova jednostavna formula smještena je u istu Excel tablicu, gdje se sve automatski izračunava.

Sva tri pokazatelja koja smo analizirali važna su u e-trgovini. Svaki od njih vam omogućuje da pronađete uska grla u svojim streamovima i radite s njima. Upravo u njima leži potencijal rasta poslovanja. Još sam malo dodala našem modelu s čarapama.

Nije moguće sve uklopiti u jedan materijal, a tko će ga čitati toliko dugo? Kasnije ću napraviti poseban vodič o nijansama e-trgovine koje mogu ometati prodaju.

Ukupno

Općenito, sada imate opće razumijevanje internetskog trgovanja ili e-trgovine. Nadalje, kako kažu: "Đavao je u detaljima." Proučite svaki od kanala zasebno, izračunajte pokazatelje uspješnosti i potražite nove uvide u pojedinostima. Internet prodaja za vas, da više! I još nešto od mene.

Da, skoro sam zaboravio, sretna vam Nova godina, dragi čitatelji! Želim vam velike pobjede i uspjehe u narednoj godini!

Vlasnici internetskih trgovina iz prve ruke upoznati su s konceptom "elektroničke trgovine", zasigurno znaju odgovor na pitanje "e-trgovina - što je to". Ali ako razumijete suštinu, tada se pojavljuju mnoge nijanse i ovaj pojam poprima šire značenje.

E-trgovina: što je to?

Opći koncept je sljedeći: e-trgovina se shvaća kao određeni pristup poslovanju koji uključuje uključivanje niza operacija koje koriste digitalni prijenos podataka u pružanju robe ili pružanju usluga/radova, uključujući kroz Internet.

Dakle, radi se o svakoj komercijalnoj transakciji koja se provodi korištenjem elektroničkog komunikacijskog sredstva.

Shema rada uređena je kako slijedi:

  • svatko može biti bloger ili bilo koji drugi vlasnik svoje internetske stranice) registrira se u ovom sustavu;
  • dobiva svoju vezu;
  • postavlja poseban kod na svoju web stranicu - pojavljuje se oglas odabranog službenog partnera mreže e-Commerce Partners;
  • prati konverziju web stranice;
  • zarađuje određeni postotak za svaku kupnju posjetitelja njegove stranice koji je kliknuo na affiliate link.

WP eCommerce

Velik broj ljudi sada je strastven za e-trgovinu, prvenstveno zbog želje za stvaranjem vlastite web stranice, jedinstvene online trgovine za prodaju vlastitih proizvoda. Kako bi zadovoljili ovu rastuću potražnju, programeri su se usredotočili na izradu predložaka e-trgovine (predložaka za e-trgovinu). Što je to, razmotrit ćemo dalje.

Jedan takav primjer predložaka je WordPress e-trgovina. Riječ je o dodatku za košaricu za WordPress (jedan od najpoznatijih sustava za upravljanje web resursima, prvenstveno namijenjen kreiranju i organiziranju blogova). Omogućuje se potpuno besplatno i posjetiteljima stranice omogućuje kupnju na internetskoj stranici.

Drugim riječima, ovaj dodatak omogućuje stvaranje online trgovine (temeljenu na WordPressu). Ovaj dodatak za e-trgovinu ima sve potrebne alate, postavke i opcije kako bi zadovoljio današnje potrebe.

Stranica 1 od 30

Danas su takve stvari kao što su knjiga gostiju, pretraga poslužitelja, obrazac za slanje poruka bitan atribut gotovo svake ozbiljne stranice. Problem uvođenja ovih i drugih zvona i zviždaljki, naravno, na svaki način uzbuđuje maštu webmastera početnika, lišavajući ga sna, apetita i žudnje za pivom. Nažalost, proučavanje HTML-izvora stranica konkurenata ne daje ništa osim linkova na određeni "cgi-bin", a čak se iu news grupama ponekad spominje neka vrsta cgi-skripte. Ovaj članak je posvećen osnovama korištenja istih cgi skripti za slavu i prosperitet vaše stranice.

Za početak, mislim da moramo razumjeti koncepte. CGI skripta je program koji se izvodi na web poslužitelju na zahtjev klijenta (odnosno posjetitelja web stranice). Ovaj se program u osnovi ne razlikuje od uobičajenih programa koji su instalirani na vašem računalu - bilo da se radi o MS Wordu ili igrici Quake. CGI nije programski jezik u kojem je skripta napisana, ali Common Gateway Interface je posebno sučelje s kojim se skripta pokreće i s njim komunicira.

Kratka digresija o CGI

Dakle, što je CGI- skripte i općenito slične stvari. Počnimo s činjenicom da je vaš preglednik (kada ste upisali URL) spaja se prema protokolu HTTP sa navedenim poslužiteljem i traži od njega željenu datoteku, otprilike ovako:

GET /~paaa/cgi-bin/guestbbok.cgi HTTP/1.0-Ovo je najvažnije u zahtjevu

Pa, ako se na primjer traži jednostavna datoteka .html onda ako postoji takva datoteka, poslužitelj će poslati odgovor pregledniku:

HTTP/1.0 200 U redu
Vrsta sadržaja: tekst/html

Dalje nakon praznog retka (potrebno je odvojiti Zaglavlje iz tijelo) dolazi informacija iz URL"a ...
To je u biti sve www.... ideš od linka do linka ....
Ali što ako trebate unijeti nešto u ovaj dosadan proces stvarno interaktivno, dinamično, lijepo i veličanstveno....? Pa, postoji odgovor na ovo pitanje. Samo što ako u traženom URL navedite poseban program ( CGI,program Zajedničko sučelje pristupnika - Zajedničko sučelje pristupnika) i činjenica da će ovaj program nešto izdati i poslati u preglednik .... Server se pokreće .cgi program i, na primjer, nakon obrade podataka obrasca, unese vas negdje u svoju bazu podataka, i to vam kaže ti si veliki tip :)
Pa nadam se da sam te zaintrigirao......?

Kratke informacije o tome što trebate znati za pisanje CGI skripte: Pa, prije svega, morate znati što internet i kako to funkcionira (znate li? ;))) ) Pa, malo vještine programiranja (ovo je najvažnije)
Hajde da zajedno napišemo neki jednostavan skript pa ću ti onda reći gdje je pas kopao ovdje....
Pa, prvo stvorite imenik u svom početnom imeniku cgi-bin:

cd public_html
mkdir cgi-bin
chmod 0777 cgi-bin

Posljednja linija bit će vrlo važna.
Uzmi uređivač i upiši: #!/usr/bin/perl
#prvi.cgi
print "Vrsta sadržaja: tekst/html\n\n";
ispis" ";
ispis"

Hej ti!!!

";
ispiši "";

Spremite ga u imenik cgi-bin pod imenom prvo.cgi.Pa kako si to spasio?
A sada ga učinite izvršnim (na kraju krajeva, ovo je program):

chmod +x prvo.cgi

Pa, približavamo se svečanom trenutku .... upišite u redak preglednika http://www.uic.nnov.ru/~your_login/cgi-bin/first.cgi
i vidjeti što će se dogoditi. Bit će jedna od dvije stvari, ili će skripta raditi i vidjet ćete stranicu koju je generirala (čestitamo, stigla je na našu policu!) ili Interna pogreška poslužitelja Onda ne brini, nešto si pogriješio. Tada će vam trebati vodič za hvatanje buha. Pa, prije svega, provjera sintakse može se obaviti na sljedeći način:

perl -c prvi.cgi

Perl će vam odmah dati ili poruke o pogrešci (dobro, događa se da ste propustili točku-zarez, zaboravili ste zatvoriti zagrade ili navodnike...) ovo se može popraviti usput.
Logičnije je grubije preskočiti izlaz praznog retka koji odvaja zaglavlje od tijela:
print "Vrsta sadržaja: tekst/html\n\n"; #Sve je u redu
print "Vrsta sadržaja: tekst/html\n"; #GREŠKA!!!

Analizirajmo skriptu:
Prvi red #!/usr/bin/perl Jednostavno određuje gdje se Perl nalazi u sustavu. Drugi je samo komentar - nakon znaka možete bocnuti bilo što #
Onda dolazi print "Vrsta sadržaja: tekst/html\n\n"; Ovo je zaglavlje koje označava vrstu sadržaja koji skripta ispisuje na svoj standardni izlaz STDOUT ide na poslužitelj na obradu. Prazan red odvaja zaglavlje od tijela, što u našem slučaju jest

Hej ti!!!



Poslužitelj će obraditi odgovor skripte i na temelju njega generirati i poslati odgovor pregledniku. (Poslužitelj obično ne mijenja tijelo poruke, samo dopunjuje zaglavlje s poljima potrebnim za HTTP protokol)

Pa, osnove su već savladane, nije sve tako teško i depresivno kao što se na prvu čini
Sada možete sami vježbati pisanje tako jednostavnih skripti kako biste ih se dočepali.