E-trgovina v jasni ruščini. Kako poteka spletno poslovanje?
V zadnjem času je vedno več projektov, povezanih s spletnim trgovanjem. Med preučevanjem tega področja nisem našel splošnega in razumljivega opisa procesa. Zato sem se odločil narediti nekaj takega kot goljufija, na katero se lahko vedno obrnete, da bi razumeli postopek na področju, kot je e-trgovina.
Takoj bom rekel, da sem se osredotočil na procese in kanale, ki pomagajo privabiti stranke.
E-trgovina: za kaj gre?
Definicije iz različnih virov povedo nekaj o prodaji blaga ali storitev prek interneta. Preprosto povedano, e-trgovina je vsaka spletna dejavnost, kjer se pojavi denar.
Nakupovanje, prodaja, zavarovanje, bančništvo, elektronski denar, vse je tukaj. Vzemi in podpiši.
Od cilja
Da bi razumeli težavo, predlagam, da začnete pot od samega konca. Kaj je cilj vsakega podjetja? Tako je, zasluži denar. Torej, predstavljajte si kateri koli izdelek, na primer silikonske nogavice. Zakaj ne!
Vzel sem prvo stvar, ki mi je padla na pamet, izkazalo se je, da je nekaj takega ...
Naša naloga je zaslužiti na teh nogavicah. Razmišljamo o internetu. Hmm...zakaj ne bi stran "posekali" in tako bo šla prodaja, samo Maldivi mi ostanejo! A ni tako preprosto.
Zelo rada rišem. To pomaga razumeti različne procese. Gremo risati?!
Zaenkrat je naš model videti takole. Vzamemo nogavice, jih damo na internet in dobimo denar. To je preprosto super! Oči vas pečejo, dlani se vam potijo in že se želite lotiti posla. Toda ali morate narediti spletno stran ali prodajno platformo?
Spletna stran ali platforma za prodajo
Obstajajo različne rešitve za umestitev vašega izdelka na svetovni splet. Ustvarite lahko lastno spletno mesto ali uporabite platforme tretjih oseb (skupine, strani na družbenih omrežjih, oglasne deske itd.). Ustavimo se na mestu.
Naročili ste spletno stran, vzeli že pripravljeno predlogo ali jo ustvarili sami z graditeljem spletnih strani (lahko googlate CMS), ni pomembno. Nato so postavili kup različnih silikonskih nogavic in bili srečni.
Oprostite, ker motim branje. Pridružite se mojemu telegram kanalu. Sveže objave člankov, razvoj digitalnih produktov in vdor v rast, vse je tu. Čakam te! Nadaljujmo ...
Plačilni sistemi
Toda, da bi oseba kupila od vas tukaj in zdaj, bo treba prilagoditi plačilne sisteme. To je nekakšna storitev, ki omogoča nakupovanje preko spleta preko: bančnih kartic, internetnega denarja, mobilnih telefonov in še kup drugih stvari. Za to si boste morali deliti odstotek transakcij, vendar si boste na ta način precej olajšali življenje.
Izberite storitev, ki vam ustreza. Nekje bo odstotek večji, nekje pa bo naročnina ali kaj drugega. Samo malo raziščite. Vnesite zahtevano kodo na svojo spletno stran, povežite vse transakcije s svojim kartičnim računom in voila!
Zdelo se je, da je to vse. Obstaja spletna stran, kartice izdelkov tudi, tudi gumb »kupi« deluje, a nekaj manjka ... Pretoka kupcev, ki bi kupovali, ni.
Tokovi strank
Kje je: CAC = strošek pridobivanja nove stranke. MCC (stroški marketinške kampanje) = skupni strošek stroškov trženja, namenjenih privabljanju strank (vendar ne obdržanju). W (plače) = plača za tržnike in vodje prodaje. S (programska oprema) = Stroški programske opreme, uporabljene pri oglaševanju in prodaji (na primer uporabljena prodajna platforma, avtomatizacija trženja, A/B testiranje, analitične storitve itd.). PS (strokovne storitve) = Stroški strokovnih storitev za tržne in prodajne oddelke (oblikovanje, svetovanje itd.). O (other) = Drugi režijski stroški, povezani z oddelki trženja in prodaje. CA (customersacquired) = skupno število privabljenih strank.
Vendar ne smemo pozabiti na kakovost stranke; LTV bo pomagal.
Pomembna metrika: LTV
Live Time Value, življenjski cikel stranke, je še en kazalnik v e-trgovini, ki ga je treba upoštevati. Prikazuje, koliko dohodka v povprečju prinese ena stranka. Obstajajo različni pristopi k izračunu, sam sem izbral dejanskega glede na dobiček, kot enega najbolj natančnih.
To je preprosto vsota celotnega prihodka v celotni zgodovini nakupov za vsako posamezno stranko. Vsoto vseh nakupov (transakcij) strank dodajte transakciji N, pri čemer je transakcija N zadnji nakup, ki ga je stranka opravila pri vašem podjetju. Če imate dostop do vseh podatkov o transakcijah strank, lahko to preprosto izračunate z uporabo Excela.
LTV = (transakcija 1 + transakcija 2 + transakcija 3... + transakcija N) x delež dobička v prihodku.
Izračun LTV na podlagi čistega dobička na koncu pokaže dejanski dobiček, ki ga stranka prinese vašemu podjetju. To upošteva stroške storitev za stranke, stroške zadrževanja, stroške privabljanja itd. Rezultat je cel kompleks izračunov na podlagi posameznih podatkov. Skupni dobiček, ustvarjen na stranko skozi čas, vam bo dal natančno razumevanje dobičkonosnosti vaših strank do danes.
Druge pristope lahko najdete na.
Pomembni indikatorji: razmerje CAC in LTV
Za razumevanje sposobnosti preživetja podjetja je zelo pomembno pogledati razmerje obeh omenjenih razmerij CAC:LTV.
- Manj kot 1:1 - Z vso hitrostjo drvite proti bankrotu.
- 1:1 – Izgubite denar za vsako privabljeno stranko.
- 1:2 – Zdi se dobro, a zdi se, da ne vlagate dovolj denarja in bi se lahko hitreje razvijali. Zaženite bolj agresivne kampanje za pridobivanje strank in dosegajte stopnje blizu 1:3.
- 1:3 – idealno razmerje. Imate uspešno podjetje in močan poslovni model.
Pomembni kazalniki: ne pozabite na donosnost naložbe
Kot smo razpravljali zgoraj, morate pri e-trgovini jasno razumeti, ali je donosna uporaba kanala za pridobivanje ali ne. Poleg LTV in CAC obstaja še en pomemben kazalnik: ROI. Pokaže, ali se je vaša naložba, v našem primeru v oglaševanje, izplačala. To je. koliko nam je na koncu prinesel 1 vloženi rubelj.
Za izračun se uporablja zelo preprosta formula:
Pri čemer je »prihodek oglaševalske akcije« razlika med prihodkom od kanala in stroški vašega izdelka. In za izračun dobička odštejte stroške oglaševanja.
Tako bi bila podrobnejša formula videti takole:
ROI = (prihodek kanala – stroški) – stroški oglaševanja / stroški oglaševanja x 100 %
Preberite podrobnejši primer z izračunom. Pravzaprav je ta preprosta formula postavljena v isto Excelovo tabelo, kjer se vse samodejno izračuna.
Vsi trije kazalniki, o katerih smo razpravljali, so pomembni v e-trgovini. Vsak od njih vam omogoča iskanje ozkih grl v vaših tokovih in delo z njimi. Tu se skriva potencial za rast podjetja. Naš model z nogavicami sem še malo dodala.
Nemogoče je vse strniti v en material in kdo ga bo bral tako dolgo? Kasneje bom naredil ločen vodnik o odtenkih e-trgovine, ki lahko motijo prodajo.
Skupaj
Na splošno zdaj na splošno razumete spletno trgovanje ali e-trgovino. Nadalje, kot pravijo: "Hudič je v podrobnostih." Preučite vsak kanal posebej, izračunajte kazalnike uspešnosti in iščite nova spoznanja v malenkostih. Internetna prodaja za vas in še več! In še en material imam.
Da, skoraj sem pozabil, srečno novo leto, dragi bralci! Želim vam veliko zmag in dosežkov naslednje leto!
Poglavje #9.
Programiranje s pomočjo CGI
Vključitev razdelka o CGI v knjigo o bazah podatkov se morda zdi tako čudna kot vključitev poglavja o popravilu avtomobila v kuharsko knjigo. Seveda, če želite iti v trgovino, potrebujete delujoč avto, toda ali je o tem primerno govoriti? Popolna razprava o CGI in spletnem programiranju na splošno presega obseg te knjige, vendar je kratek uvod v te teme dovolj za izboljšanje zmožnosti MySQL in mSQL za predstavitev podatkov na področju spleta.
To poglavje je namenjeno predvsem tistim, ki se učijo baz podatkov, a bi radi pridobili nekaj znanja o spletnem programiranju. Če je vaš priimek Berners-Lee ali Andreessen, tukaj verjetno ne boste našli ničesar, česar še ne poznate. A tudi če CGI še niste začetnik, vam je lahko hitra referenca med potapljanjem v skrivnosti MySQL in mSQL zelo koristna.
Kaj je CGI?
Tako kot večina akronimov tudi Common Gateway Interface (CGI) v resnici ne pove veliko. Vmesnik s čim? Kje je ta prehod? O kakšni skupnosti govorimo? Da bi odgovorili na ta vprašanja, se vrnimo malo nazaj in si oglejmo WWW kot celoto.
Tim Berners-Lee, fizik, ki je delal v CERN-u, je leta 1990 prišel na idejo o spletu, čeprav načrt sega v leto 1988. Ideja je bila omogočiti raziskovalcem fizike delcev preprosto in hitro izmenjavo večpredstavnostnih podatkov – besedila. , slike in zvok - prek interneta. WWW je bil sestavljen iz treh glavnih delov: HTML, URL in HTTP. HTML - Jezik za oblikovanje, ki se uporablja za predstavitev vsebine na spletu. URL - to je naslov, ki se uporablja za pridobivanje HTML (ali druge) vsebine s spletnega strežnika. In končno HTTP - je jezik, ki ga razume spletni strežnik in omogoča odjemalcem, da od strežnika zahtevajo dokumente.
Možnost pošiljanja vseh vrst informacij prek interneta je bila revolucionarna, vendar so kmalu odkrili še eno možnost. Če lahko pošljete poljubno besedilo prek spleta, zakaj potem ne morete poslati besedila, ki ga ustvari program in ne vzame iz že pripravljene datoteke? To odpira morje možnosti. Preprost primer: uporabite lahko program, ki prikazuje trenutni čas, tako da bralec vidi točen čas vsakič, ko si ogleda stran. Nekaj pametnih glav v Nacionalnem centru za superračunalniške aplikacije (NCSA), ki je ustvarjalo spletni strežnik, je videlo to priložnost in kmalu se je rodil CGI.
CGI je nabor pravil, ki programom na strežniku omogočajo pošiljanje podatkov odjemalcem prek spletnega strežnika. Specifikacijo CGI so spremljale spremembe HTML in HTTP, ki so uvedle novo funkcijo, znano kot obrazci.
Če CGI programom omogoča pošiljanje podatkov odjemalcu, potem obrazci to zmožnost razširijo tako, da odjemalcu omogočijo pošiljanje podatkov temu programu CGI. Zdaj lahko uporabnik ne samo vidi trenutni čas, ampak tudi nastavi uro! Oblike CGI so odprle vrata resnični interaktivnosti v spletnem svetu. Pogoste aplikacije CGI vključujejo:
- Dinamični HTML. Celotna spletna mesta je mogoče ustvariti z enim programom CGI.
- Iskalniki, ki najdejo dokumente, ki vsebujejo uporabniško določene besede.
- Knjige gostov in oglasne deske, kjer lahko uporabniki dodajajo svoja sporočila.
- Naročilnice.
- Vprašalniki.
- Pridobivanje informacij iz baze podatkov, ki gostuje na strežniku.
V naslednjih poglavjih bomo obravnavali vse te aplikacije CGI, pa tudi nekatere druge. Vsi nudijo odličen način za povezavo CGI z bazo podatkov, kar nas zanima v tem razdelku.
Obrazci HTML
Preden raziščemo posebnosti CGI, je koristno pogledati najpogostejši način, na katerega končni uporabniki zagotovijo vmesnik programom CGI: obrazci HTML. Obrazci so del jezika HTML, ki končnemu uporabniku ponuja različne vrste polj. Podatke, vnesene v polja, lahko pošljete na spletni strežnik. Polja se lahko uporabljajo za vnos besedila ali so gumbi, ki jih lahko uporabnik klikne ali preveri. Tukaj je primer strani HTML, ki vsebuje obrazec:
<НТМL><НЕАD><ТITLЕ>Moja stran z obrazci
<р>To je stran z obrazcem.
Ta obrazec ustvari niz s 40 znaki, kamor lahko uporabnik vnese svoje ime. Pod vrstico za vnos je gumb, s klikom na katerega se podatki obrazca prenesejo na strežnik. Spodaj so navedene oznake, povezane z obrazci, ki jih podpira HTML 3.2, danes najbolj razširjen standard. Imena oznak in atributov lahko vnesete v katerem koli primeru, vendar se držimo izbirnega dogovora, da so začetne oznake napisane z velikimi črkami, zaključne oznake pa z malimi črkami.
Edina vrsta vnosa, ki je tukaj nismo uporabili, je vrsta IMAGE za oznako . Lahko se uporabi kot alternativna metoda oddaje obrazca. Vendar pa je vrsta IMAGE redko združljiva z besedilnimi in manj odzivnimi brskalniki, zato se ji je pametno izogniti, razen če je na vašem spletnem mestu veliko grafike.
Ko se naučite osnov obrazcev HTML, se lahko začnete učiti o samem CGI.
Specifikacija CGI
Torej, kaj točno je "nabor pravil", ki omogoča programu CGI v, recimo, Batavii, Illinois, da komunicira s spletnim brskalnikom v Zunanji Mongoliji? Uradno specifikacijo CGI, skupaj z množico drugih informacij o CGI, lahko najdete na strežniku NCSA na http://hoohoo . ncsa.uluc.edu/cgi/. Vendar to poglavje obstaja prav zaradi tega, da vam ni treba dolgo potovati in ga sami iskati.
Obstajajo štirje načini, na katere CGI posreduje podatke med okvirjem CGI-npor in spletnim strežnikom ter s tem spletnim odjemalcem:
- Spremenljivke okolja.
- Ukazna vrstica.
- Standardna vhodna naprava.
- Standardna izhodna naprava.
S temi štirimi metodami strežnik posreduje vse podatke, ki jih odjemalec pošlje programu CGI. Program CGI nato naredi svojo čarovnijo in pošlje izhod nazaj na strežnik, ki ga posreduje odjemalcu.
Ti podatki temeljijo na strežniku HTTP Apache. Apache je najpogostejši spletni strežnik, ki deluje na skoraj vseh platformah, vključno z Windows 9x in Windows NT. Lahko pa veljajo za vse strežnike HTTP, ki podpirajo CGI. Nekateri lastniški strežniki, kot sta strežnika Microsoft in Netscape, imajo lahko dodatne funkcije ali delujejo nekoliko drugače. Ker se podoba spleta še naprej spreminja z neverjetno hitrostjo, se standardi še vedno razvijajo in nedvomno bo prišlo do sprememb v prihodnosti. Ko pa gre za CGI, se zdi, da je tehnologija uveljavljena – za ceno, da jo nadomestijo druge tehnologije, kot so programčki. Vsi programi CGI, ki jih napišete z uporabo teh informacij, bodo skoraj zagotovo lahko delovali več let na večini spletnih strežnikov.
Ko je program CGI priklican prek obrazca, najpogostejšega vmesnika, brskalnik pošlje strežniku dolg niz, ki se začne s potjo do programa CGI in njegovim imenom. Temu sledijo različni drugi podatki, imenovani informacije o poti, ki se posredujejo programu CGI prek spremenljivke okolja PATH_INFO (slika 9-1). Informacijam o poti sledi znak »?«, ki mu sledijo podatki obrazca, ki se pošljejo strežniku z metodo HTTP GET. Ti podatki so na voljo programu CGI prek spremenljivke okolja QUERY_STRING. Vsi podatki, ki jih stran pošlje z metodo HTTP POST, ki je najpogosteje uporabljena metoda, bodo posredovani programu CGI prek standardne vhodne naprave. Tipičen niz, ki ga lahko strežnik prejme od brskalnika, je prikazan na sliki. 9-1. Ime programa formread v katalogu cgi-bin kliče strežnik z dodatnimi informacijami o poti dodatne/informacije in izbira=podatki o zahtevi za pomoč - verjetno kot del izvirnega URL-ja. Končno se sami podatki obrazca (besedilo "programiranje CGI" v polju "ključne besede") pošljejo prek metode HTTP POST.
Spremenljivke okolja
Ko strežnik zažene program CGI, mu najprej posreduje nekaj podatkov za izvajanje v obliki spremenljivk okolja. Specifikacija uradno opredeljuje sedemnajst spremenljivk, vendar se jih veliko več uporablja neformalno prek spodaj opisanega mehanizma, imenovanega HTTP_/nec/zams/n. CGI program
ima dostop do teh spremenljivk na enak način kot katera koli spremenljivka okolja lupine, ko se zažene iz ukazne vrstice. V lupinskem skriptu je na primer do spremenljivke okolja F00 mogoče dostopati kot $F00; v Perlu je ta klic videti kot $ENV("F00"); v C - getenv("F00"); itd. Tabela 9-1 navaja spremenljivke, ki jih vedno nastavi strežnik - tudi če so ničelne. Poleg teh spremenljivk so podatki, ki jih odjemalec vrne v glavi zahteve, dodeljeni spremenljivkam v obliki HTTP_F00, kjer je F00 ime glave. Na primer, večina spletnih brskalnikov vključuje informacije o različici v glavi, imenovani USEfl_AGENT. Vaš CGI-npor-ramma lahko pridobi te podatke iz spremenljivke HTTP_USER_AGENT.
Tabela 9-1.Spremenljivke okolja CGI
Spremenljivka okolja |
Opis |
||
CONTENT_LENGTH |
Dolžina podatkov, prenesenih z metodama POST ali PUT, v bajtih. |
||
CONTENT_TYPE |
Vrsta MIME podatkov, priloženih z metodama POST ali PUT. |
||
GATEWAY_INTERFACE |
Številka različice specifikacije CGI, ki jo podpira strežnik. |
||
PATH_INFO |
Dodatne informacije o poti, ki jih pošlje stranka. Na primer za zahtevo http://www.myserver.eom/test.cgi/this/is/a/ pot?polje=zeleno vrednost spremenljivke PATH_ INFO bo /to/je/pot. |
||
PATH_TRANSLATED |
Enako kot PATH_INFO, vendar strežnik ustvari vse |
||
|
Možen prevod, na primer razširitve imena, kot je "-račun". » |
||
QUERY_STRING |
Vsi podatki, ki sledijo "?" v URL. To so tudi podatki, posredovani, ko je REQ-UEST_METHOD obrazca GET. |
||
REMOTE_ADDR |
IP naslov odjemalca, ki je poslal zahtevo. |
||
REMOTE_HOST |
Ime gostitelja odjemalskega računalnika, če je na voljo. |
||
REMOTE_IDENT |
Če spletni strežnik in odjemalec podpirata identifikacijo vrste identd potem je to uporabniško ime računa, ki postavlja zahtevo. |
||
REQUEST_METHOD |
Metoda, ki jo stranka uporablja za izdelavo zahteve. Za programe CGI, ki jih bomo ustvarili, bo to običajno POST ali GET. |
||
SERVER_NAME | Ime gostitelja - ali naslov IP, če ime ni na voljo - računalnika, ki izvaja spletni strežnik. | ||
SERVER_PORT | Številka vrat, ki jih uporablja spletni strežnik. | ||
SERVER_PROTOCOL |
Protokol, ki ga odjemalec uporablja za komunikacijo s strežnikom. V našem primeru je ta protokol skoraj vedno HTTP. | ||
SERVER_SOFTWARE | Informacije o različici spletnega strežnika, ki izvaja program CGI. | ||
SCRIPT_NAME |
Pot do skripta za zagon, kot ga določi odjemalec. Lahko se uporablja, ko se URL nanaša na samega sebe in tako, da se lahko skripti, navedeni na različnih lokacijah, izvajajo različno, odvisno od lokacije. |
||
Tukaj je primer skripta CGI Perl, ki natisne vse spremenljivke okolja, ki jih je nastavil strežnik, kot tudi vse podedovane spremenljivke, kot je PATH, ki jih je nastavila lupina, ki je zagnala strežnik.
#!/usr/bin/perl -w
tiskanje<< HTML;
Vrsta vsebine: besedilo/html\n\n
HTML
foreach (tipke %ENV) ( print "$_: $ENV($_)
\n";)
tiskanje<
HTML
Vse te spremenljivke lahko vaš program CGI uporablja in celo spreminja. Vendar te spremembe ne vplivajo na spletni strežnik, ki izvaja program.
Ukazna vrstica
CGI omogoča, da se argumenti posredujejo programu CGI kot parametri ukazne vrstice, kar se redko uporablja. Uporablja se redko, ker je njegovih praktičnih uporab malo, zato se o njem ne bomo podrobneje ukvarjali. Bistvo je, da če spremenljivka okolja QUERY_STRING ne vsebuje znaka "=", se bo program CGI izvedel s parametri ukazne vrstice, vzetimi iz QUERY_STRING. na primer http://www.myserver.com/cgi- bin/finger?root bo zagnal prstni koren www.myserver.com.
Obstajata dve glavni knjižnici, ki nudita vmesnik CGI za Perl. Prvi je cgi-lib.pl Pripomoček cgi-lib.pl zelo pogosta, ker je bila dolgo časa edina razpoložljiva velika knjižnica. Zasnovan je za delo v Perlu 4, deluje pa tudi v Perlu 5. Druga knjižnica, CGI.pm, novejši in v marsičem boljši cgi-lib.pl. CGI.pm napisan za Perl 5 in uporablja popolnoma objektno usmerjeno zasnovo za delo s podatki CGI. Modul CGI.pm razčleni standardno vhodno napravo in spremenljivko QUERY_STRING ter shrani podatke v objekt CGI. Vaš program mora samo ustvariti nov objekt CGI in uporabiti preproste metode, kot je paramQ, da pridobi podatke, ki jih potrebujete. Primer 9-2 služi kot kratek prikaz, kako CGI.pm interpretira podatke. Vsi primeri Perla v tem poglavju bodo uporabljali CGI.pm.
Primer 9-2.
Razčlenjevanje podatkov CGI v Perlu
#!/usr/bin/perl -w
uporabite CGI qw(:standard);
# Uporabljen je modul CGI.pm. qw(:standard) uvozi
# imenski prostor standardnih funkcij CGI, ki jih je treba pridobiti
# jasnejša koda. To je mogoče storiti, če je v scenariju
# uporabljen je samo en objekt CGI.
$mycgi = nov CGI; #Ustvarite objekt CGI, ki bo prehod do podatkov obrazca
@polja = $mycgi->param; # Pridobi imena vseh izpolnjenih polj obrazca
tiskanje glave, start_html("test CGI.pm"); ft Metodi "header" in "start_html",
# zagotovljeno
# CGI.pm, olajšajte pridobivanje HTML.
# "header" izpiše zahtevano glavo HTTP, a
#"start_html" izpiše glavo HTML z danim imenom,
#a je tudi oznaka
.natisni"<р>Podatki obrazca:
";
foreach (@fields) ( print $_, ":",- $mycgi->param($_), "
"; }
# Za vsako polje natisnite ime in vrednost, pridobljeno z uporabo
#
$mycgi->param("ime polja").
natisni konec_html; # Okrajšava za prikaz končnih oznak "".
Obdelava vhodnih podatkov v C
Ker sta osnovna API-ja za MySQL in mSQL napisana v jeziku C, ne bomo popolnoma opustili jezika C v korist Perla, vendar bomo navedli nekaj primerov jezika C, kjer je primerno. Obstajajo tri široko uporabljene knjižnice C za programiranje CGI: cgic Tom Boutell*; cgihtml Eugene Kim in libcgi iz EIT*. To verjamemo cgic je najbolj popoln in enostaven za uporabo. Kar pa mu manjka, je zmožnost seznama vseh spremenljivk obrazca, če jih ne poznate vnaprej. Pravzaprav ga je mogoče dodati s preprostim popravkom, vendar to presega obseg tega poglavja. Zato v primeru 9-3 uporabljamo knjižnico cgihtml, ponovite zgornji skript Perl v C.
Primer 9-3.Razčlenjevanje podatkov CGI v C
/*
cgihtmltest.c - Tipičen CGI program za prikaz ključev in njihovih vrednosti
iz podatkov prejetih iz obrazca */
#vključi
#include "cgi-lib.h" /* To vsebuje vse definicije funkcij CGI */
#include "html-lib.h" /* To vsebuje "vse definicije funkcij pomoči HTML */
void print_all(lllist 1)
/* Te funkcije izpišejo podatke, ki jih predloži obrazec, v isti obliki kot zgornji skript Perl. Cgihtml nudi tudi vgrajeno funkcijo
Print_entries(), ki naredi isto stvar z uporabo oblike seznama HTML. */ (
okno vozlišča*;
/* Vrsta "vozlišča" je definirana v knjižnici cgihtml in se nanaša na povezan seznam, ki shranjuje vse podatke obrazca. */
okno = I.glava; /* Nastavi kazalec na začetek podatkov obrazca */
medtem ko (okno != NULL) ( /* Skozi povezani seznam do zadnjega (prvega praznega) elementa */
printf(" %s:%s
\n",window->entry. name,replace_ltgt(window->entry.value));
/* Izpis podatkov. Replace__ltgt() je funkcija, ki razume kodiranje HTML besedila in zagotavlja, da je pravilno prikazano brskalniku odjemalca. */
okno = okno->naprej; /* Premakni se na naslednji element seznama. */
} }
int main() (
seznam vnosov; /* Kazalec na razčlenjene podatke*/
int stanje; /* Celo število, ki predstavlja status */
Html__header(); /* Pomožna funkcija HTML, ki izpiše glavo HTML*/
Html_begin("test cgihtml");
/* Pomožna funkcija HTML, ki natisne začetek strani HTML z navedenim naslovom. */
status = read_cgi_input(&vnosi); /* Vnese in razčleni podatke obrazca*/
Printf("<р>Podatki obrazca:
");
Natisni_vse(vnose); /* Pokliče zgoraj definirano funkcijo print_all(). */
html_end(); /* Pomožna funkcija HTML, ki natisne konec strani HTML. */
List_clear(&vnosi); /* Sprosti pomnilnik, ki ga zasedajo podatki obrazca. */
vrni 0; )
Standardna izhodna naprava
Podatke, ki jih program CGI pošlje standardni izhodni napravi, prebere spletni strežnik in jih pošlje odjemalcu. Če se ime skripta začne z nph-, potem se podatki pošljejo neposredno odjemalcu brez posredovanja spletnega strežnika. V tem primeru mora program CGI ustvariti pravilno glavo HTTP, ki jo bo odjemalec razumel. V nasprotnem primeru naj spletni strežnik namesto vas ustvari glavo HTTP.
Tudi če ne uporabljate nph-scenarij, mora strežnik dobiti eno direktivo, ki mu bo povedala informacije o vašem izhodu. To je običajno glava HTTP Content-Type, lahko pa je tudi glava Location. Glavi mora slediti prazna vrstica, to je podajanje vrstice ali kombinacija CR/LF.
Glava Content-Type pove strežniku, kakšno vrsto podatkov proizvaja vaš program CGI. Če je to stran HTML, mora biti niz Content-Type: besedilo/html. Glava lokacije pove strežniku drug URL - ali drugo pot na istem strežniku - kam naj usmeri odjemalca. Glava bi morala izgledati takole: Lokacija: http:// www. moj strežnik. com/drugo/mesto/.
Po glavah HTTP in prazni vrstici lahko pošljete dejanske podatke, ki jih ustvari vaš program – stran HTML, sliko, besedilo ali karkoli drugega. Med programi CGI, ki so priloženi strežniku Apache, so nph-test-cgi in test-cgi ki lepo prikazujejo razliko med naslovi v slogu nph in ne-nph.
V tem razdelku bomo uporabljali knjižnice CGI.pm in cgic, ki imajo funkcije za izpis glav HTTP in HTML. Tako se boste lahko osredotočili na prikaz dejanske vsebine. Te pomožne funkcije so uporabljene v primerih, navedenih prej v tem poglavju.
Pomembne lastnosti skriptov CGI
V bistvu že veste, kako deluje CGI. Odjemalec pošlje podatke, običajno prek obrazca, na spletni strežnik. Strežnik izvaja program CGI in mu posreduje podatke. Program CGI obdela svojo obdelavo in vrne svoje rezultate strežniku, ki jih posreduje odjemalcu. Od razumevanja, kako okvirji CGI npor delujejo, moramo preiti na razumevanje, zakaj se tako pogosto uporabljajo.
Čeprav iz tega poglavja že veste dovolj, da lahko sestavite preprost delujoč program CGI, morate obravnavati še nekaj pomembnih vprašanj, preden lahko ustvarite dejansko delujoče programe za MySQL ali mSQL. Najprej se morate naučiti delati z več obrazci. Nato se morate naučiti nekaterih varnostnih ukrepov, ki bodo napadalcem preprečili nezakonit dostop do vaših strežniških datotek ali njihovo uničenje.
Shranjevanje stanja
Spominjanje stanja je bistveno sredstvo za zagotavljanje dobre storitve vašim uporabnikom in ne samo za boj proti zadrtim kriminalcem, kot se morda zdi. Težavo povzroča dejstvo, da je HTTP tako imenovani "memoryless" protokol. To pomeni, da odjemalec pošlje podatke strežniku, strežnik vrne podatke odjemalcu, potem pa gre vsak svojo pot. Strežnik ne shranjuje podatkov o stranki, ki bi lahko bili potrebni pri nadaljnjih operacijah. Prav tako ni nobenega zagotovila, da bo naročnik obdržal kakršne koli podatke o transakciji, ki bi jih lahko kasneje uporabil. To takoj in znatno omeji uporabo svetovnega spleta.
Skriptiranje CGI s tem protokolom je podobno, kot da si ne bi mogli zapomniti pogovora. Kadarkoli se z nekom pogovarjate, ne glede na to, kako pogosto ste se z njim pogovarjali prej, se morate predstaviti in poiskati skupno temo za pogovor. Ni treba razlagati, da to ne prispeva k produktivnosti. Slika 9-2 prikazuje, da kadar koli zahteva doseže program CGI, je to povsem nov primerek programa, brez povezave s prejšnjim.
Na strani odjemalca se je s prihodom Netscape Navigatorja pojavila na videz na hitro narejena rešitev, imenovana piškotki. Sestoji iz ustvarjanja nove glave HTTP, ki se lahko pošilja naprej in nazaj med odjemalcem in strežnikom, podobno kot glava Content-Type in Location. Brskalnik odjemalca mora po prejemu glave piškotka shraniti podatke v piškotek ter ime domene, v kateri piškotek deluje. Potem, ko se obišče URL znotraj podane domene, mora biti glava piškotka vrnjena strežniku za uporabo s programi CGI na tem strežniku.
Metoda piškotkov se uporablja predvsem za shranjevanje ID-ja uporabnika. Podatke o obiskovalcu lahko shranite v datoteko na strežniškem računalniku. Enolični ID tega uporabnika se lahko pošlje kot piškotek uporabnikovemu brskalniku, nato pa vsakič, ko uporabnik obišče spletno mesto, brskalnik samodejno pošlje ta ID strežniku. Strežnik ID posreduje programu CGI, ki odpre ustrezno datoteko in pridobi dostop do vseh podatkov o uporabniku. Vse to se zgodi neopazno za uporabnika.
Kljub uporabnosti te metode je večina velikih spletnih mest ne uporablja kot edino sredstvo za pomnjenje stanja. Razlogov za to je več. Prvič, vsi brskalniki ne podpirajo piškotkov. Do nedavnega glavni brskalnik za osebe z omejenim vidom (da o osebah z nezadostno hitrostjo internetne povezave niti ne govorimo) – Lynx – ni podpiral piškotkov. Še vedno jih "uradno" ne podpira, čeprav nekatere njegove široko dostopne "stranske veje" podpirajo. Drugič, kar je še pomembneje, piškotki uporabnika vežejo na določen stroj. Ena od velikih prednosti spleta je, da je dostopen od kjerkoli na svetu. Ne glede na to, kje je bila vaša spletna stran ustvarjena ali shranjena, jo je mogoče prikazati s katerega koli računalnika, povezanega z internetom. Vendar, če poskušate dostopati do spletnega mesta, ki podpira piškotke, z računalnika nekoga drugega, bodo vsi vaši osebni podatki, ki jih hrani piškotek, izgubljeni.
Številna spletna mesta še vedno uporabljajo piškotke za prilagajanje uporabniških strani, vendar jih večina dopolnjuje s tradicionalnim vmesnikom v slogu prijave/gesla. Če se na stran dostopa iz brskalnika, ki ne podpira piškotkov, se na strani nahaja obrazec, v katerega uporabnik vnese uporabniško ime in geslo, ki sta mu bila dodeljena ob prvem obisku strani. Običajno je ta obrazec majhen in nezahteven, da ne prestraši večine uporabnikov, ki jih ne zanima nobena personalizacija, ampak preprosto želijo iti naprej. Ko uporabnik vnese prijavno ime in geslo v obrazec, CGI najde datoteko s podatki o tem uporabniku, kot da bi bilo ime poslano s piškotkom. S to metodo se lahko uporabnik registrira na prilagojenem spletnem mestu kjerkoli na svetu.
Poleg nalog upoštevanja uporabniških preferenc in dolgoročnega shranjevanja informacij o njem lahko damo bolj subtilen primer pomnjenja stanja, ki ga ponujajo priljubljeni iskalniki. Ko iščete s storitvami, kot sta AltaVista ali Yahoo, boste običajno dobili veliko več rezultatov, kot jih je mogoče prikazati v lahko berljivi obliki. To težavo rešimo tako, da prikažemo majhno število rezultatov - običajno 10 ali 20 - in omogočimo navigacijo za ogled naslednje skupine rezultatov. Medtem ko se to vedenje povprečnemu spletnemu brskalcu zdi normalno in pričakovano, je dejanska implementacija netrivialna in zahteva shranjevanje stanja.
Ko uporabnik prvič izvede poizvedbo v iskalniku, ta zbere vse rezultate, morda omejene na neko vnaprej določeno mejo. Trik je v tem, da ustvarite te rezultate v majhnih količinah naenkrat, pri tem pa se spomnite, kakšen uporabnik je zahteval te rezultate in kakšen delež pričakuje naslednji. Če pustimo ob strani kompleksnost samega iskalnika, se srečujemo s problemom doslednega zagotavljanja uporabniku nekaterih informacij na eni strani. Razmislite o primeru 9-4, ki prikazuje skript CGI, ki natisne deset vrstic datoteke in ji daje možnost ogleda naslednjih ali prejšnjih deset vrstic.
Primer 9-4. Shranjevanje stanja v skriptu CGI
#!/usr/bin/perl -w
uporabite CGI;
Open(F,"/usr/dict/words") ali die("Ne more odpreti! $!");
#To je datoteka, ki bo prikazana, lahko je karkoli.
$output = nov CGI;
sub print_range ( # To je glavna funkcija programa, moj $start = shift;
# Začetna vrstica datoteke, my $count = 0;
# Kazalec, moja $line = "";
# Trenutna vrstica datoteke, natisnite $output->header,
$output->start_html("Moj slovar");
#
Izdela HTML z naslovom "Moj slovar", natisni "
medtem ko (($count< $start) and ($line =
# Preskoči vse vrstice pred prvo, medtem ko (($count< $start+10) and
($line ?
#
Natisnite naslednjih 10 vrstic.
moj $newnext = $start+10; moj $newprev = $start-10;
# Nastavite začetne nize za »Naslednji« in »Prejšnji« URL-je,
natisni"
";
unless ($start == 0) ( # Vključi "Prejšnji" URL, razen če
# ni več na začetku.
natisni qq%Prejšnji%; )
unless (eof) ( # Vključite "Naslednji" URL, razen če #
ne na koncu datoteke.
natisni qq%Naprej%;
}
natisni "HTML;HTML
izhod(0); )
# Če ni podatkov, začni znova,
if (ne $output->param) (
&print_obseg(0); )
# V nasprotnem primeru začnite od vrstice, navedene v podatkih.
&print_range($output->param("start"));
V tem primeru je stanje shranjeno z uporabo najenostavnejše metode. S shranjevanjem podatkov ni težav, saj jih hranimo v datoteki na strežniku. Vedeti moramo le, kje začeti izhod, zato skript preprosto vključi v URL začetno točko za naslednjo ali prejšnjo skupino vrstic – vse, kar je potrebno za ustvarjanje naslednje strani.
Vendar, če potrebujete več kot le možnost listanja po datoteki, je lahko zanašanje na URL okorno. To težavo lahko ublažite z uporabo obrazca HTML in vključitvijo podatkov o stanju v oznake tip SKRITO. Ta metoda je bila uspešno uporabljena na številnih spletnih mestih, kar omogoča vzpostavitev povezav med povezanimi programi CGI ali razširitev uporabe enega samega programa CGI, kot v prejšnjem primeru. Namesto da kažejo na določen objekt, kot je domača stran, lahko podatki URL kažejo na samodejno ustvarjen ID uporabnika.
Tako delujejo AltaVista in drugi iskalniki. Prvo iskanje ustvari ID uporabnika, ki je skrit v zakulisju naslednjih URL-jev. S tem ID-jem je povezana ena ali več datotek, ki vsebujejo rezultate poizvedbe. URL vključuje še dve vrednosti: vaš trenutni položaj v datoteki z rezultati in smer, v katero želite nadaljevati v njej. Te tri vrednosti so vse, kar je potrebno za delovanje močnih navigacijskih sistemov velikih iskalnikov.
Vendar pa še vedno nekaj manjka. Datoteka, uporabljena v našem primeru /usr/diet/words zelo velik. Kaj pa, če na polovici branja obupamo, a se želimo k njej vrniti pozneje? Če se ne spomnite URL-ja naslednje strani, se ne morete vrniti nazaj, niti AltaVista tega ne bo dovolila. Če znova zaženete računalnik ali uporabite drug računalnik, se ne boste mogli vrniti na prejšnje rezultate iskanja brez ponovnega vnosa iskanja. Vendar pa je ta dolgoročna shramba stanja v središču personalizacije spletnega mesta, o kateri smo govorili zgoraj, in vredno je pogledati, kako jo je mogoče uporabiti. Primer 9-5 je spremenjena različica primera 9-4.
Primer 9-5.
Stabilno pomnjenje stanja
#!/usr/bin/perl -w
uporabite CGI;
umask 0;
Open(F,"/usr/dict/words") ali die("Ne more odpreti! $!");
Chdir("uporabniki") ali die("Ne morem iti v imenik $!");
#
To je imenik, kjer bodo shranjeni vsi podatki
# o uporabniku.
Izhod = nov CGI;
if (not$output->param) (
natisni $output->header,
$output->start_html("Moj slovar");
natisni "HTML;