Drumeții Transport Sobe economice

Tutorial de programare CGI. Șterge comerțul electronic Încheiați placa c cgi

Common Gateway Interface (CGI, Russian Common Gateway Interface) este o metodă standard pentru gestionarea dinamică a conținutului paginilor web folosind programe speciale care rulează pe partea serverului web. Aceste programe se numesc handlere sau gateway-uri CGI, dar mai des - scripturi CGI, deoarece... acestea sunt de obicei scrise în limbaje de scripting, în principal Perl.

Deoarece hipertextul este de natură statică, o pagină web nu poate interacționa direct cu utilizatorul. Înainte de apariția JavaScript, nu exista altă modalitate de a răspunde la acțiunile utilizatorului, în afară de transmiterea datelor pe care le introduceau către serverul web pentru procesare ulterioară. În cazul CGI, această prelucrare se realizează folosind programe și scripturi externe, care sunt accesate printr-o interfață standardizată (vezi RFC 3875: CGI Versiunea 1.1) - un gateway comun. Un model simplificat care ilustrează funcționarea CGI este prezentat în Fig. 1.

Cum funcționează CGI?

Un algoritm generalizat pentru lucrul prin CGI poate fi prezentat după cum urmează:

  1. Clientul solicită aplicația CGI prin URI-ul său.
  2. Serverul web acceptă cererea și instalează variabile de mediu, prin care datele și informațiile de serviciu sunt transmise aplicației.
  3. Serverul web redirecționează cererile prin intrarea standard (stdin) către intrarea programului apelat.
  4. Aplicația CGI efectuează toate operațiunile necesare și generează rezultatele ca HTML.
  5. Hipertextul generat este returnat la serverul web prin fluxul de ieșire standard (stdout). Mesajele de eroare sunt trimise prin stderr.
  6. Serverul web transmite rezultatele cererii către client.

Aplicații ale CGI

Cel mai sarcină comună, pentru soluția pentru care se folosește CGI - crearea de pagini interactive, al căror conținut depinde de acțiunile utilizatorului. Exemple tipice de astfel de pagini web sunt un formular de înregistrare a site-ului web sau un formular de comentarii. O altă zonă de aplicare a CGI, care rămâne în culisele interacțiunii cu utilizatorul, este legată de colectarea și prelucrarea informațiilor despre client: setarea și citirea „cookie-urilor”; obținerea de date despre browser și sistemul de operare; contorizarea numărului de vizite la o pagină web; monitorizarea traficului web etc.

Aceste capabilități sunt oferite de faptul că scriptul CGI poate fi conectat la o bază de date sau poate accesa sistemul de fișiere al serverului. Astfel, un script CGI poate salva informații în tabelele sau fișierele bazei de date și le poate prelua de acolo la cerere, ceea ce nu se poate face folosind HTML.

Vă rugăm să rețineți: CGI nu este un limbaj de programare! Este un protocol simplu care permite unui server web să treacă date prin stdin și să le citească din stdout. Prin urmare, orice program de server capabil să funcționeze cu fluxuri standard de intrare/ieșire poate fi folosit ca handler CGI.

Salut Lume!

Un exemplu de script CGI simplu în Perl este prezentat în Lista 1. Dacă salvați acest cod într-un fișier numit hello (numele poate fi orice, extensia poate fi aceeași), plasați fișierul în directorul serverului cgi-bin (mai precis, în acel director web server , care este destinat aplicațiilor CGI și este specificat în setările serverului web) și setați drepturi de execuție pentru acest fișier (chmod uo+x hello), atunci va deveni disponibil la o adresă precum http ://servername/cgi-bin/hello.

Lista 1. Exemplu de script CGI (Perl)

#!/usr/bin/perl print „Tip de conținut: text/html\n\n”; imprimare< CGI salută

Salut Lume!



ieșire HTML;

În acest cod, linia #!/usr/bin/perl specifică calea completă către interpretul Perl. Linia Content-type: text/html\n\n este un antet http care specifică tipul de conținut (mime-type). Caracterul de întrerupere de linie dublă (\n\n) este necesar; acesta separă anteturile de corpul mesajului.

variabile de mediu

Toate aplicațiile CGI au acces la variabilele de mediu stabilite de serverul web. Aceste variabile joacă un rol important atunci când scrieți programe CGI. Tabelul listează unele dintre variabilele disponibile pentru CGI.

Variabilă de mediuDescriere
TIPUL DE CONȚINUT Tipul de date trimise către server. Folosit atunci când clientul trimite date, cum ar fi descărcarea unui fișier.
CONTENT_LENGTHSolicitați dimensiunea conținutului. Această variabilă este definită pentru solicitările POST.
HTTP_COOKIEReturnează un set de cookie-uri ca perechi cheie-valoare.
HTTP_USER_AGENTInformații despre agentul utilizatorului (browser).
PATH_INFOCalea directorului CGI
ȘIR DE INTEROGAREȘir de interogare (codificat URL) transmis prin metoda GET.
REMOTE_ADDRAdresa IP a clientului care face cererea.
GAZDA LA DISTANTANumele complet (FQDN) al clientului. (Daca este disponibil)
REQUEST_METHODMetoda prin care se execută cererea. Cel mai adesea GET sau POST.
SCRIPT_FILENAMECalea completă către scriptul solicitat (în sistemul de fișiere server).
SCRIPT_NAMENume script
NUMELE SERVERULUINumele serverului
SERVER_ADDRAdresa IP a serverului
SERVER_SOFTWAREInformații despre software-ul serverului

Lista 2 arată codul unui mic program Perl care tipărește o listă de variabile de mediu. Rezultatul muncii sale este prezentat în Fig. 2.

Lista 2. Variabile de mediu

#!/usr/bin/perl print „Tip de conținut: text/html\n\n”; imprimare " \n \n

Mediu inconjurator

\n"; foreach (chei de sortare %ENV) ( tipăriți " $_: $ENV($_)
\n"; ) imprimați "

\n"; Ieșire;

Transfer de date: metoda GET

Metoda GET este folosită pentru a transmite date codificate urlen printr-un șir de interogare. Adresa resursei solicitate (script CGI) și datele transferate către aceasta sunt separate prin semnul „?”. Un exemplu de astfel de adresă:

http://example.com/cgi-bin/script.cgi?key1=value1&key2=value2

Metoda GET este utilizată în mod implicit pentru datele introduse în bara de adrese a browserului. Același șir poate fi generat la trimiterea datelor dintr-un formular web (tag

) dacă nu este specificată metoda de depunere a formularului. Toate informațiile trimise prin metoda GET sunt trimise în text clar, așa că nu ar trebui să le folosiți niciodată pentru a trimite parole sau alte informații similare către un server. Metoda GET are o limită de dimensiune: șirul de interogare nu trebuie să aibă mai mult de 1024 de caractere.

Informațiile trimise prin metoda GET sunt transmise în antetul QUERY_STRING ca șir format din perechi de formular cheie=valoare, scriptul CGI îl poate obține prin variabila de mediu cu același nume.

Lista 3. Trimiterea datelor dintr-un formular web folosind metoda GET

Un script CGI simplu: Trimiterea datelor folosind metoda GET Numele tău: nume = "utilizator">
De unde ești?: nume="de la">



După ce introduceți datele în formularul din Lista 3 și faceți clic pe butonul „Trimiteți”, va fi generat un șir de interogare ca acesta:

http://example.com/cgi-bin/ spune buna?utilizator=un text&din=alt text

unde: sayhello - numele scriptului CGI; user și from sunt numele parametrilor; sometext și anothertext sunt valorile introduse de utilizator ale parametrilor corespunzători.

Lista 4 este un exemplu de script care poate procesa datele formularului din Lista 3.

Listarea 4. Trimiterea datelor dintr-un formular web folosind metoda GET

#!/usr/bin/perl local ($buffer, @pairs, $pair, $name, $value, %FORM); # Analizați mediul $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; dacă ($ENV(" REQUEST_METHOD")eq" OBȚINE") ( $buffer = $ENV(" ȘIR DE INTEROGARE"); ) # Împărțiți șirul de interogare în perechi cheie/valoare @pairs = split(/&/, $buffer); foreach $pair (@pairs) (($nume, $valoare) = split(/=/, $ pair); $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/ex header print "Content-type: text/html\n\n" # Trimite hypertext print;< CGI salută

Bună ziua, $FORM(utilizator) de la $FORM(de la)!



ieșire HTML;

Transfer de date: metoda POST

În general, metoda POST este mai potrivită pentru a transmite informații către un script CGI. Blocul de date transmise se formează în același mod ca și pentru metoda GET, dar transmiterea efectivă se realizează în corpul cererii. Datele intră în aplicația CGI prin intrarea standard (stdin).

Pentru a trimite date folosind această metodă, acestea trebuie specificate în mod explicit în descrierea formularului (action="POST").

Pentru a procesa intrarea, scriptul CGI trebuie să citească stdin, iar pentru a face acest lucru corect, trebuie să cunoască dimensiunea mesajului din variabila CONTENT_LENGTH. Pentru a ilustra acest lucru, să modificăm blocul de analiză a mediului din Lista 4, înlocuindu-l cu următorul cod:

... # Analizați mediul $ENV("REQUEST_METHOD") =~ tr/a-z/A-Z/; dacă ($ENV(" REQUEST_METHOD")eq" POST")( citit( STDIN, $buffer, $ENV(" CONTENT_LENGTH"}); } ...

Prelucrarea ulterioară a parametrilor și a valorilor lor stocate în variabila $buffer se realizează în același mod ca atunci când se folosește metoda GET.

Avantajele CGI

Multe capabilități CGI sunt acum duplicate de tehnologii precum DHTML, ActiveX sau applet-uri Java. Principalele avantaje ale utilizării scripturilor de server sunt că poți fi sigur că toți clienții (cu rare excepții, asociate de obicei cu blocarea accesului la anumite resurse la nivel de firewall) vor putea lucra cu aplicația server. Programele client pot fi pur și simplu dezactivate în browser sau să nu fie acceptate deloc.

Dezavantajele CGI

Cel mai mare dezavantaj al acestei tehnologii este cerințele crescute de performanță ale serverului web. Faptul este că fiecare apel către o aplicație CGI determină apariția unui nou proces, cu toată suprasarcina aferentă. Dacă aplicația este scrisă cu erori, atunci este posibilă o situație când, de exemplu, intră într-o buclă. Browserul va opri conexiunea la expirarea timpului de expirare, dar pe partea serverului, procesul va continua până când administratorul forțează oprirea acesteia. În acest sens, scripturile client au un avantaj semnificativ, deoarece sunt executate local.

Un alt dezavantaj al CGI este că serverul web este mai puțin sigur decât alte soluții. Setarea incorectă a drepturilor de acces la resursele serverului dintr-o aplicație CGI poate pune în pericol nu numai performanța serverului web, ci și securitatea informațiilor. Cu toate acestea, orice tehnologie de rețea poate fi considerată potențial nesigură prin definiție.

Adresa permanentă a acestei pagini:

Proprietarii de magazine online sunt familiarizați cu conceptul de „comerț electronic” cunosc deja răspunsul la întrebarea „comerțul electronic - ce este?” Dar dacă ajungi la fund, apar multe nuanțe și acest termen capătă un sens mai larg.

Comerțul electronic: ce este?

Conceptul general este următorul: comerțul electronic este înțeles ca o anumită abordare a activității de afaceri, care presupune includerea unui număr de operațiuni care utilizează transferul de date digitale în furnizarea de bunuri sau prestarea de servicii/lucrări, inclusiv utilizarea Internet.

Astfel, este orice tranzacție comercială care se realizează folosind un mijloc electronic de comunicare.

Schema de lucru este organizată după cum urmează:

  • oricine poate fi blogger sau orice alt proprietar al propriei pagini de internet) se înregistrează în acest sistem;
  • primește propriul link;
  • plasează un cod special pe pagina sa web - apare o reclamă pentru partenerul oficial selectat al rețelei de parteneri de comerț electronic;
  • monitorizează conversia site-ului web;
  • câștigă un anumit procent pentru fiecare achiziție de către un vizitator al site-ului dvs. care urmează un link de afiliat.

WP e-Commerce

Un număr mare de oameni sunt acum pasionați de e-commerce, în primul rând din dorința de a-și crea propriul site web, un magazin online unic în care să-și vândă propriile produse. Pentru a satisface această cerere în creștere, dezvoltatorii s-au concentrat pe crearea de șabloane de comerț electronic. Să ne uităm la ce urmează.

Un astfel de exemplu de șablon este comerțul electronic WordPress. Este un plugin pentru coșul de cumpărături pentru WordPress (unul dintre cele mai cunoscute sisteme de gestionare a resurselor web), destinat în primul rând creării și organizării blogurilor). Este oferit complet gratuit și permite vizitatorilor site-ului să facă achiziții pe site.

Cu alte cuvinte, acest plugin vă permite să creați un magazin online (bazat pe WordPress). Acest plugin de comerț electronic are toate instrumentele, setările și opțiunile necesare pentru a se potrivi nevoilor moderne.

Andover, Massachusetts, 19 noiembrie 2003

The Commerce Group, Inc. (NYSE: CGI), cel mai mare scriitor de asigurări private auto pentru pasageri din Massachusetts și CGI Group Inc. (CGI) (TSX: GIB.A; NYSE: GIB;), un furnizor de top de tehnologia informației și servicii de procesare a afacerilor, a anunțat astăzi semnarea unui contract de externalizare a proceselor de afaceri (BPO) pe șase ani, în valoare de 35 milioane USD. CGI va oferi servicii complete de procesare a politicilor pentru liniile private de pasageri și de automobile comerciale din Massachusetts, precum și instrumentul de interfață al agenției CollaborativeEdge al CGI, asistență și întreținere pentru aplicații, suport de reglementare, consultanță de sisteme și servicii de gestionare a documentelor.

Gerald Fels, vicepreședinte executiv și CFO al Commerce Group, a declarat: „În calitate de furnizor principal de automobile private pentru pasageri din Massachusetts, scopul nostru este să oferim agenților și angajaților noștri servicii care să îi ajute să performanțeze la cel mai înalt nivel. De-a lungul anilor, am promovat o relație puternică cu CGI. Sistemul lor este robust și precis, iar echipa lor este foarte familiarizată cu sistemele noastre interne de procesare. Este important pentru noi.”

Serge LaPalme, președinte, servicii de afaceri de asigurări pentru CGI, a adăugat: „Suntem foarte încântați să continuăm relația noastră cu Commerce Group, una care se întinde pe peste 30 de ani. Commerce Group continuă să fie unul dintre partenerii noștri de afaceri valoroși și este strategic pentru Succesul nostru Ajutând clientul să se concentreze în continuare asupra activității lor de bază, profităm de noile tehnologii atunci când și unde are sens, echipa noastră cunoaște în detaliu industria asigurărilor și mediul de reglementare unic și, prin urmare, sunt rapid pentru a adapta soluțiile existente la acest sector în continuă evoluție.”

Despre The Commerce Group, Inc.

The Commerce Group, Inc., un holding de asigurări, are sediul în Webster, Massachusetts. Filialele de asigurări de bunuri și accidente ale Commerce Group includ The Commerce Insurance Company și Citation Insurance Company din Massachusetts, Commerce West Insurance Company din California și American Commerce Insurance Company din Ohio. Prin activitățile de asigurare combinate ale filialelor sale, Commerce Group este clasat pe locul 22. cel mai mare grup de asigurări auto personale din țară de către A.M. Cel mai bun, bazat pe informațiile premium scrise directe din 2002.

Despre CGI
Fondată în 1976, CGI este a cincea cea mai mare firmă independentă de servicii de tehnologie a informației din America de Nord, pe baza numărului de angajați. CGI și companiile sale afiliate angajează 20.000 de profesioniști. Veniturile anuale ale CGI sunt în prezent de 2,8 miliarde USD (1,9 miliarde USD), iar la 30 septembrie 2003, stocul de comenzi CGI era de 12,3 miliarde USD (9,1 miliarde USD). CGI oferă servicii IT end-to-end și procese de afaceri clienților din întreaga lume, din birouri din Canada, Statele Unite și Europa. Acțiunile CGI sunt listate la TSX (GIB.A) și NYSE (GIB) și sunt incluse în indicele compus TSX 100, precum și pe site-ul web S&P/TSX Canadian Information Technology și Canadian MidCap: .

Datorită World Wide Web, aproape oricine poate furniza informații online într-o formă care este ușor pentru ochi și poate fi diseminată pe scară largă. Fără îndoială că ai navigat pe Internet și ai văzut alte site-uri, iar acum probabil știi că acronimele înfricoșătoare precum „HTTP” și „HTML” sunt pur și simplu prescurtarea pentru „Web” și „modul în care informațiile sunt exprimate pe Internet”. Este posibil să aveți deja experiență în prezentarea de informații pe Internet.

Internetul s-a dovedit a fi un mediu ideal pentru distribuirea informațiilor, așa cum se poate observa din popularitatea sa enormă și dezvoltarea pe scară largă. Deși unii au pus sub semnul întrebării utilitatea Internetului și atribuie dezvoltarea și popularitatea lui pe scară largă în principal publicității intruzive, Internetul este, fără îndoială, un mediu important pentru prezentarea tuturor tipurilor de informații. Nu numai că există multe servicii disponibile pentru a furniza informații actualizate (știri, vreme, evenimente sportive în direct) și materiale de referință pe cale electronică, există și cantități semnificative de alte tipuri de date disponibile. IRS, care a distribuit toate formularele sale de declarații fiscale din 1995 și alte informații prin World Wide Web, a recunoscut recent că a primit e-mailuri de la fani pentru site-ul său web. Cine ar fi crezut că IRS-ul va primi vreodată e-mailuri ale fanilor? Acest lucru nu a fost pentru că site-ul său a fost bine conceput, ci pentru că se dovedise a fi un instrument cu adevărat util pentru mii, poate milioane, de oameni.

Ce face Web-ul unic și un serviciu de informare atât de atractiv? În primul rând, oferă o interfață hipermedia pentru date. Gândiți-vă la hard diskul computerului dvs. De obicei, datele sunt exprimate într-un mod liniar, similar unui sistem de fișiere. De exemplu, aveți un număr de foldere, iar în interiorul fiecărui folder există fie documente, fie alte foldere. Web-ul folosește o paradigmă diferită pentru a exprima informații numită hipermedia. O interfață hipertext constă dintr-un document și legături. Link-urile sunt cuvinte pe care se face clic pentru a vedea alte documente sau pentru a găsi alte tipuri de informații. Web-ul extinde conceptul de hipertext pentru a include alte tipuri de media, cum ar fi grafica, sunete, video (de unde și denumirea de „hipermedia”). Selectarea textului sau a graficelor pe un document vă permite să vedeți informații legate de elementul selectat în orice număr de formulare.

Aproape toată lumea poate beneficia de acest mod simplu și unic de prezentare și distribuire a informațiilor, de la cadrele universitare care doresc să folosească imediat datele cu colegii lor până la oamenii de afaceri care împărtășesc informații despre compania lor cu toată lumea. Cu toate acestea, deși oferirea de informații este extrem de importantă, în ultimii câțiva ani mulți au considerat că primirea informațiilor este un proces la fel de important.

Deși Web-ul oferă o interfață hipermedia unică pentru informații, există multe alte modalități eficiente de distribuire a datelor. De exemplu, servicii de rețea precum File Transfer Protocol (FTP) și grupul de știri Gopher existau cu mult înainte de World Wide Web. Poșta electronică a fost mijlocul principal de comunicare și schimb de informații pe Internet și pe majoritatea celorlalte rețele aproape încă de la începutul acestor rețele. De ce a devenit Internetul o modalitate atât de populară de distribuire a informațiilor? Aspectul multimedia al Internetului a contribuit în mod semnificativ la succesul său fără precedent, dar pentru ca Internetul să fie cel mai eficient, trebuie să fie interactiv.

Fără capacitatea de a primi intrarea utilizatorului și de a furniza informații, Web-ul ar fi un mediu complet static. Informațiile ar fi disponibile numai în formatul specificat de autor. Acest lucru ar submina una dintre capacitățile computerului în general: informațiile interactive. De exemplu, în loc să forțezi utilizatorul să vadă mai multe documente ca și cum ar fi căutat printr-o carte sau un dicționar, ar fi mai bine să îi permiti utilizatorului să identifice cuvinte cheie pe un subiect de interes. Utilizatorii pot personaliza prezentarea datelor mai degrabă decât să se bazeze pe o structură rigidă definită de furnizorul de conținut.

Termenul „server web” poate induce în eroare deoarece se poate referi atât la mașina fizică, cât și la software-ul pe care îl folosește pentru a comunica cu browserele de internet. Când un browser solicită o anumită adresă Web, se conectează mai întâi la aparat prin Internet, trimițând software-ului serverului Web o solicitare pentru document. Acest software rulează continuu, așteptând astfel de solicitări să sosească și răspunzând în consecință.

Deși serverele pot trimite și primi date, serverul în sine are funcționalități limitate. De exemplu, cel mai primitiv server poate trimite doar fișierul necesar către browser. De obicei, serverul nu știe ce să facă cu aceasta sau acea intrare suplimentară. Dacă ISP-ul nu spune serverului cum să gestioneze aceste informații suplimentare, cel mai probabil serverul va ignora intrarea.

Pentru ca serverul să poată efectua și alte operațiuni în afară de căutarea și trimiterea de fișiere către browserul de Internet, trebuie să știți cum să extindeți funcționalitatea serverului. De exemplu, un server Web nu poate căuta într-o bază de date pe baza unui cuvânt cheie introdus de un utilizator și nu poate returna mai multe documente potrivite decât dacă o astfel de capacitate a fost programată într-un fel în server.

Ce este CGI?

Common Gateway Interface (CGI) este o interfață către server care vă permite să extindeți funcționalitatea serverului. Folosind CGI, puteți interacționa interactiv cu utilizatorii care vă accesează site-ul. La nivel teoretic, CGI permite serverului să fie capabil să analizeze (interprete) intrarea din browser și să returneze informații în funcție de intrarea utilizatorului. La nivel practic, CGI este o interfață care permite unui programator să scrie programe care comunică ușor cu un server.

De obicei, pentru a extinde capacitățile serverului, va trebui să modificați singur serverul. Această soluție este nedorită deoarece necesită înțelegerea stratului inferior al programării rețelei Internet Protocol. Acest lucru ar necesita, de asemenea, editarea și recompilarea codului sursă al serverului sau scrierea unui server personalizat pentru fiecare sarcină. Să presupunem că doriți să extindeți capacitățile serverului, astfel încât să acționeze ca un gateway Web-to-e-mail, luând informațiile introduse de utilizator din browser și trimițându-le prin e-mail unui alt utilizator. Serverul ar trebui să insereze cod pentru a analiza intrarea din browser, să-l redirecționeze prin e-mail către celălalt utilizator și să redirecționeze răspunsul înapoi către browser prin conexiunea de rețea.

În primul rând, o astfel de sarcină necesită acces la codul serverului, ceea ce nu este întotdeauna posibil.

În al doilea rând, este dificil și necesită cunoștințe tehnice extinse.

În al treilea rând, acest lucru se aplică doar unui anumit server. Dacă trebuie să vă mutați serverul pe o altă platformă, va trebui să rulați sau cel puțin să petreceți mult timp cu portarea codului pe platforma respectivă.

De ce CGI?

CGI oferă o soluție portabilă și simplă la aceste probleme. Protocolul CGI definește o modalitate standard prin care programele pot comunica cu un server Web. Fără cunoștințe speciale, puteți scrie un program în orice limbaj de mașină care interfață și comunică cu serverul Web. Acest program va funcționa cu toate serverele Web care înțeleg protocolul CGI.

Comunicarea CGI se realizează folosind intrarea și ieșirea standard, ceea ce înseamnă că dacă știi să tipăriți și să citiți datele folosind limbajul de programare, puteți scrie o aplicație de server Web. În afară de analizarea intrărilor și ieșirii, programarea aplicațiilor CGI este aproape echivalentă cu programarea oricărei alte aplicații. De exemplu, pentru a programa programul „Hello, World!”, utilizați funcțiile de imprimare ale limbajului dvs. și formatul definit pentru programele CGI pentru a imprima mesajul corespunzător.

Selectarea unui limbaj de programare

Deoarece CGI este o interfață universală, nu sunteți limitat la niciun limbaj de mașină specific. O întrebare importantă care se pune adesea este: ce limbaje de programare pot fi folosite pentru programarea CGI? Puteți folosi orice limbă care vă permite să faceți următoarele:

  • Imprimați la ieșire standard
  • Citiți din intrarea standard
  • Citiți din moduri variabile

Aproape toate limbajele de programare și multe limbaje de scripting fac aceste trei lucruri și puteți folosi oricare dintre ele.

Limbile se încadrează în una dintre următoarele două clase: traduse și interpretate. Un limbaj tradus precum C sau C++ este de obicei mai mic și mai rapid, în timp ce limbile interpretate precum Perl sau Rexx necesită uneori încărcarea unui interpret mare la pornire. În plus, puteți distribui coduri binare (cod care se traduce în limbajul mașinii) fără cod sursă dacă limba dvs. este traducabilă. Distribuirea de scripturi interpretabile înseamnă de obicei distribuirea codului sursă.

Înainte de a alege o limbă, trebuie mai întâi să vă luați în considerare prioritățile. Trebuie să cântăriți beneficiile vitezei și eficienței unui limbaj de programare față de ușurința de programare a altuia. Dacă doriți să învățați o altă limbă, în loc să o folosiți pe cea pe care o cunoașteți deja, cântăriți cu atenție avantajele și dezavantajele ambelor limbi.

Cele două limbaje cele mai frecvent utilizate pentru programarea CGI sunt C și Perl (ambele sunt tratate în această carte). Ambele au avantaje și dezavantaje clare. Perl este un limbaj de nivel foarte înalt și, în același timp, un limbaj puternic, potrivit în special pentru analizare text. Deși ușurința sa de utilizare, flexibilitatea și puterea îl fac un limbaj atractiv pentru programarea CGI, dimensiunea relativ mare și funcționarea mai lentă îl fac uneori nepotrivit pentru unele aplicații. Programele C sunt mai mici, mai eficiente și oferă control al sistemului de nivel inferior, dar sunt mai complexe de programat, nu au rutine ușoare de procesare a textului încorporate și sunt mai dificil de depanat.

Care limbaj este cel mai potrivit pentru programarea CGI? Cel pe care îl consideri mai convenabil din punct de vedere al programării. Ambele sunt la fel de eficiente pentru programarea aplicațiilor CGI și, cu bibliotecile adecvate, ambele au capabilități similare. Cu toate acestea, dacă aveți un server greu accesibil, puteți utiliza programe C mai mici, traduse. Dacă aveți nevoie să scrieți rapid o aplicație care necesită multă muncă de procesare a textului, puteți utiliza Perl.

Atenționări

Există câteva alternative importante la aplicațiile CGI. Multe servere includ acum programare API, ceea ce facilitează programarea extensiilor directe de server, spre deosebire de aplicațiile CGI independente. Serverele API sunt în general mai eficiente decât programele CGI. Alte servere includ funcționalități încorporate care pot gestiona elemente speciale non-CGI, cum ar fi legarea bazelor de date. În cele din urmă, unele aplicații pot fi gestionate de unele tehnologii noi la nivelul clientului (mai degrabă decât partea serverului), precum Java. Cu schimbări atât de rapide în tehnologie, CGI va deveni rapid învechit?

Cu greu. CGI are mai multe avantaje față de tehnologiile mai noi.

  • Este versatil și portabil. Puteți scrie o aplicație CGI folosind aproape orice limbaj de programare pe orice platformă. Unele dintre alternative, cum ar fi API-ul serverului, vă limitează la anumite limbi și sunt mult mai dificil de învățat.
  • Este puțin probabil ca tehnologiile client-side, cum ar fi Java, să înlocuiască CGI, deoarece există unele aplicații pe care aplicațiile server-side sunt mult mai potrivite pentru a le rula.
  • Multe dintre limitările CGI sunt limitări ale HTML sau HTTP. Pe măsură ce standardele Internet în ansamblu evoluează, la fel evoluează și capabilitățile CGI.

rezumat

Common Gateway Interface este protocolul prin care programele interacționează cu serverele Web. Versatilitatea CGI oferă programatorilor posibilitatea de a scrie programe gateway în aproape orice limbă, deși există multe compromisuri asociate cu diferite limbi. Fără această abilitate, crearea de pagini Web interactive ar fi dificilă, în cel mai bun caz necesită modificări de server, iar interactivitatea ar fi indisponibilă pentru majoritatea utilizatorilor care nu sunt administratori de site.

Capitolul 2: Bazele

Acum câțiva ani, am creat o pagină pentru o facultate de la Harvard, unde oamenii puteau trimite comentarii despre ei. La acea vreme, internetul era tânăr și documentația era puțină. Eu, ca mulți alții, m-am bazat pe scurte documentații și sisteme de programare create de alții pentru a învăța programarea CGI. Deși această metodă de studiu a necesitat câteva căutări, multe experimente și a creat multe întrebări, a fost foarte eficientă. Acest capitol este rezultatul muncii mele timpurii cu CGI (cu câteva modificări, desigur).

Deși este nevoie de ceva timp pentru a înțelege și stăpâni pe deplin interfața gateway comună, protocolul în sine este destul de simplu. Oricine are niște abilități de programare de bază și este familiarizat cu Web-ul poate învăța rapid să programeze aplicații CGI destul de complexe, așa cum am învățat eu și alții să facă acum câțiva ani.

Scopul acestui capitol este de a prezenta elementele de bază ale CGI într-un mod cuprinzător, deși condensat. Fiecare concept discutat aici este prezentat în detaliu în capitolele următoare. Cu toate acestea, după finalizarea acestui capitol, puteți începe imediat programarea aplicațiilor CGI. Odată ce ați atins acest nivel, puteți învăța complexitățile CGI, fie citind restul acestei cărți, fie pur și simplu experimentând pe cont propriu.

Puteți reduce programarea CGI la două sarcini: primirea informațiilor din browser-ul Web și trimiterea informațiilor înapoi către browser. Acest lucru se face destul de intuitiv odată ce vă familiarizați cu utilizarea normală a aplicațiilor CGI. Adesea, utilizatorului i se cere să completeze un formular, de exemplu, să-și introducă numele. Odată ce utilizatorul completează formularul și apasă Enter, aceste informații sunt trimise programului CGI. Programul CGI trebuie apoi să transforme aceste informații în ceva pe care îl înțelege, să le prelucreze în consecință și apoi să le trimită înapoi în browser, fie că este o simplă confirmare sau rezultatul unei căutări într-o bază de date multifuncțională.

Cu alte cuvinte, programarea CGI necesită înțelegerea modului de primire a intrărilor din browserul de Internet și a modului de trimitere înapoi. Ce se întâmplă între etapele de intrare și de ieșire ale unui program CGI depinde de scopul dezvoltatorului. Veți descoperi că principala dificultate în programarea CGI constă în această etapă intermediară; Odată ce înveți cum să lucrezi cu intrare și ieșire, asta este în esență suficient pentru a deveni un dezvoltator CGI.

În acest capitol, veți învăța principiile din spatele intrării și ieșirii CGI, precum și alte abilități de bază de care veți avea nevoie pentru a scrie și utiliza CGI, inclusiv lucruri precum crearea de formulare HTML și denumirea programelor dvs. CGI. Acest capitol acoperă următoarele subiecte:

  • Program tradițional „Hello, World!”;
  • Ieșire CGI: Trimiterea informațiilor înapoi pentru afișare într-un browser de Internet;
  • Configurarea, instalarea și rularea aplicației. Veți afla despre diferite platforme Web și servere;
  • Intrare CGI: Interpretarea informațiilor trimise de browserul Web. Introducere în câteva biblioteci de programare utile pentru analizarea unei astfel de intrări;
  • Un exemplu simplu: acoperă toate lecțiile dintr-un anumit capitol;
  • Strategia de programare.

Datorită naturii acestui capitol, abordez puțin doar unele subiecte. Nu vă faceți griji; Toate aceste subiecte sunt tratate mult mai în profunzime în alte capitole.

Salut Lume!

Începeți cu o problemă de programare introductivă tradițională. Veți scrie un program care afișează „Hello, World!” pe browserul dvs. Web. Înainte de a scrie acest program, trebuie să înțelegeți ce informații se așteaptă să primească browserul Web de la programele CGI. De asemenea, trebuie să știți cum să rulați acest program pentru a-l putea vedea în acțiune.

CGI este independent de limbă, așa că puteți implementa acest program în orice limbă. Mai multe limbi diferite sunt folosite aici pentru a demonstra independența fiecărei limbi. În Perl, programul „Hello, World!” prezentate în Lista 2.1.

Lista 2.1. Salut Lume! în Perl. #!/usr/local/bin/perl # Hello.cgi - Primul meu program CGI imprimă „Content-Type: text/html\n\n”; imprimare " \n"; imprima " Salut Lume!"; imprimare "\n"; imprima " \n"; imprima "

Salut Lume!

\n"; imprima "

\n";

Salvați acest program ca hello.cgi și instalați-l în locația potrivită. (Dacă nu sunteți sigur unde se află, nu vă faceți griji; veți afla în secțiunea „Instalarea și rularea unui program CGI” mai târziu în acest capitol.) Pentru majoritatea serverelor, directorul de care aveți nevoie este cgi-bin . Acum, apelați programul din browserul dvs. web. Pentru majoritatea, aceasta înseamnă deschiderea următorului local de resurse uniform (URL):

http://hostname/directoryname/hello.cgi

Hostname este numele serverului dvs. Web, iar directoryname este directorul în care ați pus hello.cgi (probabil cgi-bin).

Împărțirea hello.cgi

Există câteva lucruri de reținut despre hello.cgi.

În primul rând, utilizați comenzi simple de imprimare. Programele CGI nu necesită descriptori de fișiere speciali sau descriptori de ieșire. Pentru a trimite rezultate către browser, pur și simplu imprimați în stdout.

În al doilea rând, rețineți că conținutul primei declarații de tipărire (Content-Type: text/html) nu apare în browserul dvs. Web. Puteți trimite orice informații dorite înapoi către browser (pagină HTML, grafică sau sunet), dar mai întâi trebuie să spuneți browserului ce fel de date îi trimiteți. Această linie spune browserului la ce fel de informații să se aștepte - în acest caz, o pagină HTML.

În al treilea rând, programul se numește hello.cgi. Nu trebuie să utilizați întotdeauna extensia .cgi cu numele programului dvs. CGI. Deși codul sursă pentru multe limbi folosește, de asemenea, extensia .cgi, nu este folosit pentru a indica tipul de limbă, ci este o modalitate prin care serverul poate identifica fișierul ca fișier executabil, mai degrabă decât un fișier grafic, fișier HTML sau fisier text. Serverele sunt adesea configurate pentru a încerca doar să execute acele fișiere care au această extensie, afișând conținutul tuturor celorlalte. Deși utilizarea extensiei .cgi nu este necesară, este totuși considerată o bună practică.

În general, hello.cgi constă din două părți principale:

  • spune browserului la ce informații să se aștepte (Tip de conținut: text/html)
  • spune browserului ce să afișeze (Bună ziua, lume!)

Salut Lume! în C

Pentru a arăta independența de limbă a programelor CGI, Lista 2.2 arată echivalentul programului hello.cgi scris în C.

Lista 2.2. Salut Lume! în C. /* hello.cgi.c - Hello, World CGI */ #include int main() ( printf("Tip de conținut: text/html\r\n\r\n"); printf(" \n"); printf(" Salut Lume!\n"); printf("\n"); printf(" \n"); printf("

Salut Lume!

\n"); printf("

\n"); )

Notă

Rețineți că versiunea Perl a hello.cgi folosește tipul de tip conținut „: text/html\n\n”; În timp ce versiunea C folosește Printf("Content-Type: text/html\r\n\r\n");

De ce Perl imprimă operatorul care se termină cu două linii noi (\n) în timp ce C printf se termină cu două întoarceri de cărucior și linii noi (\r\n)?

Din punct de vedere tehnic, anteturile (toate ieșirile înaintea liniei goale) sunt de așteptat să fie separate prin întoarceri de cărucior și linii noi. Din păcate, pe mașinile DOS și Windows, Perl se traduce \r ca o altă linie nouă, mai degrabă decât ca o întoarcere de cărucior.

Deși excepția Perl este incorectă din punct de vedere tehnic, va funcționa pe aproape toate protocoalele și este la fel de portabilă pe toate platformele. Prin urmare, în toate exemplele Perl din această carte, folosesc mai degrabă anteturile de separare a liniei noi decât retururile și liniile noi.

O soluție adecvată la această problemă este prezentată în Capitolul 4, Concluzie.

Nici serverului web și nici browserului nu îi pasă ce limba este folosită pentru a scrie programul. Deși fiecare limbă are avantaje și dezavantaje ca limbaj de programare CGI, cel mai bine este să utilizați limbajul cu care vă simțiți cel mai confortabil să lucrați. (Alegerea limbajului de programare este discutată mai detaliat în Capitolul 1, „Interfața comună Gateway (CGI)”).

Redare CGI

Acum puteți arunca o privire mai atentă asupra problemei trimiterii de informații către browserul web. Din exemplul „Bună ziua, lume!”, puteți vedea că browserele Web se așteaptă la două seturi de date: un antet, care conține informații precum informațiile de afișat (de exemplu, Tipul de conținut: linia) și informațiile reale (ce este browserul web). afișează). Aceste două informații sunt separate printr-o linie goală.

Antetul se numește antet HTTP. Oferă informații importante despre informațiile pe care browserul le va primi. Există mai multe tipuri diferite de anteturi HTTP, iar cel mai comun este cel pe care l-ați folosit anterior: Tipul conținut: antet. Puteți utiliza diferite combinații de anteturi HTTP, separate prin returnări de cărucior și linii noi (\r\n). Linia goală care separă antetul de date constă, de asemenea, dintr-o întoarcere de transport și o linie nouă (de ce sunt necesare ambele este discutat pe scurt în nota precedentă și detaliat în Capitolul 4). Veți afla despre alte anteturi HTTP în Capitolul 4; În prezent, aveți de-a face cu Content-Type: header.

Content-Type: Antetul descrie tipul de date pe care le returnează CGI. Formatul potrivit pentru acest antet este:

Content-Type: subtip/tip

Unde subtipul/tipul este tipul corect de extensii de poștă Internet multifuncțională (MIME). Cel mai comun tip MIME este tipul HTML: text/html. Tabelul 2.1 listează câteva tipuri MIME mai comune care vor fi discutate; O listă și o analiză mai completă a tipurilor MIME sunt furnizate în Capitolul 4.

Notă

MIME a fost inventat inițial pentru a descrie conținutul corpurilor de mesaje de e-mail. A devenit o modalitate destul de comună de a reprezenta informațiile tip conținut. Puteți citi mai multe despre MIME în RFC1521. RFC-urile de pe Internet înseamnă Cereri de comentarii, care sunt rezumate ale deciziilor luate de grupuri de pe Internet care încearcă să stabilească standarde. Puteți vizualiza rezultatele RFC1521 la următoarea adresă: http://andrew2.andrew.cmu.edu/rfc/rfc1521.html

Tabelul 2.1. Unele tipuri MIME comune. Tip MIME Descriere Text/html Hypertext Markup Language (HTML) Text/plain Fișiere text simplu Imagine/gif Fișiere grafice GIF Imagine/jpeg Fișiere grafice comprimate JPEG Audio/fișiere audio de bază Sun *.au Audio/x-wav Fișiere Windows *

După antet și o linie goală, pur și simplu imprimați datele în formularul de care aveți nevoie. Dacă trimiteți HTML, imprimați etichetele și datele HTML în stdout după antet. De asemenea, puteți trimite fișiere grafice, sunet și alte fișiere binare prin simpla tipărire a conținutului fișierului în stdout. Câteva exemple în acest sens sunt date în capitolul 4.

Instalarea și rularea unui program CGI

Această secțiune se abate oarecum de la programarea CGI și vorbește despre configurarea serverului dvs. Web pentru a utiliza CGI, instalarea și rularea programelor. Veți fi prezentat mai mult sau mai puțin în detaliu la diferite servere pentru diferite platforme, dar va trebui să aprofundați în documentația serverului dvs. pentru a găsi cea mai bună opțiune.

Toate serverele necesită spațiu pentru fișierele server și spațiu pentru documente HTML. În această carte, zona serverului se numește ServerRoot, iar zona documentului se numește DocumentRoot. Pe mașinile UNIX, ServerRoot este de obicei în /usr/local/etc/httpd/, iar DocumentRoot este de obicei în /usr/local/etc/httpd/htdocs/. Cu toate acestea, acest lucru nu va face nicio diferență pentru sistemul dvs., așa că înlocuiți toate referințele la ServerRoot și DocumentRoot cu propriile dvs. ServerRoot și DocumentRoot.

Când accesați fișiere utilizând browserul Web, specificați fișierul în adresa URL relativă la DocumentRoot. De exemplu, dacă adresa serverului dvs. este mymachine.org, atunci accesați acest fișier cu următoarea adresă URL: http://mymachine.org/index.html

Configurarea serverului pentru CGI

Majoritatea serverelor Web sunt preconfigurate pentru a permite utilizarea programelor CGI. De obicei, doi parametri indică serverului dacă fișierul este sau nu o aplicație CGI:

  • Director desemnat. Unele servere vă permit să determinați că toate fișierele dintr-un director desemnat (numit de obicei cgi-bin în mod implicit) sunt CGI.
  • Extensii de nume de fișiere. Multe servere au această pre-configurare care permite ca toate fișierele care se termină în .cgi să fie definite ca CGI.

Metoda directorului desemnat este o relicvă a trecutului (primile servere au folosit-o ca singura metodă pentru a determina ce fișiere erau programe CGI), dar are câteva avantaje.

  • Menține programele CGI centralizate, împiedicând alte directoare să devină aglomerate.
  • Nu sunteți limitat la nicio extensie specifică de nume de fișier, așa că puteți denumi fișierele cum doriți. Unele servere vă permit să desemnați mai multe directoare diferite ca directoare CGI.
  • De asemenea, vă oferă mai mult control asupra cine poate înregistra CGI. De exemplu, dacă aveți un server și susțineți un sistem cu mai mulți utilizatori și nu doriți ca aceștia să-și folosească propriile scripturi CGI fără a audita mai întâi programul din motive de securitate, puteți desemna doar acele fișiere dintr-un director limitat și centralizat ca CGI. . Utilizatorii vor trebui apoi să vă ofere programe CGI de instalat și mai întâi puteți verifica codul pentru a vă asigura că programul nu are probleme majore de securitate.

Notația CGI prin extensia numelui de fișier poate fi utilă datorită flexibilității sale. Nu sunteți limitat la un singur director pentru programele CGI. Majoritatea serverelor pot fi configurate să recunoască CGI prin extensia numelui de fișier, deși nu toate sunt configurate în acest fel în mod implicit.

Avertizare

Amintiți-vă importanța problemelor de securitate atunci când vă configurați serverul pentru CGI. Câteva sfaturi vor fi acoperite aici, iar Capitolul 9, Protejarea CGI, acoperă aceste aspecte mai detaliat.

Instalarea CGI pe servere UNIX

Indiferent de modul în care este configurat serverul dvs. UNIX, există câțiva pași pe care trebuie să îi urmați pentru a vă asigura că aplicațiile dvs. CGI rulează conform așteptărilor. Serverul dvs. Web va rula de obicei ca un utilizator inexistent (adică utilizatorul UNIX nobody - un cont care nu are permisiuni de fișier și nu poate fi autentificat). Scripturile CGI (scrise în Perl, Bourne shell sau alt limbaj de scripting) trebuie să fie executabile și lizibile în întreaga lume.

Cheie

Pentru a face fișierele dvs. lizibile și executabile, utilizați următoarea comandă de permisiuni UNIX: chmod 755 filename.

Dacă utilizați un limbaj de scripting, cum ar fi Perl sau Tcl, furnizați calea completă a interpretului pe prima linie a scriptului. De exemplu, un script Perl care folosește perl în directorul /usr/local/bin ar începe cu următoarea linie:

#!/usr/local/bin/perl

Avertizare

Nu plasați niciodată interpretul (perl sau binarul Tcl Wish) în directorul /cgi-bin Acest lucru creează un risc de securitate pentru sistemul dumneavoastră.

Unele servere UNIX generice

Serverele NCSA și Apache au fișiere de configurare similare, deoarece serverul Apache sa bazat inițial pe codul NCSA. În mod implicit, acestea sunt configurate astfel încât orice fișier din directorul cgi-bin (localizat implicit în ServerRoot) să fie un program CGI. Pentru a schimba locația directorului cgi-bin, puteți edita fișierul de configurare conf/srm.conf. Formatul pentru configurarea acestui director este

ScriptAlias ​​​​fakedirectoryname realdirectoryname

unde fakedirectoryname este numele pseudo-directorului (/cgi-bin) și realdirectoryname este calea completă în care sunt de fapt stocate programele CGI. Puteți configura mai mult de un ScriptAlias ​​adăugând mai multe linii ScriptAlias.

Configurația implicită este suficientă pentru nevoile majorității utilizatorilor. Trebuie să editați linia din fișierul srm.conf în ambele cazuri pentru a determina numele realdirectoryname corect. Dacă, de exemplu, programele dvs. CGI sunt localizate în /usr/local/etc/httpd/cgi-bin, linia ScriptAlias ​​​​din fișierul dvs. srm.conf ar trebui să fie cam așa:

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

Pentru a accesa sau conecta la programele CGI situate în acest director, utilizați următoarea adresă URL:

Http://hostname/cgi-bin/programname

Unde hostname este numele gazdei serverului dvs. Web, iar programname este numele CGI.

De exemplu, să presupunem că copiați programul hello.cgi în directorul dvs. cgi-bin (de ex. /usr/local/etc/httpd/cgi-bin) de pe serverul dvs. Web numit www.company.com. Pentru a accesa CGI, utilizați următoarea adresă URL: http://www.company.com/cgi-bin/hello.cgi

Dacă doriți să configurați serverul NCSA sau Apache pentru a recunoaște orice fișier cu extensie .cgi ca CGI, trebuie să editați două fișiere de configurare. Mai întâi, în fișierul srm.conf, decomentați următoarea linie:

Aplicație AddType/x-httpd-cgi .cgi

Aceasta va asocia tipul MIME CGI cu extensia .cgi. Acum, trebuie să schimbăm fișierul access.conf, astfel încât să putem rula CGI în orice director. Pentru a face acest lucru, adăugați opțiunea ExecCGI la linia Opțiune. Va arăta ceva ca următoarea linie:

Opțiuni Indexuri FollowSymLinks ExecCGI

Acum, orice fișier cu extensia .cgi este considerat CGI; accesați-l ca orice fișier de pe serverul dvs.

Serverul CERN este configurat în același mod ca și serverele Apache și NCSA. În loc de ScriptAlias, serverul CERN folosește comanda Exec. De exemplu, în fișierul httpd.conf, veți vedea următoarea linie:

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

Alte servere UNIX pot fi configurate în același mod; Acest lucru este descris mai detaliat în documentația serverului.

Instalarea CGI pe Windows

Majoritatea serverelor disponibile pentru Windows 3.1, Windows 95 și Windows NT sunt configurate folosind metoda „extensie nume fișier” pentru recunoașterea CGI. În general, modificarea configurației unui server bazat pe Windows necesită pur și simplu rularea programului de configurare a serverului și efectuarea modificărilor corespunzătoare.

Uneori, configurarea unui server pentru a rula corect un script (cum ar fi Perl) poate fi dificilă. În DOS sau Windows, nu veți putea specifica interpretul pe prima linie a scriptului, așa cum este cazul UNIX. Unele servere au o configurație predefinită pentru a asocia anumite extensii de nume de fișier cu interpretul. De exemplu, multe servere Web Windows presupun că fișierele care se termină în .pl sunt scripturi Perl.

Dacă serverul nu realizează acest tip de asociere de fișiere, puteți defini un fișier batch de pachet care apelează atât interpretul, cât și scriptul. Ca și în cazul serverului UNIX, nu instalați interpretul nici în directorul cgi-bin, nici în orice director accesibil pe Web.

Instalarea CGI pe Macintosh

Cele mai cunoscute două opțiuni de server pentru Macintosh sunt WebStar StarNine și predecesorul său MacHTTP. Ambele recunosc CGI după extensia numelui de fișier.

MacHTTP înțelege două extensii diferite: .cgi și .acgi, care înseamnă CGI asincron. Programele CGI obișnuite instalate pe un Macintosh (cu o extensie .cgi) vor menține serverul Web într-o stare ocupată până când CGI se termină de rulare, determinând serverul să suspende toate celelalte solicitări. CGI asincron, pe de altă parte, permite serverului să accepte cereri chiar și în timp ce rulează.

Un dezvoltator CGI Macintosh care utilizează oricare dintre aceste servere Web ar trebui, dacă este posibil, să folosească doar extensia .acgi, mai degrabă decât extensia .cgi. Ar trebui să funcționeze cu majoritatea programelor CGI; dacă nu funcționează, redenumiți programul în .cgi.

Executarea CGI

Odată ce ați instalat CGI, există mai multe moduri de a-l executa. Dacă programul dvs. CGI este un program numai de ieșire, cum ar fi programul Hello,World, atunci îl puteți executa pur și simplu accesând adresa URL.

Majoritatea programelor rulează ca o aplicație server pe un formular HTML. Înainte de a învăța cum să obțineți informații din aceste formulare, citiți mai întâi o scurtă introducere despre crearea unor astfel de formulare.

Un tutorial rapid despre formularele HTML

Cele mai importante două etichete dintr-un formular HTML sunt

Și . Puteți crea majoritatea formularelor HTML folosind doar aceste două etichete. În acest capitol, veți explora aceste etichete și un mic subset de tipuri sau atribute posibile. . Un ghid complet și o legătură către formularele HTML se află în Capitolul 3, HTML și formulare.

Etichetă

Etichetă folosit pentru a determina ce parte a fișierului HTML ar trebui utilizată pentru informațiile introduse de utilizator. Aceasta se referă la modul în care majoritatea paginilor HTML numesc un program CGI. Atributele etichetei specifică numele și locația programului - fie local, fie ca adresă URL completă, tipul de codificare utilizat și metoda de mișcare a datelor utilizată de program.

Următoarea linie arată specificațiile pentru etichetă :

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

Atributul ENCTYPE nu joacă un rol special și de obicei nu este inclus cu eticheta . Informații detaliate despre eticheta ENCTYPE sunt oferite în Capitolul 3. O modalitate de a utiliza ENCTYPE este prezentată în Capitolul 14, „Extensii de marcă”.

Atributul ACTION se referă la adresa URL a programului CGI. Odată ce utilizatorul completează formularul și furnizează informații, toate informațiile sunt codificate și transferate în programul CGI. Programul CGI însuși rezolvă problema decodării și procesării informațiilor; Acest aspect este discutat în „Acceptarea intrărilor din browser”, mai târziu în acest capitol.

În cele din urmă, atributul METHOD descrie modul în care programul CGI ar trebui să primească intrare. Cele două metode, GET și POST, diferă în modul în care transmit informații către programul CGI. Ambele sunt discutate în „Acceptarea intrărilor din browser”.

Pentru ca browserul să permită introducerea utilizatorului, toate etichetele și informațiile de formular trebuie să fie înconjurate de etichetă . Nu uitați de eticheta de închidere

pentru a indica sfârșitul formularului. Nu puteți avea un formular în cadrul unui formular, deși puteți configura un formular care vă permite să prezentați informații în locuri diferite; acest aspect este discutat pe larg în capitolul 3.

Etichetă

Puteți crea bare de introducere a textului, butoane radio, casete de selectare și alte mijloace de acceptare a introducerii folosind eticheta . Această secțiune acoperă numai câmpurile de introducere a textului. Pentru a implementa acest câmp, utilizați eticheta cu urmatoarele atribute:

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

NUME este numele simbolic al variabilei care conține valoarea introdusă de utilizator. Dacă includeți text în atributul VALUE, acel text va fi plasat implicit în câmpul de introducere a textului. Atributul SIZE vă permite să specificați lungimea orizontală a câmpului de introducere așa cum va apărea în fereastra browserului. În cele din urmă, MAXLENGTH specifică numărul maxim de caractere pe care utilizatorul le poate introduce în câmp. Rețineți că atributele VALUE, SIZE, MAXLENGTH sunt opționale.

Depunerea formularului

Dacă aveți un singur câmp de text într-un formular, utilizatorul poate trimite formularul prin simpla introducere a informațiilor pe tastatură și apăsând Enter. În caz contrar, trebuie să existe o altă modalitate prin care utilizatorul să prezinte informațiile. Utilizatorul trimite informații folosind un buton de trimitere cu următoarea etichetă:

< Input type=submit >

Această etichetă creează un buton Trimiteți în formularul dvs. Când utilizatorul termină de completat formularul, el sau ea poate trimite conținutul acestuia la adresa URL specificată de atributul ACȚIUNE al formularului făcând clic pe butonul Trimitere.

Se acceptă introducerea din browser

Mai sus au fost exemple de înregistrare a unui program CGI care trimite informații de la server la browser. În realitate, un program CGI care scoate numai date nu are multe aplicații (unele exemple sunt date în Capitolul 4). Abilitatea mai importantă a CGI este de a primi informații de la browser - caracteristica care conferă web-ului caracterul său interactiv.

Programul CGI primește două tipuri de informații de la browser.

  • În primul rând, obține diverse informații despre browser (tipul său, ceea ce poate vizualiza, gazda și așa mai departe), server (numele și versiunea acestuia, portul său de execuție și așa mai departe) și programul CGI însuși (numele programului și locul în care se află). Serverul oferă toate aceste informații programului CGI prin variabile de mediu.
  • În al doilea rând, programul CGI poate primi intrarea utilizatorului. Aceste informații, după ce au fost codificate de browser, sunt trimise fie printr-o variabilă de mediu (metoda GET), fie prin intrare standard (stdin - metoda POST).

variabile de mediu

Este util să știți ce variabile de mediu sunt disponibile pentru un program CGI, atât în ​​timpul antrenamentului, cât și pentru depanare. Tabelul 2.2 listează unele dintre variabilele de mediu CGI disponibile. De asemenea, puteți scrie un program CGI care scoate variabilele de mediu și valorile acestora într-un browser web.

Tabelul 2.2. Câteva variabile importante de mediu CGI Variabile de mediu Scop REMOTE_ADDR Adresa IP a computerului client. REMOTE_HOST Gazda mașinii client. HTTP _ACCEPT Listează tipurile de date MIME pe care browserul le poate interpreta. HTTP _USER_AGENT Informații despre browser (tipul browserului, numărul versiunii, sistem de operare, etc.). REQUEST_METHOD GET sau POST. CONTENT_LENGTH Mărimea intrării dacă este trimisă prin POST. Dacă nu există nicio intrare sau dacă se utilizează metoda GET, acest parametru este nedefinit. QUERY_STRING Conține informațiile de intrare când sunt transmise folosind metoda GET. PATH_INFO Permite utilizatorului să specifice o cale din linia de comandă CGI (de exemplu, http://hostname/cgi-bin/programname/path). PATH_TRANSLATED Traduce calea relativă din PATH_INFO într-o cale reală pe sistem.

Pentru a scrie o aplicație CGI care afișează variabile de mediu, trebuie să știți cum să faceți două lucruri:

  • Definiți toate variabilele de mediu și valorile lor corespunzătoare.
  • Imprimați rezultatele în browser.

Știți deja cum să efectuați ultima operație. În Perl, variabilele de mediu sunt stocate în tabloul asociativ %ENV, care este introdus prin numele variabilei de mediu. Lista 2.3 conține env.cgi, un program Perl care ne atinge scopul.

Lista 2.3. Un program Perl, env.cgi, care tipărește toate variabilele de mediu CGI.

#!/usr/local/bin/perl print „Tip de conținut: text/html\n\n”; imprimare " \n"; imprima " Mediu CGI\n"; imprima "\n"; imprima " \n"; imprima "

Mediu CGI

\n"; foreach $env_var (chei %ENV) (printează " $env_var= $ENV($env_var)
\n"; ) imprimați "

\n";

Un program similar ar putea fi scris în C; codul complet este în Lista 2.4.

Lista 2.4. Env.cgi.c în C. /* env.cgi.c */ #include extern char **environ; int main() ( char **p = mediu; printf("Tip de conținut: text/html\r\n\r\n"); printf(" \n"); printf(" Mediu CGI\n"); printf("\n"); printf(" \n"); printf("

Mediu CGI

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

\n"); )

GET sau POST?

Care este diferența dintre metodele GET și POST? GET trece șirul de intrare codificat prin variabila de mediu QUERY_STRING, în timp ce POST îl trece prin stdin. POST este metoda preferată, mai ales pentru formularele cu multe date, deoarece nu există restricții privind cantitatea de informații trimise, în timp ce cu metoda GET spațiul media este limitat. GET are, totuși, sigur proprietate utilă; acest lucru este tratat în detaliu în Capitolul 5, Intrare.

Pentru a determina ce metodă este utilizată, programul CGI verifică variabila de mediu REQUEST_METHOD, care va fi setată fie la GET, fie la POST. Dacă este setată la POST, lungimea informațiilor codificate este stocată în variabila de mediu CONTENT_LENGTH.

Intrare codificată

Când un utilizator trimite un formular, browserul mai întâi codifică informațiile înainte de a le trimite către server și apoi către aplicația CGI. Când utilizați eticheta , fiecărui câmp i se dă un nume simbolic. Valoarea introdusă de utilizator este reprezentată ca valoare a variabilei.

Pentru a determina acest lucru, browserul utilizează o specificație de codificare URL, care poate fi descrisă după cum urmează:

  • Separă câmpurile diferite cu un ampersand (&).
  • Separă numele și valorile cu semne egale (=), cu numele în stânga și valoarea în dreapta.
  • Înlocuiește spațiile cu semnele plus (+).
  • Înlocuiește toate caracterele „anormale” cu un semn de procent (%) urmat de un cod hexadecimal din două cifre pentru caracter.

Șirul dvs. final codificat va fi similar cu următorul:

Nume1=valoare1&nume2=valoare2&nume3=valoare3...

Notă: Specificațiile pentru codificarea URL sunt găsite în RFC1738.

De exemplu, să presupunem că ai avut un formular care cere numele și vârsta. Codul HTML care a fost folosit pentru a afișa acest formular este afișat în Lista 2.5.

Lista 2.5. Cod HTML pentru a afișa numele și forma de vârstă.

Nume și vârstă

Introdu numele tau:

Introduceți vârsta dvs:



Să presupunem că utilizatorul introduce Joe Schmoe în câmpul de nume și 20 în câmpul de vârstă. Intrarea va fi codificată în șirul de intrare.

Nume=Joe+Schmoe&varsta=20

Analizarea intrării

Pentru ca aceste informații să fie utile, trebuie să utilizați informațiile despre ceva ce poate fi folosit de programele dvs. CGI. Strategiile de parsare a intrărilor sunt tratate în Capitolul 5. În practică, nu va trebui niciodată să vă gândiți la cum să analizați intrarea, deoarece mai mulți experți au scris deja biblioteci care fac parsarea, accesibile tuturor. Două astfel de biblioteci sunt prezentate în acest capitol în următoarele secțiuni: cgi -lib.pl pentru Perl (scris de Steve Brenner) și cgihtml pentru C (scris de mine).

Scopul general al majorității bibliotecilor scrise în diferite limbi este de a analiza un șir codificat și de a pune perechi nume și valoare într-o structură de date. Există un avantaj evident în utilizarea unui limbaj care are structuri de date încorporate precum Perl; cu toate acestea, majoritatea bibliotecilor pentru limbaje de nivel scăzut, cum ar fi C și C++, includ structura de date și execuția subrutinei.

Nu este necesar să se realizeze o înțelegere completă a bibliotecilor; este mai important să înveți cum să le folosești ca instrumente pentru a ușura munca programatorului CGI.

Cgi-lib.pl

Cgi-lib.pl folosește tablouri asociative Perl. Funcția &ReadParse analizează șirul de intrare și introduce fiecare pereche nume/valoare după nume. De exemplu, șirurile Perl corespunzătoare necesare pentru a decoda șirul de intrare „nume/vârstă” tocmai prezentat ar fi

&ReadParse(*input);

Acum, pentru a vedea valoarea introdusă pentru „nume”, puteți accesa matricea asociativă $input(„nume”). În mod similar, pentru a accesa valoarea „vârstă”, trebuie să vă uitați la variabila $input („vârstă”).

Cgihtml

C nu are nicio structură de date încorporată, așa că cgihtml implementează propria listă de linkuri pentru a fi utilizată cu rutinele sale de analiză CGI. Aceasta definește structura tipului de intrare după cum urmează:

Typedef struct ( Char *nume; Char *valoare; ) Tip de intrare;

Pentru a analiza șirul de intrare „nume/vârstă” în C folosind cgihtml, se utilizează următoarele:

/* declară o listă legată numită input */ Llist input; /* analizează intrarea și locația în lista legată */ read_cgi_input(&input);

Pentru a accesa informații despre vârstă, puteți fie să analizați lista manual, fie să utilizați funcția disponibilă cgi _val().

#include #include Char *age = malloc(sizeof(char)*strlen(cgi_val(input, "age")) + 1); Strcpy(vârstă, cgi_val(input, „vârsta”);

Valoarea „vârstă” este acum stocată în șirul de vârstă.

Notă: În loc să folosesc o matrice simplă (cum ar fi char age ;), aloc dinamic spațiu de memorie pentru vârsta șirurilor. Deși acest lucru face programarea mai dificilă, este totuși importantă din punct de vedere al securității. Acest lucru este discutat mai detaliat în capitolul 9.

Un simplu program CGI

Veți scrie un program CGI numit nameage.cgi care se ocupă de forma nume/vârstă. Procesarea datelor (ceea ce eu de obicei numesc „lucruri între ele”) este minimă. Nameage.cgi pur și simplu decodifică intrarea și afișează numele și vârsta utilizatorului. Deși nu este foarte util pentru un astfel de instrument, acesta demonstrează cel mai critic aspect al programării CGI: intrare și ieșire.

Folosiți același formular ca mai sus, apelând câmpurile „nume și vârstă”. Nu vă faceți griji pentru robustețe și eficiență încă; rezolva problema existenta in cel mai simplu mod. Soluțiile Perl și C sunt prezentate în listele 2.6 și, respectiv, 2.7.

Lista 2.6. Nameage.cgi în Perl

#!/usr/local/bin/perl # nameage.cgi necesită „cgi-lib.pl” &ReadParse(*input); printează „Tip de conținut: text/html\r\n\r\n”; imprimare " \n"; imprima " Nume și vârstă\n"; imprima "\n"; imprima " \n"; printează "Bună ziua," . $input("nume") . ". Ai\n"; print $input("varsta") . " ani.

\n"; imprima "

\n";

Lista 2.7. nume.cgi în C

/* nameage.cgi.c */ #include #include "cgi-lib.h" int main() (llist input; read_cgi_input(&input); printf("Content-Type: text/html\r\n\r\n"); printf(" \n"); printf(" Nume și vârstă\n"); printf("\n"); printf(" \n"); printf("Bună ziua, %s. Ai\n",cgi_val(input,"name")); printf("%s ani.

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

\n"); )

Vă rugăm să rețineți că aceste două programe sunt aproape echivalente. Ambele conțin rutine de analiză care ocupă o singură linie și procesează întreaga intrare (mulțumită rutinelor bibliotecii corespunzătoare). Ieșirea este în esență o versiune modificată a programului principal Hello, World!

Încercați să rulați programul completând formularul și făcând clic pe butonul Trimitere.

Strategia generală de programare

Acum cunoașteți toate principiile de bază necesare pentru programarea CGI. Odată ce înțelegeți cum CGI primește informații și cum le trimite înapoi către browser, calitatea reală a produsului final depinde de abilitățile generale de programare. Și anume, atunci când programați CGI (sau orice altceva, de altfel), țineți cont de următoarele calități:

  • Simplitate
  • Eficienţă
  • Versatilitate

Primele două calități sunt destul de comune: încercați să vă faceți codul cât mai ușor de citit și de eficient. Versatilitatea se aplică mai mult programelor CGI decât altor aplicații. Când începeți să vă dezvoltați propriile programe CGI, veți afla că există câteva aplicații de bază pe care toată lumea vrea să le facă. De exemplu, una dintre cele mai comune și evidente sarcini ale unui program CGI este de a procesa un formular și de a trimite rezultatele prin e-mail unui anumit destinatar. Puteți avea mai multe formulare separate, fiecare cu un destinatar diferit. În loc să scrieți un program CGI pentru fiecare formular individual, puteți economisi timp scriind un program CGI mai general care se aplică tuturor formularelor.

Acoperind toate aspectele de bază ale CGI, v-am furnizat suficiente informații pentru a începe cu programarea CGI. Cu toate acestea, pentru a deveni un dezvoltator CGI eficient, trebuie să înțelegeți mai profund modul în care CGI comunică cu serverul și browserul. Restul acestei cărți acoperă în detaliu problemele care au fost menționate pe scurt în acest capitol, precum și strategia de dezvoltare a aplicațiilor și avantajele și limitările protocolului.

rezumat

Acest capitol a prezentat pe scurt elementele de bază ale programării CGI. Creați rezultate prin formatarea corectă a datelor și prin imprimare în stdout. Recepția intrării CGI este puțin mai complexă, deoarece trebuie analizată înainte de a putea fi utilizată. Din fericire, există deja câteva biblioteci care efectuează analiza.

Până acum ar trebui să vă simțiți destul de confortabil cu programarea aplicațiilor CGI. Restul acestei cărți intră în mai multe detalii despre specificații, sfaturi și strategii de programare pentru aplicații mai avansate și mai complexe.

Comerț electronic în limba rusă clară. Cum funcționează afacerea online?

În ultimul timp, au apărut tot mai multe proiecte legate de tranzacționarea online. În timp ce studiam această zonă, nu am putut găsi o descriere generală și de înțeles a procesului. Prin urmare, am decis să fac ceva de genul unui cheat sheet la care să te poți referi oricând pentru a înțelege procedura într-o zonă precum comerțul electronic.

Voi face imediat o rezervare pe care m-am concentrat pe procesele și canalele care ajută la atragerea de clienți.

E-commerce: despre ce este vorba?

Definițiile din diverse surse spun ceva despre vânzarea de bunuri sau servicii prin internet. Cu cuvinte simple Comerțul electronic este orice activitate online în care apar bani.

Cumpărături, vânzări, asigurări, servicii bancare, bani electronici, totul este aici. Luați-l și semnați-l.

De la țintă

Pentru a înțelege problema, vă sugerez să începeți calea de la capăt. Care este scopul oricărei afaceri? Așa e, fă bani. Deci, imaginați-vă orice produs, de exemplu, șosete din silicon. De ce nu!

Am luat primul lucru care mi-a venit în minte, s-a dovedit că era așa ceva...

Sarcina noastră este să facem bani cu acești șosete. Ne gândim la internet. Hmm... de ce să nu „tai” site-ul și așa vor merge vânzările, doar ține-mă Maldive! Dar nu este atât de simplu.

Îmi place foarte mult să desenez. Acest lucru ajută la înțelegerea diferitelor procese. Hai sa desenam?!

Până acum modelul nostru arată așa. Luăm șosete, le punem pe internet și luăm bani. Acesta este pur și simplu grozav! Îți ard ochii, îți transpiră palmele și deja vrei să te apuci de treabă. Dar trebuie să faci un site web sau o platformă de vânzări?

Site sau platformă de vânzare

Există diverse soluții pentru plasarea produsului dvs. pe World Wide Web. Puteți să vă creați propriul site web sau să utilizați platforme terțe (grupuri, pagini de pe rețelele sociale, panouri de mesaje etc.). Să ne oprim pe site.

Ați comandat un site web, ați luat un șablon gata făcut sau l-ați creat singur folosind un generator de site-uri web (puteți căuta pe google CMS), nu contează. Apoi am pus o grămadă de șosete din silicon tipuri diferite si fericit.

Îmi pare rău că întrerup lectura. Alăturați-vă canalului meu Telegram. Anunțuri de articole noi, dezvoltare digitală produse și hack de creștere, totul este acolo. Te aştept! Hai sa continuăm...

Sisteme de plată

Dar pentru ca o persoană să cumpere de la tine aici și acum, va fi necesar să modifici sistemele de plată. Acesta este un fel de serviciu care vă permite să faceți achiziții online prin: carduri bancare, bani de internet, Celulareși încă o grămadă. Pentru asta va trebui să împărțiți un procent din tranzacții, dar astfel îți vei face viața mult mai ușoară.

Alege serviciul care ti se potriveste. Undeva procentul va fi mai mare, iar undeva va fi un abonament sau altceva. Fă doar puțină cercetare. Pune codul necesar pe site-ul tău web, conectează toate tranzacțiile la contul tău de card și voila!

Asta e tot ce ar părea. Există un site web, și carduri de produse și chiar și butonul „cumpără” funcționează, dar lipsește ceva... Nu există un flux de clienți care vor cumpăra.

Fluxurile de clienți

Unde: CAC = Costul achiziției unui nou client. MCC (costurile campaniei de marketing) = Costul total al cheltuielilor de marketing care vizează atragerea clienților (dar nu păstrarea acestora). W (salarii) = Salariul pentru marketeri și managerii de vânzări. S (software) = Costul utilizat în publicitate și vânzări software(de exemplu, platforma de vânzări utilizată, automatizarea marketingului, testarea A/B, serviciile de analiză etc.). PS (professionalservices) = Costul serviciilor profesionale oferite departamentelor de marketing și vânzări (design, consultanță etc.). O (altele) = Alte costuri generale legate de departamentele de marketing și vânzări. CA (clienți achiziționați) = Numărul total de clienți atrași.

Dar nu trebuie să uităm de calitatea clientului LTV va ajuta aici.

Valori importante: LTV

Valoarea timpului viu, ciclu de viață client, un alt indicator în comerțul electronic de care trebuie luat în considerare. Arată cât de mult venituri aduce un client în medie. Există diferite abordări ale calculului, eu am ales-o pe cea reală bazată pe profit, ca una dintre cele mai exacte.

Aceasta este pur și simplu suma veniturilor totale de-a lungul întregului istoric de achiziții pentru fiecare client individual. Adăugați suma tuturor achizițiilor (tranzacțiilor) clienților la tranzacția N, unde tranzacția N este ultima achiziție efectuată de client cu compania dvs. Dacă aveți acces la toate datele privind tranzacțiile clienților, atunci puteți calcula cu ușurință acest lucru folosind Excel.

LTV = (tranzacția 1 + tranzacția 2 + tranzacția 3... + tranzacția N) x cota de profit în venituri.

Calcularea LTV pe baza profitului net arată în cele din urmă profitul real pe care un client îl aduce companiei dumneavoastră. Aceasta ia în considerare costul serviciului pentru clienți, costul reținerii, costul atracției etc. Rezultatul este un întreg complex de calcule bazate pe date individuale. Profitul total generat per client de-a lungul timpului vă va oferi o înțelegere exactă a profitabilității clienților dvs. până în prezent.

Alte abordări pot fi găsite la.

Indicatori importanți: raportul CAC și LTV

Pentru a înțelege viabilitatea unei afaceri, este foarte important să ne uităm la raportul dintre cele două rapoarte CAC:LTV menționate.

  • Mai puțin de 1:1 - Te grăbești cu viteză maximă către faliment.
  • 1:1 – Pierzi bani pentru fiecare client atras.
  • 1:2 – Pare bine, dar se pare că nu investești destui bani și te-ai putea dezvolta mai repede. Lansați campanii mai agresive de achiziție de clienți și obțineți rate apropiate de 1:3.
  • 1:3 – Raport ideal. Ai o afacere înfloritoare și un model de afaceri puternic.

Indicatori importanți: ROI nu uitați

După cum am discutat mai sus, în comerțul electronic trebuie să înțelegeți clar dacă este profitabil să folosiți un canal de achiziție sau nu. Pe lângă LTV și CAC, există un alt indicator important: ROI. Arată dacă investiția dvs., în cazul nostru în publicitate, a dat roade. Acesta este. cât ne-a adus până la urmă 1 rublă investită.

Pentru calcul se folosește o formulă foarte simplă:

Unde „Venitul campaniei” este diferența dintre venitul din canal și costul produsului dvs. Iar pentru a calcula profitul, scade costurile de publicitate.

Astfel, o formulă mai detaliată ar arăta astfel:

ROI = (Venit canal – Cost) – Cheltuieli de publicitate / Cheltuieli de publicitate x 100%

Mai mult exemplu detaliat citeste cu consideratie. De fapt, această formulă simplă este plasată în același tabel Excel, unde totul este calculat automat.

Toți cei trei indicatori despre care am discutat sunt importanți în comerțul electronic. Fiecare dintre ele vă permite să găsiți blocaje în fluxurile dvs. și să lucrați cu ele. Aici se află potențialul de creștere pentru afaceri. Am mai adăugat puțin la modelul nostru cu șosete.

Este imposibil să încadrezi totul într-un singur material și cine îl va citi atât de mult timp? Mai târziu voi face un ghid separat despre nuanțele comerțului electronic care pot interfera cu vânzările.

Total

În general, acum aveți o înțelegere generală a comerțului online sau a comerțului electronic. Mai mult, după cum se spune: „Diavolul este în detalii”. Studiați fiecare canal separat, calculați indicatorii de performanță și căutați noi perspective în lucrurile mărunte. Vânzări pe internet pentru tine și multe altele! Și mai am un material.

Da, aproape că am uitat, La mulți ani, dragi cititori! Vă doresc mari victorii și realizări anul viitor!