Advertising inurl c board cgi cmd. tehnologii de internet. Laborator: CGI. Strategia generală de programare

Legume 15.04.2022

Cum se caută folosind google.com

Probabil că toată lumea știe să folosească un motor de căutare precum Google =) Dar nu toată lumea știe că dacă compuneți corect o interogare de căutare folosind structuri speciale, puteți obține rezultatele a ceea ce căutați mult mai eficient și mai rapid =) În acest articol Voi încerca să arăt asta și cum trebuie să faceți pentru a căuta corect

Google acceptă mai mulți operatori de căutare avansate care au o semnificație specială atunci când caută pe google.com. De obicei, acești operatori modifică căutarea sau chiar îi spun Google să facă tipuri complet diferite de căutări. De exemplu, construcția legătură: este un operator special, iar interogarea link:www.google.com nu vă va oferi o căutare normală, ci va găsi în schimb toate paginile web care au link-uri către google.com.
tipuri alternative de solicitare

cache: Dacă includeți alte cuvinte în interogare, Google va evidenția acele cuvinte incluse în documentul stocat în cache.
De exemplu, cache:www.site-ul web va afișa conținutul în cache cu cuvântul „web” evidențiat.

legătură: interogarea de căutare de mai sus va afișa pagini web care conțin link-uri către interogarea specificată.
De exemplu: link: www.site-ul web va afișa toate paginile care au un link către http://www.site

legate de: Afișează pagini web care sunt „în legătură” cu pagina web specificată.
De exemplu, legate de: www.google.com va lista pagini web care sunt similare cu pagina de pornire Google.

info: Solicitați informații: va furniza câteva informații pe care Google le are despre pagina web solicitată.
De exemplu, info:site-ul web va afișa informații despre forumul nostru =) (Armada - Forumul webmasterilor adulți).

Alte solicitări de informații

defini: Interogarea define: va oferi o definiție a cuvintelor pe care le introduceți după aceasta, compilată din diverse surse online. Definiția va fi pentru întreaga frază introdusă (adică va include toate cuvintele din interogarea exactă).

stocuri: Dacă începeți o interogare cu acțiuni: Google va trata restul termenilor de interogare ca simboluri de stoc și va trimite către o pagină care afișează informațiile pregătite pentru acele caractere.
De exemplu, stocuri: intel yahoo va afișa informații despre Intel și Yahoo. (Rețineți că trebuie să imprimați caractere de știri de ultimă oră, nu numele companiei)

Modificatori de solicitare

site: Dacă includeți site: în interogarea dvs., Google va limita rezultatele la site-urile web pe care le găsește în domeniul respectiv.
De asemenea, puteți căuta zone individuale, cum ar fi ru, org, com etc ( site:com site:ru)

allintitle: Dacă executați o interogare cu allintitle:, Google va limita rezultatele cu toate cuvintele de interogare din titlu.
De exemplu, allintitle: căutare pe google va returna toate paginile de căutare Google, cum ar fi imagini, blog etc

titlu: Dacă includeți intitle: în interogarea dvs., Google va restricționa rezultatele la documentele care conțin acel cuvânt în titlu.
De exemplu, titlu: Afaceri

allinurl: Dacă executați o interogare cu allinurl: Google va limita rezultatele cu toate cuvintele de interogare din adresa URL.
De exemplu, allinurl: căutare pe google va returna documentele cu google si va cauta in titlu. De asemenea, opțional, puteți separa cuvintele cu o bară oblică (/), apoi cuvintele de pe ambele părți ale barei oblice vor fi căutate în aceeași pagină: Exemplu allinurl: foo/bar

inurl: Dacă includeți inurl: în interogarea dvs., Google va limita rezultatele la documentele care conțin acel cuvânt în adresa URL.
De exemplu, Animație inurl:site-ul web

în text: caută numai în textul paginii cuvântul specificat, ignorând titlul și textele linkurilor și alte lucruri care nu au legătură cu. Există, de asemenea, un derivat al acestui modificator - allintext: acestea. în plus, toate cuvintele din interogare vor fi căutate numai în text, ceea ce este de asemenea important, ignorând cuvintele utilizate frecvent în linkuri
De exemplu, intext:forum

interval de date: căutări în intervale de timp (interval de date: 2452389-2452389), datele pentru timp sunt specificate în format Julian.

Ei bine, și tot felul de exemple interesante de solicitări

Exemple de compilare de interogări pentru Google. Pentru spammeri

inurl:control.guest?a=semn

Site:books.dreambook.com „Adresa URL a paginii de pornire” „Semnați-mi” inurl:semn

Site: www.freegb.net Pagina principală

Inurl:sign.asp „Numărul de caractere”

„Mesaj:” inurl:sign.cfm „Expeditor:”

inurl:register.php „Înregistrarea utilizatorului” „Site web”

Inurl:edu/carte de oaspeți „Semnați cartea de oaspeți”

Inurl:post „Postează comentariu” „URL”

Inurl:/archives/ „Comentarii:” „Îți amintești informațiile?”

„Script și carte de oaspeți create de:” „URL:” „Comentarii:”

inurl:?action=adăugați „phpBook” „URL”

Titlu: „Trimiteți o poveste nouă”

Reviste

inurl:www.livejournal.com/users/mode=reply

inurl greatestjournal.com/mode=reply

Inurl:fastbb.ru/re.pl?

inurl:fastbb.ru /re.pl? "Cartea de oaspeti"

Bloguri

Inurl:blogger.com/comment.g?”postID”„anonim”

Inurl:typepad.com/ „Postați un comentariu” „Îți amintești informațiile personale?”

Inurl:greatestjournal.com/community/ „Postează comentariu” „adrese de afișe anonimi”

„Postează comentariu” „adrese ale afișelor anonime” -

Titlu: „Postează comentariu”

Inurl:pirillo.com „Postează comentariu”

Forumuri

Inurl:gate.html?” name=Forums” „mode=reply”

inurl:”forum/posting.php?mode=reply”

inurl:”mes.php?”

inurl:”members.html”

inurl:forum/memberlist.php?”

Datorită World Wide Web, aproape oricine poate furniza informații pe Internet într-o formă plăcută ochiului și potrivită pentru o largă răspândire. Fără îndoială că ați navigat pe Internet și ați văzut alte site-uri și, probabil, știți până acum că acronimele înfricoșătoare precum „HTTP” și „HTML” sunt doar abrevieri pentru „Web” și „o modalitate de a exprima informații pe Internet”. Poate că aveți deja ceva experiență în prezentarea de informații pe Internet.

Internetul s-a dovedit a fi un mediu ideal pentru distribuirea informațiilor, așa cum o demonstrează imensa popularitate și dezvoltarea masivă. În timp ce unii au pus sub semnul întrebării utilitatea Internetului și au atribuit dezvoltarea și popularitatea lui pe scară largă în principal hype-ului, Internetul este, fără îndoială, un mediu important pentru prezentarea tuturor tipurilor de informații. Nu numai că există multe servicii de furnizare de informații actualizate (știri, vreme, evenimente sportive în timp real) și materiale de referință în formă electronică, există și cantități semnificative de date de alt fel. IRS, care a distribuit toate formularele fiscale din 1995 și alte informații prin World Wide Web, a recunoscut recent că a primit e-mailuri de la fani de pe site-ul său web. Cine ar fi crezut că IRS-ul va primi vreodată e-mailuri ale fanilor? Nu pentru că site-ul său a fost bine conceput, ci pentru că s-a dovedit 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, pentru că oferă o interfață hipermedia pentru date. Luați în considerare hard diskul computerului dvs. De obicei, datele sunt exprimate liniar, similar unui sistem de fișiere. De exemplu, aveți un număr de foldere, iar în interiorul fiecărui folder sunt fie documente, fie alte foldere. Web-ul folosește o paradigmă diferită pentru a exprima informația numită hipermedia. Interfața hipertext constă dintr-un document și link-uri. 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 și alte tipuri de media, cum ar fi grafica, sunete, videoclipuri (de unde și denumirea de „hipermedia”). Evidențierea 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ă partajeze date imediat 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 furnizarea de informații este extrem de importantă, în ultimii câțiva ani mulți au considerat că obținerea de informații este la fel de importantă.

În timp ce Web-ul oferă o interfață hipermedia unică pentru informații, există multe altele. moduri eficiente distribuția datelor. De exemplu, servicii de rețea precum File Transfer Protocol (FTP) și grupul de știri „Gopher” existau cu mult înainte de apariția World Wide Web. E-mailul a fost mijlocul principal de comunicare și schimb de informații prin Internet și majoritatea celorlalte rețele aproape de la începutul acestor rețele. De ce a devenit Internetul o modalitate atât de populară de a distribui informații? Aspectul multimedia al Internetului a adus o contribuție tangibilă 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 informații de la utilizatori ș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 posibilitățile de calcul în general: informațiile interactive. De exemplu, în loc să forțezi utilizatorul să răsfoiască mai multe documente ca și cum ar răsfoi o carte sau un dicționar, ar fi mai bine să îi permită utilizatorului să identifice cuvintele cheie care îi interesează. Utilizatorii pot personaliza modul în care sunt prezentate datele, 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 interacționa 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 un document. Acest software rulează continuu, așteptând astfel de solicitări și răspunzând în consecință.

Deși serverele pot trimite și primi date, funcționalitatea serverului în sine este limitată. De exemplu, cel mai primitiv server poate trimite doar fișierul solicitat 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 pe lângă 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 care se potrivesc decât dacă această capacitate a fost programată în server într-un fel.

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 lucra interactiv cu utilizatorii care vă accesează site-ul. La nivel teoretic, CGI vă permite să extindeți capacitatea serverului de a analiza (interpreta) intrarea din browser și de a returna informații pe baza intrărilor 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, ar trebui să modificați singur serverul. Această soluție este nedorită deoarece necesită o înțelegere a nivelului inferior al programării rețelei Internet Protocol. De asemenea, ar necesita editarea și recompilarea codului sursă al serverului sau scrierea unui server personalizat pentru fiecare sarcină. Să presupunem că doriți să extindeți serverul pentru a acționa ca un gateway Web-to-e-mail (Web-to-e-mail), luând intrarea utilizatorului din browser și trimițând-o prin e-mail unui alt utilizator. Codul ar trebui să fie injectat în server pentru a analiza intrarea din browser, a-l trimite prin e-mail unui alt utilizator și a trimite răspunsul înapoi la 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 este aplicabil numai pentru un 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 ușoară 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, este posibil să scrieți un program în orice limbaj de mașină care interfață și comunică cu un server Web. Acest program va funcționa cu toate serverele Web care înțeleg protocolul CGI.

Comunicarea CGI se realizează prin intrare și ieșire standard, ceea ce înseamnă că, dacă știți să tipăriți și să citiți datele folosind limbajul dvs. 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 un program „Hello, World!”, utilizați funcțiile de imprimare ale limbajului dvs. și formatul definit pentru programele CGI pentru a imprima mesajul corespunzător.

Alegerea unui limbaj de programare

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

  • print to stdout
  • 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 un limbaj interpretat precum Perl sau Rexx necesită uneori încărcarea unui interpret mare la pornire. În plus, puteți distribui coduri binare (cod tradus în limbajul mașinii) fără cod sursă dacă limba dvs. este traducabilă. Distribuirea scripturilor interpretate î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ă evaluați beneficiile vitezei și eficienței unui limbaj de programare cu ușurința de a programa altul. Dacă doriți să învățați o altă limbă, în loc să folosiți una 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, dar puternic, potrivit în special pentru analizarea textului. În timp ce 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 anumite aplicații. Programele C sunt mai mici, mai eficiente și oferă control al sistemului de nivel inferior, dar sunt mai dificil de programat, nu au rutine ușoare de procesare a textului încorporate și sunt mai dificil de depanat.

Care este limbajul cel mai potrivit pentru programarea CGI? Cel pe care îl consideri mai convenabil pentru tine în ceea ce privește programarea. Ambele sunt la fel de eficiente pentru programarea aplicațiilor CGI și, cu bibliotecile adecvate, ambele au capacități similare. Cu toate acestea, dacă aveți un server greu accesibil, puteți utiliza programe mai mici compilate C. Dacă aveți nevoie să scrieți rapid o aplicație care necesită multă muncă de procesare a textului, puteți utiliza în schimb 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 de obicei mai eficiente decât programele CGI. Alte servere includ funcționalități încorporate care pot gestiona elemente speciale non-CGI, cum ar fi împerecherea 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), cum ar fi Java. Va deveni rapid CGI învechit în fața unor schimbări atât de rapide în tehnologie?

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, cum ar fi Java, să înlocuiască CGI, deoarece există unele aplicații pentru care aplicațiile server sunt mult mai potrivite pentru a rula.
  • Multe dintre restricțiile CGI sunt restricții HTML sau HTTP. Pe măsură ce standardele Internet în general evoluează, la fel evoluează și capabilitățile CGI.

rezumat

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

Capitolul 2. Bazele

În urmă cu câțiva ani, am creat o pagină pentru o facultate de la Harvard, unde puteți trimite comentariile dvs. despre ele. La acea vreme, internetul era tânăr și documentația era puțină. Eu, ca mulți alții, m-am bazat pe documentație concisă și pe un sistem de programare creat 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 ridicat multe întrebări, a fost foarte eficientă. Acest capitol este rodul muncii mele timpurii cu CGI (cu câteva rafinamente, 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 cum să programeze aplicații CGI destul de complexe, așa cum am învățat eu și alții în urmă cu câțiva ani.

Scopul acestui capitol este de a prezenta elementele de bază ale CGI într-un mod cuprinzător, deși concis. Fiecare concept discutat aici este prezentat în detaliu în capitolele următoare. Cu toate acestea, după ce ați studiat acest capitol, puteți începe imediat programarea aplicațiilor CGI. Odată ce ați atins acest nivel, puteți afla dezavantajele 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: obținerea de informații din browserul Web și trimiterea informațiilor înapoi către browser. Acest lucru este 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, pentru a-și introduce numele. Odată ce utilizatorul completează formularul și apasă Enter, aceste informații sunt trimise programului CGI. Programul CGI trebuie apoi să convertească aceste informații în ceea ce înțelege, să le prelucreze în mod corespunzător și apoi să le trimită înapoi în browser, fie că este o simplă confirmare sau rezultatul unei căutări multifuncționale în baza de date.

Cu alte cuvinte, programarea CGI necesită înțelegerea modului de obținere a intrărilor de la un browser 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ă; după ce înveți cum să lucrezi cu intrare și ieșire, asta este practic 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 și servere Web;
  • Intrare CGI: Interpretarea informațiilor trimise de browserul Web. Familiarizarea cu unele biblioteci de programare utile pentru analizarea unei astfel de intrări;
  • Un exemplu simplu: acoperă toate lecțiile din acest capitol;
  • Strategia de programare.

Datorită naturii acestui capitol, voi atinge doar puțin câteva subiecte. Nu vă faceți griji; toate aceste subiecte sunt tratate mult mai profund în alte capitole.

Salut Lume!

Începeți cu o sarcină de programare introductivă tradițională. Veți scrie un program care va afișa „Hello, World!” pe browserul dvs. web. Înainte de a scrie acest program, trebuie să înțelegeți ce informații așteaptă browserul Web de la programele CGI. De asemenea, trebuie să știți cum să rulați acest program pentru a-l 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";tipărește" Salut Lume!"; imprimare "\n";tipărește" \n";tipărește"

Salut Lume!

\n";tipărește" \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 corect se numește cgi-bin . Acum, apelați programul din browserul dvs. web. Pentru majoritatea, aceasta înseamnă deschiderea următorului URL (Uniform Resource Locator):

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 doriți înapoi către browser (pagină HTML, grafică sau sunet), dar mai întâi trebuie să spuneți browserului ce fel de date le trimiteți. Această linie îi 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 este întotdeauna necesar să utilizați extensia .cgi cu numele programului dvs. CGI. Cu toate că sursă folosește, de asemenea, extensia .cgi pentru multe limbi, nu este folosită pentru a desemna un tip de limbă, dar este o modalitate prin care serverul poate identifica fișierul ca fișier executabil, mai degrabă decât un fișier imagine, fișier HTML sau fișier text. Serverele sunt adesea configurate pentru a încerca doar să execute acele fișiere care au această extensie în timp ce afișează conținutul tuturor celorlalte. Deși utilizarea extensiei .cgi este opțională, 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 programelor CGI față de limbi, Lista 2.2 arată echivalentul C al programului hello.cgi.

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 tipărirea conținutului „: text/html\n\n”; În timp ce versiunea C folosește Printf(" Content-Type: text/html\r\n\r\n ");

De ce Perl tipărește instrucțiunea cu două linii noi (\n), în timp ce C printf se termină cu două întoarceri de cărucior și o linie nouă (\r\n)?

În mod oficial, anteturile (toate ieșirile înainte de linia goală) ar trebui 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ă, nu ca o întoarcere la cărucior.

Deși excepția \rs din Perl este incorectă din punct de vedere tehnic, va funcționa în aproape toate protocoalele și este, de asemenea, portabilă pe toate platformele. Prin urmare, în toate exemplele Perl din această carte, folosesc linii noi pentru a separa antetele, nu întoarcerile de cărucior ș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 limbă 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 limba cu care vă simțiți cel mai confortabil. (Alegerea limbajului de programare este discutată mai detaliat în Capitolul 1 „Common Gateway Interface (CGI)”).

Ieșire CGI

Acum putem arunca o privire mai atentă asupra problemei trimiterii de informații către browserul web. Din exemplul „Hello, World!”, 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 conținutului: linia) și informațiile reale (ce sunt afișate pe Browser web). Aceste două blocuri de informații sunt separate printr-o linie goală.

Antetul se numește antet HTTP. Oferă detalii importante despre informațiile pe care browserul le va primi. Există mai multe tipuri diferite de anteturi HTTP, iar cel mai generic este cel pe care l-ați folosit anterior: Content-Type: 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 descris 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 un antet Content-Type:.

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

Tip de conținut: 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 este oferită î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 prezentare a informațiilor tip conținut. Puteți citi mai multe despre MIME în RFC1521. RFC-urile de pe Internet înseamnă „Solicitări 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/plan simplu Fișiere text simplu Fișiere imagine/gif GIF Fișiere grafice Imagine/jpeg Fișiere grafice comprimate JPEG Fișiere audio/de bază Sun audio *.au Fișiere audio/x-wav Windows* wav

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 oferite î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 familiarizat cu diferitele servere pentru diferite platforme mai mult sau mai puțin în detaliu, 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, regiunea serverului se numește ServerRoot și regiunea documentului este DocumentRoot. Pe mașinile UNIX, ServerRoot este de obicei în /usr/local/etc/httpd/ și DocumentRoot este de obicei în /usr/local/etc/httpd/htdocs/. Cu toate acestea, acest lucru nu contează 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

Configurare server pentru CGI

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

  • Director desemnat. Unele servere vă permit să specificaț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 sunt pre-configurate pentru a permite ca toate fișierele care se termină în .cgi să fie definite ca CGI.

Metoda directorului desemnat este oarecum un rest (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, prevenind aglomerarea altor directoare.
  • Nu sunteți limitat la o anumită extensie de nume de fișier, așa că puteți denumi fișierele așa cum doriți. Unele servere permit ca mai multe directoare diferite să fie desemnate ca directoare CGI.
  • De asemenea, vă oferă mai mult control asupra cine poate scrie 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 revizui mai întâi programul din motive de securitate, puteți desemna doar acele fișiere dintr-un director restricționat, 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 mari probleme cu protectie.

Indicarea CGI printr-o extensie de nume 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 printr-o extensie de nume de fișier, deși nu toate sunt configurate în acest fel în mod implicit.

Avertizare

Țineți cont de problemele de securitate când vă configurați serverul pentru CGI. Câteva sfaturi vor fi acoperite aici, iar Capitolul 9, Securizarea CGI, discută 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ă corect. Serverul dvs. web va rula în mod normal ca un utilizator inexistent (adică utilizatorul UNIX nobody - un cont care nu are permisiuni de fișier și nu poate fi conectat). Scripturile CGI (indiferent dacă sunt scrise în Perl, în shell Bourne sau în alt limbaj de scripting) trebuie să fie executabile și lizibile în întreaga lume.

Cheie

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

Dacă utilizați un limbaj de scripting, cum ar fi Perl sau Tcl, includeț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ă un interpret (perl sau binarul Tcl Wish în directorul /cgi-bin. Acest lucru creează un risc de securitate pentru sistemul dvs. Acest lucru este tratat mai detaliat în Capitolul 9.

Unele servere UNIX universale

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 stocate de fapt 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. Oricum, trebuie să editați o linie în fișierul srm.conf 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ă arate astfel:

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 de gazdă al serverului dvs. Web și programname este numele CGI.

De exemplu, să presupunem că ați copiat 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 .cgi ca CGI, trebuie să editați două fișiere de configurare. În primul rând, în fișierul srm.conf, nu comentați următoarea linie:

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

Aceasta va asocia tipul MIME CGI cu extensia .cgi. Acum, trebuie să modificăm fișierul access.conf, astfel încât să putem executa 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; mai multe detalii despre aceasta sunt descrise în documentația serverului.

Instalarea CGI pe Windows

Majoritatea serverelor disponibile pentru Windows 3.1, Windows 95 și Windows NT sunt configurate cu o metodă de „extensie de nume de fișier” pentru recunoașterea CGI. În general, schimbarea 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ă. Pe DOS sau Windows, nu veți putea specifica un interpret pe prima linie a unui script, așa cum ați face pe UNIX. Unele servere sunt preconfigurate pentru a asocia anumite extensii de nume de fișiere cu interpretul. De exemplu, multe servere web Windows presupun că fișierele care se termină în .pl sunt scripturi Perl.

Dacă serverul nu implementează 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 unui server UNIX, nu instalați interpretul nici în directorul cgi-bin, nici în orice director accesibil Web.

Instalarea CGI pe un Macintosh

Cele mai faimoase 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 Macintosh (cu o extensie .cgi) vor menține ocupat serverul Web până când CGI-ul se termină de execuție, forțâ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 să folosească extensia .acgi în loc de extensia .cgi ori de câte ori este posibil. Ar trebui să funcționeze cu majoritatea programelor CGI; dacă nu funcționează, redenumiți programul în .cgi.

Execuție CGI

Odată ce ați instalat CGI, există mai multe moduri de a-l executa. Dacă CGI-ul dvs. este un program numai de ieșire, cum ar fi Hello, World!, atunci îl puteți executa prin simpla accesare a adresei URL.

Majoritatea programelor rulează ca o aplicație server într-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.

Tutorial rapid despre formularele HTML

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

ș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. . Pentru un ghid complet și un link către formulare HTML, consultați Capitolul 3, HTML și formulare.

Etichetă

Etichetă este utilizat pentru a determina ce parte a fișierului HTML trebuie utilizată pentru informațiile introduse de utilizator. Aceasta se referă la modul în care majoritatea paginilor HTML invocă un program CGI. Atributele etichetei definesc numele și locația programului - fie local, fie ca URL completă, tipul de codificare utilizat și metoda de transfer de date utilizată de program.

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

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

Atributul ENCTYPE nu are 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. După ce utilizatorul completează formularul și furnizează informații, toate informațiile sunt codificate și transmise programului CGI. Programul CGI decide singur chestiunea decodării și procesării informațiilor; acest aspect este tratat în „Acceptarea intrării browserului”, 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 informațiile sunt transmise programului 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 finală

pentru a marca 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 diferite locuri; acest aspect este discutat pe larg în capitolul 3.

Etichetă

Puteți crea benzi 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 definește 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 a terminat de completat formularul, el sau ea poate trimite conținutul acestuia la adresa URL specificată de atributul ACTION al formularului făcând clic pe butonul Trimitere.

Se acceptă introducerea din browser

Mai sus au fost date exemple de scriere 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). O capacitate mai importantă a CGI este de a primi informații de la browser, o caracteristică care face Web-ul interactiv.

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

  • În primul rând, primește diverse informații despre browser (tipul său, ce poate naviga, 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 informații introduse de utilizator. Aceste informații, după ce au fost codificate de browser, sunt trimise fie printr-o variabilă de mediu (metoda GET), fie prin intrare standard (metoda stdin POST).

variabile de mediu

Este util să știți ce variabile de mediu sunt disponibile pentru un program CGI, atât pentru învățare, 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 clientului. REMOTE_HOST Gazdă a gazdei mașinii clientului. 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 Lungimea 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ții de intrare atunci când sunt trimise 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 o cale relativă în 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 respective.
  • Afișează rezultatele pentru 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 va îndeplini scopul.

Lista 2.3. Programul Perl, env.cgi, care scoate toate variabilele de mediu CGI.

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

Mediu CGI

\n"; foreach $env_var (chei %ENV) (printează " $env_var= $ENV($env_var)
\n"; ) printează " \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 o cantitate mare de date, deoarece nu există restricții privind cantitatea de informații trimise, iar cu metoda GET, spațiul media este limitat. GET are însă un specific 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 atribuie un nume simbolic. Valoarea introdusă de utilizator este reprezentată ca valoare a variabilei.

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

  • Separă câmpuri 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 de caractere hexazecimale din două cifre.

Șirul dvs. final codificat va arăta astfel:

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

Notă: specificațiile pentru codificarea URL sunt în RFC1738.

De exemplu, să presupunem că aveți un formular care cere un nume și o vârstă. Codul HTML care a fost folosit pentru a afișa acest formular este afișat în Lista 2.5.

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

nume si varsta

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

Analiza intrărilor

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 trebuie să vă gândiți niciodată la cum să analizați intrarea, deoarece mai multe persoane au scris deja biblioteci disponibile public care fac parsare. 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. Disponibil avantaj evidentîn utilizarea unui limbaj care are structuri de date încorporate precum Perl; cu toate acestea, majoritatea bibliotecilor pentru limbaje de nivel inferior, cum ar fi C și C++, includ execuția unei structuri de date și a unei subrutine.

Nu este necesar să se realizeze o înțelegere completă a bibliotecilor; este mult 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 tablourile asociative ale lui 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”, vă puteți referi la matricea asociativă $input(„nume”). În mod similar, pentru a vă referi la 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 link-uri 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 plasează în lista legată */ read_cgi_input(&input);

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

#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 șirul de vârstă. Deși acest lucru complică programarea, este totuși important din punct de vedere al securității. Mai multe despre asta în capitolul 9.

Un simplu program CGI

Sunteți pe cale să scrieți un program CGI numit nameage.cgi care se ocupă de formularul „nume/vârstă”. Prelucrarea datelor (ceea ce eu de obicei numesc „material intermediar”) este minimă. Nameage.cgi pur și simplu decodifică intrarea și afișează numele de utilizator și vârsta. Deși nu este deosebit de 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 descris mai sus, apelând câmpurile „nume și vârstă”. Nu vă faceți griji pentru robustețe și eficiență încă; rezolva problema dată în 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";tipărește" nume si varsta\n";tipărește"\n";tipărește" \n"; printează "Bună ziua," . $input("nume") . ". Ai\n"; print $input("varsta") . " ani.

\n";tipărește" \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 si varsta\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"); )

Rețineți că aceste două programe sunt aproape echivalente. Ambele conțin rutine de analiză care iau o singură linie și procesează toate intrările (mulțumită rutinelor de bibliotecă corespunzătoare). Rezultatul 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 Trimiteți.

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 capacitatea dumneavoastră generală 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 descoperi 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 randate 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 potrivește tuturor formelor.

Acoperind toate aspectele de bază ale CGI, v-am furnizat suficiente informații pentru a începe cu programarea CGI. Cu toate acestea, pentru a fi 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 discută în detaliu acele aspecte care au fost menționate pe scurt în acest capitol, precum și strategiile de dezvoltare a aplicațiilor, avantajele și limitările protocolului.

rezumat

Acest capitol a acoperit pe scurt elementele de bază ale programării CGI. Creați rezultate prin formatarea corectă a datelor și prin imprimare în stdout. Obținerea intrării CGI este puțin mai complicată, deoarece trebuie analizată înainte de a putea fi utilizată. Din fericire, există deja mai multe biblioteci care fac analiza.

Până acum, ar trebui să vă simțiți destul de confortabil cu programarea aplicațiilor CGI. Restul acestei cărți este dedicat unei prezentări mai detaliate a specificațiilor, indicii și strategiilor de programare pentru aplicații mai avansate și mai complexe.

Pentru a obține un rezultat fiabil, analiza trebuie efectuată la cel puțin 2 săptămâni după ultima doză de antibiotice și (sau) medicamente antibacteriene.

  • răzuind din uretra se recomanda a lua 2 ore dupa ultima urinare, de la faringe și nazofaringe - pe stomacul gol (4-5 ore după ultima masă, deși este necesar să excludeți spălatul pe dinți și clătirea gurii), nu este necesară nicio pregătire specială pentru alți loci.
  • Urină. Studiul este supus unei porțiuni medii de urină eliberată liber, în cantitate de 3-5 ml într-un recipient steril de unică folosință din plastic (recipientul poate fi obținut la recepție) după o toaletă amănunțită a organelor genitale externe fără utilizarea de antiseptice. . Timp de livrare la laborator la temperatura camerei - 1-2 ore, la o temperatură de 2-8 ° C - 5-6 ore.
  • Sperma pentru examinarea bacteriologică se colectează într-un recipient steril din plastic de unică folosință cu gura largă prin masturbare (recipientul se poate obține de la recepție). Timpul de livrare a materialului la laborator la temperatura camerei în 1-2 ore.
  • Indiferenţă se recomanda colectarea dimineata, pe stomacul gol, dupa igienizarea cavitatii bucale, intr-un vas steril de plastic. Timpul de livrare a materialului la laborator la temperatura camerei in 1-2 ore, la temperatura de 2-8°C - 5-6 ore.
  • Gard secretia prostatei efectuată de un medic urolog, după un masaj preliminar al prostatei (aceasta manipulare se efectuează numai la Oficiul Central). Înainte de a lua secreția glandei prostatei, se recomandă abstinența sexuală timp de cel puțin 2 zile.
  • Cercetări bacteriologice lapte matern . Prelevarea de probe de lapte matern se efectuează numai înainte de hrănirea copilului sau la două ore după alăptare. Pacienta examinată spală glanda mamară stângă și dreaptă cu apă caldă și săpun și șterge cu un prosop curat. Suprafața mameloanelor și a vârfurilor degetelor sunt tratate cu un tampon de bumbac moderat umezit cu 70% Alcool etilic. Prima porție de lapte matern, aproximativ 0,5 ml, se aruncă. Apoi, fără a atinge mamelonul cu mâinile, femeia exprimă 0,5 - 1 ml de lapte din fiecare glandă într-un recipient steril separat (recipientele pot fi obținute la recepție). Timp de livrare la laborator la temperatura camerei - 1-2 ore, la temperatura de 2-8°C - 5-6 ore.
  • Gard cu lichid novial pentru examinarea bacteriologică, se efectuează de către un medic în vase sterile din plastic (recipientul poate fi obținut la recepție). În laborator, această procedură nu este efectuată. Timpul de livrare a materialului la laborator la temperatura camerei in 1-2 ore, la temperatura de 2-8°C - 5-6 ore.
  • Gard scurgerea plăgii pentru examinarea bacteriologică se efectuează de către un medic, într-un recipient de unică folosință cu mediu Ames (containerul se poate obține la recepție). Timpul de livrare a materialului la laborator la temperatura camerei în 6 ore, la o temperatură de 2-8°C - până la 2 zile.
  • Bilă pentru examenul bacteriologic, se recoltează în timpul sondajului, separat, în porțiunile A, B și C în trei tuburi sterile, sau în timpul operației cu o seringă într-un tub, cu respectarea regulilor de asepsie (această procedură nu se efectuează în laborator) . Timpul de livrare a materialului la laborator la temperatura camerei in 1-2 ore, la temperatura de 2-8°C - 5-6 ore.

„Proiectat de: PHPLD site-ul dvs.” „Trimite articol” „Produs de ArticleMS” „Trimite articol” „Meniul principal” „Ultimele articole” „Designer: Director Astralinks” „Trimite articol” „Trimite articole” „Autentificare pentru membri” „Cele mai populare Articole" "Feeduri RSS articole" "Câmpurile marcate cu un asterisc sunt obligatorii" joomla "Designer: Șabloane PHPLD gratuite" "Trimite articol" "Articole RSS" "Comentarii RSS" "Articole recente" "Autorizare" "Nume de utilizator:" "Parolă: " "Ține-mă minte" "Înregistrează-te" "Ți-ai pierdut parola?" "Startseite? Weblogs? Weblog von" "RSS Feeds" "Adaugă-ne la favorite" "Fă-ne pagina ta de pornire" "Trimite articole" "Legături regulate cu reciproce" Inurl articol:"/access/unauthenticated" Forumuri "Șablon de DevHunters. com" "Adăugați articol" "Proudly powered by WordPress and BuddyPress" "Designer: Free PHPLD Templates" "Add article" "Această întrebare este pentru a testa dacă sunteți un vizitator uman și pentru a preveni trimiterile automate de spam" "Pentru a valida linkul reciproc Vă rugăm să includeți următorul cod HTML în pagina de la adresa URL” „Adăugați articol” „Comunicate aleatorii de presă” „Scriptul de comunicate de presă” inurl:”/blogs/load/recent” „Articolul săptămânii” „Directorul articolelor Toate drepturile rezervate. " „Proiectat de: PHPLD site-ul dvs.” „Trimite articol” „Informații Alexa” „Detalii listă” „URL LISTARE” „Statistici site” „Adăugați articol” „Proiectat de One Way Links” „Adăugați articol” „Vă invităm să verificați catalogul nostru de articole din categoriile din stânga dvs. și asigurați-vă că adăugați acest site la favorite!" „Designer: Șabloane PHPLD” „Adăugați articol” „Mai multe informații despre formatele de text” „Evaluați autorul: Actual:” „Produs de: php Link Directory” „Adăugați articol” „Site-uri, conținut inacceptabil și câteva motive pentru care trimiterile nu sunt aprobate: „ „Adăugați articol” „Șablon de Yazzoo” „Adăugați articol” „Temă de la: Romow Web Directory” „Trimiteți articol” „Produs de WordPress + Plugin pentru directorul articolelor” „Temă de: Web Directory” „Trimiteți articol” „Articole RSS” „Comentarii RSS” „Articole recente” „Produs de: Director de linkuri php” „Adăugați articol” „%E8%AB%8B%E6%BA%96%E7%A2%BA%E5%A1%AB%E5%85% A5%E6%82%A8%E7%9A%84%E9%83%B5%E7%AE%B1%EF%BC%8C%E5%9C%A8%E5%BF%98%E8%A8%98% E5%AF%86%E7%A2%BC%EF%BC%8C%E6%88%96%E8%80%85%E6%82%A8%E4%BD%BF%E7%94%A8%E9% 83%B5%E4%BB%B6%E9%80%9A%E7%9F%A5%E5%8A%9F%E8%83%BD%E6%99%82%EF%BC%8C%E6%9C% 83%E7%99%BC%E9%80%81%E9%83%B5%E4%BB%B6%E5%88%B0%E8%A9%B2%E9%83%B5%E7%AE%B1% E3%80%82" "Utilizarea pluginului Articole Directory" "Acest director de linkuri folosește sesiuni pentru a stoca informații" "Adăugați articol" "Meniu Blog" "Creați blog" " Blogurile mele" "PHPmotion" "PHPLD CLUB - TEME GRATUITE PENTRU VOI" "Adăugați articol" "Skinned by: Web Design Directory" "Adăugați articol" "Șablon de Yazzoo" "Adăugați articol" "Șablon de DevHunters.com" "Adăugați articol " "Nu ai permisiunea de a comenta. Dacă vă autentificați, este posibil să puteți comenta” „Șablon prin șabloane PHPLD gratuite” „Adăugați articol” „Sponsorizat de: Webmaster Sfaturi și trucuri / Descărcați GRATUIT teme phpLD” „Trimiteți articol” „Temă după: Director web” „Adăugați Articol" "Folosiți articolele din directorul nostru de pe site-ul dvs. pentru a oferi vizitatorilor dvs." "Produs de: Director de linkuri php" "Trimiteți articol" "Sprijinit de oferta pentru poziție" "Adăugați articol" "Temă de: Director web Romow" "Trimiteți Articol" "Sprijinit de oferta pentru poziție" "Trimite articol" "Sprijinit de oferta pentru poziție" "Adăugați articol" "Sponsorizat de: Webmaster Sfaturi și trucuri / Descarcă GRATUIT teme phpLD" "Trimite articol" "Designed by Mitre Design and SWOOP" „Trimite articol” „Temă după: Director web” „Adăugați articol” „Acasă Videoclipuri Audio” Bloguri phpmotion „Șablon de DevHunters.com” „Trimiteți articol” „Proiectat de: Director web cu invitații” „Adăugați articol” „Autori înregistrați în director de articole" "Director de linkuri PHP" "Adăugați articol" "Sponsorizat de: Webmaster Sfaturi și trucuri / Descărcați GRATUIT teme phpLD " "Adăugați articol" "Powered by Articol Tabloul de bord" "Anmelden oder Registrieren um Kommentare zu schreiben" "Startseite ? Weblog-uri" "Dezvoltat de Hutbazar" "Adăugați articol" Acasă Membrii RSS "au creat grupul" "Vă rugăm să creați un cont pentru a începe." "Powered By: Article Friendly Ultimate" inurl:"/wp-login.php?action=register " "Designer: Șabloane PHPLD" "Trimite articol" "produs de joomla" "adăugați o nouă postare" "Designed by One Way Links" "Adăugați articol" "Pentru a valida linkul reciproc, vă rugăm să includeți următorul cod HTML în pagina de la adresa URL " "Trimite articol" "Sponsorizat de Directhoo" "Adaugă articol" "Șablon de: Emilie Premium Directory" "Trimite articol" "Există * articole publicate și * autori înregistrați" inurl:"/node/1" "Sunteți aici" „Publicați-vă articolul în format RSS pentru ca alte site-uri să fie sindicat” „Șablon de Yazzoo” „Trimite articol” „Produs de PHPLD” „Trimite articol” „Articolele cu orice greșeală de ortografie sau gramaticală vor fi șterse” „SCRIPT DE DIRECTOR DIN PHP DIRECTOR DE LINK " "Adăugați un articol" inurl:submitguide.php "trimiteți articole" "Selectările editorilor" "Scriptul de comunicat de presă" "Adăugați articol" "Directorul de linkuri PHP" Acasă „Înscriere gratuită” „Trimite articol” „Despre noi” „Contactați-ne” „Căutare pe site” „Autentificare autor” „Informații Alexa” „Detalii listă” „Adresa URL LISTARE” „Statistici site” „Adăugați articol” „Acest director de link-uri folosește sesiuni pentru a stoca informații” „Adăugați articol” „Designat de: PHPLD Site-ul dvs.” „Adăugați articol” „Trimiteți articole” „Dacă nu aveți încă un cont, vă puteți înregistra aici. " "designed by AskGraphics.com" "Submit article" inurl:"/user/profile.php?id=" moodle "Cele mai apreciate comunicate de presă" "Press Release Script" "Nu trimite articole cu greșeli de ortografie și gramatică proastă" „Temă de: Romow Web Directory” „Adăugați articol” „Utilizați caseta de căutare Articole pentru a găsi articole pe o serie de subiecte” „Sponsorizat de Directhoo” „Adăugați articol” „Director de linkuri PHP” inurl:”submit_article.php” „Acest lucru autorul a publicat * articole până acum. Mai multe informații despre autor vor veni în curând.” „Produs de PHPLD” „Trimite articol” „Produs de PHPmotion” - Script video gratuit „Produs de: Director de link-uri php” „Trimite articol” „Ați dori să vă trimitem un articol zilnic rezumat despre articole noi în fiecare zi” „Autori experți” „Directorul articolelor Toate drepturile rezervate.” „Directorul linkurilor PHP” „Adăugați articol” „Decorat de: Director de design web” „Trimiteți articol” Pagina de pornire a subiectului „Permiteți comentarii” „Permiteți urmăriri” „Maximum de atașamente” „Bloguri de acasă” „Autentificați-vă sau înregistrați-vă pentru a posta comentarii” „PHPLD CLUB - TEME GRATUITE PENTRU VOI” „Trimiteți articol” „Trimiteți linkul” Prețuri „Introduceți codul afișat” „Acest lucru ajută la prevenirea înregistrărilor automate.” „ Trimiteți Articol" "Proiectat de: Invitație Web Directory" "Trimite articol" "Șablon de: Emilie Premium Directory" "Adăugați articol" "Acest director de linkuri folosește sesiuni pentru a stoca informații" "Trimite articol" "Pentru a preveni trimiterile automate de spam, lăsați acest câmp gol " Țara "Oraș/oraș" "Ultimul acces" "Nu sunteți autentificat" "Wordpress A Scriptul directorului articolului" "Directorul linkurilor PHP" "Adăugați articol" "Articole live" "Directorul articolelor Toate drepturile rezervate." "Detalii articol" "Trebuie să fiți conectat pentru a lăsa o evaluare" "Trebuie să fiți autentificat pentru a lăsa un comentariu „ „Designed by One Way Links” „Trimiteți articol” „Designed by: Invitation Web Directory” „Adăugați articol” „Șablon de: Emilie Premium Directory” „Trimiteți articolul” „Conținutul acestui câmp este păstrat privat și nu va fi afișat în mod public” „Designat de: Artiști futuriști” „Adăugați articol” „Designer: Director Astralinks” „Trimiteți articol” „Site-uri, conținut inacceptabil și câteva motive pentru care trimiterile nu sunt aprobate:” „Adăugați articol” „Comunicate de presă fierbinți” „Comunicat de presă” Script" "Anunțați-mă cu privire la noile postări prin e-mail" inurl:"populararticles.php" "Chipul sau imaginea dvs. virtuală" "Trimiteți articolul" "Directorul de linkuri PHP" "Trimis de" "Autentificați-vă sau înregistrați-vă pentru a posta comentarii" "Căutați acest site :" "Detalii articol" "Trebuie să fii autentificat pentru a lăsa o evaluare" "Trebuie să fii autentificat pentru a lăsa un comentariu" "Wordpre Scriptul directorului articolelor ss" "Directorul de link-uri PHP" "Trimite articol" "produs de vbulletin" "Postări recente pe bloguri" "Trimite articole" inurl:"submitart.php" "Designed By: Invitation Web Directory" "Trimite articol" "Trimite articole" " "Total articole" "Total autori" "Total descărcări" "Designed by Mitre Design and SWOOP" "Add article" "Designed by: Futuristic Artists" "Submit article" "Puteți seta detaliile configurațiilor componente făcând dublu clic pe fundal, text , imagini sau citate” „Categorii de comunicate de presă” „Script de comunicate de presă” „Designat de: PHPLD Site-ul dvs.” „Adăugați articol” „Sponsorizat de Directhoo” „Trimiteți articol” „Termeni și condiții pentru autor” „Termeni și condiții pentru editori” „ Disclaimer" "Ne rezervăm dreptul de a include publicitate pe paginile cu articolele dvs." "powered by phpmotion" Bloguri inurl:"login.php" "Înscrieți-vă acum pentru a vă trimite propriile articole" Acasă "Adăugați articol" "Ultimele linkuri" "Top Hits" " "Produs de ArticleMS de la ArticleTrader.com" "Trimis de Anonim" "Autentificați-vă sau înregistrați-vă pentru a posta comentarii" „Cele mai populare articole” „Directorul articolelor Toate drepturile rezervate. " "Skinned by Addictive Games" "Trimite articol" "Termeni de utilizare" "Acesta este o demonstrație numai pagina ." "themes/default/templates/generic_terms.htm" "Trimite link-ul" Preț "Introduceți codul afișat" "Acest lucru ajută la prevenirea înregistrărilor automate." "Adăugați articol" "Skinned by Addictive Games" "Trimiteți articol" inurl:"login2submitart .php" "Există * articole publicate și * autori înregistrați în directorul nostru de articole." "Evaluați acest articol: Actual:" Subject inurl:"act=dispBoardWrite" inurl:"login.php" "Autentificați-vă pentru a accesa panoul de control al autorului „ „Trimiteți linkul” Prețuri „Introduceți codul afișat” „Acest lucru ajută la prevenirea înregistrărilor automate.” „Trimiteți articol” moodle „profil public” „Oferiți o parolă pentru noul cont în ambele câmpuri Parola trebuie să fie cel puțin” „Pentru a valida link reciproc vă rugăm să includeți următorul cod HTML în pagina de la adresa URL” „Adăugați articol” „Skinned by Addictive Games” „Adăugați articol” „Mai multe informații despre opțiunile de formatare” „Designed by One Way Links” „Trimiteți articol” „Informații Alexa” „ „Detalii listă” „URL LISTE” „Statistici site” „Trimite articol” „designed by AskGra phics.com" "Adăugați articol" "Prin publicarea articolelor pline de informații, vă veți bucura în curând" inurl:"submitarticles.php" "Powered by Press Release Script" "Înscriere" "Vă rugăm să completați acest formular, iar noi" vă vom trimite un e-mail de bun venit pentru a vă verifica adresa de e-mail și pentru a vă conecta.” Forumuri „Designer: șabloane PHPLD gratuite” „Adăugați articol” inurl:”/blog/index.php?postid=" moodle „Dezvoltat de Hutbazar” „Trimiteți articol” „Designer: Director Astralinks” „Adăugați articol” „Publicați-vă articolul în Format RSS pentru alte site-uri web de sindicat” Acasă „Trimite articol” „Ultimele link-uri” „Cele mai bune rezultate” „Șablon de la DevHunters.com” Link „Trimite articol”: „www.articledashboard.com” „Autentifică-te la contul tău” „Autentifică-te la accesați panoul de control al autorului” „Nu aveți un cont?” „Sursa dvs. unică pentru articole gratuite. Aveți nevoie de conținut de adăugat pe site-ul dvs.?" „Produs de PHPLD” „Adăugați articol” „Rândurile și paragrafele se întrerup automat” „Articole aprobate recent” „Directorul articolelor Toate drepturile rezervate.” „Șablon de la: PHPmotionTemplates.com” „ Blog inteligent” „Adăugați o postare nouă” „Director de linkuri PHP” inurl:”submit_article.php” „SCRIPT DE DIRECTOR PRIN DIRECTOR DE LINKURI PHP” „Adăugați articol” „Sprijinit de oferta pentru poziție” „Trimiteți articol” „Director de linkuri PHP” „Trimiteți Articol" "SCRIPT DE DIRECTOR PRIN PHP LINK DIRECTORY" "Trimite articol" "Dezvoltat de Hutbazar" "Trimite articol" "Sponsorizat de: Webmaster Sfaturi și trucuri / Descarcă GRATUIT teme phpLD" "Adaugă articol" "Articole fierbinți" "Directorul articolelor Toate drepturile rezervat." "Powered Free by PHPmotion" Bloguri "Anunta-ma cand sunt postate comentarii noi" "Pentru a valida link-ul reciproc, va rugam sa includeti urmatorul cod HTML in pagina la adresa URL" "Trimite articol" "Acum sunt * Articole excelente in baza noastră de date de la * autori" "Acest director de linkuri folosește sesiuni pentru a stoca informații" „Trimiteți articolul” „încărcați-vă articolele și fiți la curent cu articolele noi. „ Acasă „Adăugați articol” „Ultimele link-uri” „Cele mai bune accesări” „Site-uri inacceptabile, conținut și câteva motive pentru care trimiterile nu sunt aprobate:” „Trimiteți articol” „Drepturi de autor * vBulletin Solutions” „Creați blog” „Șablon prin șabloane PHPLD gratuite” „Adăugați articol” „Comunicat de presă al săptămânii” „Scriptul comunicatului de presă” „Șablon prin șabloane PHPLD gratuite” „Trimiteți articol” „încărcați articolele și fiți la curent cu articolele noi.” „CLUB PHP – TEME GRATUITE PENTRU VOI” „Adăugați Articolul" "Postează comentarii la articol" "Directorul articolelor Toate drepturile rezervate." "Creează un cont nou Conectați-vă Solicitați o nouă parolă" "Utilizați articolele din directorul nostru de pe site-ul dvs. pentru a furniza vizitatorilor dvs." "SCRIPT DE DIRECTOR PRIN PHP LINK DIRECTORY" "Trimiteți Articol" "Produs de WordPress ž Utilizarea pluginului Director de articole" "Skinned by Addictive Games" "Adăugați articol" "Aprobat recent" "Scriptul de comunicat de presă" "Selectările editorilor" "Directorul articolelor Toate drepturile rezervate." "Informații Alexa" "Detalii listă" " "Adresa URL de LISTARE" "Statistici site" "Trimite articol" "Șablon de: Director Emilie Premium” „Adăugați articol” „Software de asistență de la Zendesk” Forumuri „Designat de: Artiști futuriști” „Adăugați articol” „Nu sunteți autentificat. (Autentificare)" Țara "Oraș/Oraș" "Pagină web" "Articole aleatorii" "Directorul articolelor Toate drepturile rezervate." "Proiectat de Mitre Design și SWOOP" "Adăugați articol" "Dezvoltat de Hutbazar" "Adăugați articol" „Contactați-ne " "Aceasta este doar o pagină demonstrativă." "themes/default/templates/generic_contactus.htm" "Site-uri, conținut inacceptabil și câteva motive pentru care trimiterile nu sunt aprobate:" "Trimiteți articol" "Grup public" "Termeni de căutare populari" " Termeni de căutare recenti" "Produs de UCenter Acasă" "Designer: Șabloane PHPLD" "Trimite articol" "Bine ați venit!" "Trimiterea articolului" "Noile noastre articole" "Produs de: Articole prietenoase" "total articole" "Designer: Șabloane PHPLD" „Adăugați articol” „Șablon prin șabloane PHPLD gratuite” „Trimiteți articol” „Temă după: Director web” „Trimiteți articol” „Dacă ați angajat un scriitor fantomă, sunteți de acord că ați” „designat de AskGraphics.com” „Trimiteți Articol” „Designer: Director Astralinks” „Adăugați articol” „Designat de: Artiști futuriști” „Trimiteți articol” „Autori experți” „Scriptul comunicatului de presă” „Despre aut sau" "Postări recente" "Adăugați un comentariu nou" "Design site-ul web și dezvoltat de ArticleBeach" "Skinned by: Web Design Directory" "Trimiteți articolul" "Oferiți o parolă pentru noul cont în ambele câmpuri" "Designed by Mitre Design și SWOOP " "Trimiteți articol" "Iată cele mai populare 100 de articole despre" "Scriptul articolului - Powered By Article Marketing" "Trimiteți articolele" "Vă rugăm să vă autentificați pentru a scrie un comentariu" "adăugați o postare nouă" "Autentificați-vă pentru a posta conținut nou pe forum. " "Produs de Drupal" "software de asistență" inurl:"/entries/" "Scriptul directorului articolelor Wordpress" "Directorul linkurilor PHP" "Trimiteți articolul" "Adăugați articol" "Directorul linkurilor PHP" "Trimiteți linkul" Prețul „Introduceți codul afișat" "Acest lucru ajută la prevenirea înregistrărilor automate." "Adăugați articol" "Directorul de linkuri PHP" "Trimiteți articolul" "Creați-vă propria adresă personală, astfel încât prietenii și familia să vă poată găsi!" "Articole cele mai evaluate" "Directorul articolelor Toate drepturile rezervate ." "Decorat de: Web Design Directory" "Adăugați articol" "Legături obișnuite cu reciproce" Articolul "Șablon de Yazzoo" "Trimiteți articol" "Trimiteți articol" "Director de linkuri PHP" "Temă de: Romow Web Directory" "Adăugați articol" " "PHPLD CLUB - TEME GRATUITE PENTRU VOI" "Trimiteți articolul" Acasă "Trimiteți articolul" "Ultimele link-uri" "Top Hits" "Bine ați venit la directorul articolelor *. Aici puteți găsi informații interesante și utile despre cele mai populare teme." "Despre noi" "Aceasta este doar o pagină demonstrativă." "themes/default/templates/generic_aboutus.htm" "Cei mai noi autori" "Bine ați venit la noii noștri autori!" „Ca membru veți putea” „Deci ce așteptați?” „Înregistrați-vă acum pentru a începe, este distractiv și este GRATUIT!” Bloguri „Designer: șabloane PHPLD gratuite” „Trimiteți articol” „Wordpress Scriptul directorului articolelor” „Directorul linkurilor PHP” „Adăugați articol” „Articole suplimentare de la” „Postate de Anonim (neverificat)” „proiectat de AskGraphics.com” „Adăugați articol” „Conectați-vă pentru a accesa panoul de control al autorului” „Înscrieți-vă acum pentru a trimite propriile articole" "Această întrebare este pentru a testa dacă sunteți sau nu un vizitator uman și pentru a preveni trimiterile automate de spam" inurl:"/node/2" "Sunteți aici" "Fă publicitate cu noi" "Acesta este o demonstrație numai pe pagină." "themes/default/templates/generic_advertise.htm" "Sponsorizat de Directhoo" Link "Trimite articol": www.articletrader.com "Produs de vBulletin" "Creează blog" "Powered de PHPLD" "Adăugați articol" inurl:"/node/3" "Sunteți aici" "Proiectat și dezvoltat de ArticleBeach" "Produs de Articol Tabloul de bord" inurl:submitarticles.php inurlopulararticles.php "Produs de: Articol Friendly" inurl: submitguide.php "trimite articole" "Produs de ArticleMS" "Utilizarea pluginului Articole Directory" "Alăturați-vă acum pentru a vă promova afacerea, a găsi parteneri, a construi relații și a vă reconecta cu comunitatea. Sincronizare cu Facebook Twitter Email SMS și multe altele” „este un serviciu de micro-blogging bazat pe instrumentul Free Software Laconica.” „Profiluri externe” „Ultimul online” „Despre mine” „Note publice” Întrebări frecvente Contact „Interfață mobilă” „ce sunt faci" "grupuri" "Cele mai populare" "Toate grupurile" "Ai uitat parola? " "Powered By" "revou" "Alăturați-vă acum pentru a vă promova afacerea, a găsi parteneri, a construi relații și a vă reconecta cu comunitatea. Sincronizați cu Facebook Twitter E-mail SMS și multe altele” „Întâmpinați probleme la autentificare?” „Note publice” „tot timpul” „luna trecută” „afișați actualizările imaginii” „afișați actualizările textului” inurl:"/recentupdates.php?m=" „Rulează software-ul de microblogging StatusNet” „este un serviciu de microblogging bazat pe instrumentul Free Software StatusNet.” „alăturați-vă conversației” „cod imagine” „înregistrați-vă mai jos.” „utilizatorii pot comunica folosind actualizări rapide de stare de 160 de caractere sau mai puțin." "Acest dialog care curge liber vă permite să trimiteți mesaje, imagini și videoclipuri oricui" "Înscrieți-vă cu adresa dvs. de e-mail. Există deja * membri înregistrați." „Textul și fișierele mele sunt disponibile sub Creative Commons Attribution 3.0, cu excepția acestor date private: parolă, adresă de e-mail, adresă IM și număr de telefon." grupuri „Cele mai populare” „Toate grupurile” „Am uitat parola?" "Produs de" "Software ReVou" "Lăsați mesajele mele să fie vizibile pentru toți utilizatorii, nu doar pentru prietenii mei" "Powered by Sharetronix" "Powered by Jisko" "Cu acest formular puteți crea un cont nou. Apoi puteți posta notificări și puteți crea un link cu prietenii și colegii." "Cu acest formular vă puteți crea un cont nou. Apoi puteți posta notificări și puteți crea linkuri către prieteni și colegi." „Textul și fișierele mele sunt disponibile sub Creative Commons Attribution 3.0, cu excepția acestor date private: parolă, adresă de e-mail, adresă IM și număr de telefon." „Numele dvs. (fără spațiu între litere și cuvinte)" "Produs de Blogtronix" "produs de script Twitter" "Drepturi de autor * Script Twitter" "Rulează software-ul de microblogging Laconica" "Produs de * Script" inurl:"/recentupdates.php" "Produs de Script Scritter „ „Imagine atașată: „ „Produs de Blogtronix” „Note publice” „Termeni și condiții” „Versiune normală” „De asemenea, este ușor să găsiți și să vă conectați cu alte persoane pentru fire private și să urmăriți actualizările acestora.” „ Note publice" "Versiune normală" "Autentificare" "Alimentat de software-ul ReVou" inurl:"Special:UserLogin" wiki inurl:":UserLogin" "Temă: Feb12" "primul" "anterior" "1-20 din" "următorul" inurl:groups inurl:"http://wiki." "Pagini comentate recent" "CategoryWiki" inurl:"title=Lietot%C4%81ja_diskusija:" "Activat MoinMoin" "HTML valid 4.01 " inurl:"Utilizator:" wiki inurl:"title=Utilizator:" wiki "Deze pagina este cea mai recentă" "Deze pagina este" "Aanmelden / registeren" "MoinMoin Powered" "GPL licensed" inurl:"title=% D0%9E%D0%B1%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%B5%D0%BD%D0%BD%D1%8F_%D0%BA%D0% BE%D1%80%D0%B8%D1%81%D1%82%D1%83%D0%B2%D0%B0%D1%87%D0%B0:" "DokuWiki acceptă un limbaj simplu de marcare" "Ce este Fierbinte" "Modificări recente" "Evenimente viitoare" "Etichete" inurl:"title=Diskuse_s_u%C5%BEivatelem:" "Server Mac OS X - Wikis" inurl:"title=%E0%A6%AC%E0%A7% 8D %E0%A6%AF%E0%A6%AC%E0%A6%B9%E0%A6%BE%E0%A6%B0%E0%A6%95%E0%A6%BE%E0%A6%B0% E0 %A7%80_%E0%A6%86%E0%A6%B2%E0%A6%BE%E0%A6%AA:" inurl:"tiki-forums.php" inurl:"User_talk:" wiki "Veți găsi mai multe pagini utile din categoria Wiki sau din PageIndex" inurl:"title=Kasutaja_arutelu:" inurl:"title=%E5%88%A9%E7%94%A8%E8%80%85%E2%80%90 % E4%BC%9A%E8%A9%B1:" inurl:"Spezial:Anmelden" wiki "Thčme: Strasa - Mono" inurl:"title=Diskuse_s_wikistou:" "Colaborare cu crearea de documente online, editi ng, și comentarii. " "Conectează-te la pagina mea" "wikis" inurl:/wiki/dokuwiki inurl:"wiki/RecentlyCommented" inurl:"http://mediawiki." inurl:"title=%E5%88%A9%E7%94% A8%E8%80%85%E3%83%BB%E3%83%88%E3%83%BC%E3%82%AF:" inurl:"%ED%8A%B9%EC%88%98%EA %B8%B0%EB%8A%A5:%EB%A1%9C%EA%B7%B8%EC%9D%B8" wiki inurl:"title=%D7%A9%D7%99%D7%97%D7 %AA_%D7%9E%D7%A9%D7%AA%D7%9E%D7%A9:" "Tema: Eatlon" "Nu există comentarii pe această pagină." "Numele dvs. de gazdă este" "XHTML valid" "Valid CSS" inurl:"title=%D8%A8%D8%AD%D8%AB_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1:" inurl:"title=Usuario:" inurl :"/wikka.php?wakka=UserSettings" "ce linkuri aici" "modificări aferente" "pagini speciale" inurl:"title=%E0%B8%84%E0%B8%B8%E0%B8%A2%E0% B8%81%E0%B8%B1%E0%B8%9A%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%8A%E0%B9% 89:" intitle:"Server Mac OS X" "Produs de TikiWiki CMS/Groupware v2" "Această pagină a fost modificată ultima dată" "Această pagină a fost accesată" "Autentificare/creare cont" "Pagină imuabilă" Atașamente de informații „Există momentan nu există text în această pagină, puteți căuta titlul acestei pagini i n alte pagini sau editați această pagină." "Driven by DokuWiki" "Vă mulțumim pentru instalarea TikiWiki!" inurl:"title=Special:UserLogin" "Diese Seite wurde zuletzt am" "Diese Seite wurde bisher" "Anmelden / Benutzerkonto erstellen" inurl:"Utilizator:" wiki inurl:groups "conectare la pagina mea" "actualizări" "wiki-uri" "bloguri" "calendar" "e-mail" "Temă: Ohia" "Produs de TikiWiki" FrontPage RecentChanges FindPage Help Contents inurl:" title=Th%E1%BA%A3o_lu%E1%BA%ADn_Th%C3%A0nh_vi%C3%AAn:" inurl:"title=Szerkeszt%C5%91vita:" inurl:"/wikka/UserSettings" "Ce e tare" " Modificări recente" Inurl "Evenimente viitoare":"%C4%90%E1%BA%B7c_bi%E1%BB%87t:%C4%90%C4%83ng_nh%E1%BA%ADp" URL wiki:"%D0 %A3 %D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:" wiki inurl:"title=Pembicaraan_Pengguna:" inurl:"wiki/index.php? title= „(!LANG: wiki inurl:"title=%E0%A4%B8%E0%A4%A6%E0%A4%B8%E0%A5%8D%E0%A4%AF_%E0%A4%B5%E0%A4%BE%E0%A4%B0%E0%A5%8D%E0%A4%A4%E0%A4%BE:" inurl:"title=Benutzer_Diskussion:" "Theme: Fivealive" inurl:"title=Diskusia_s_redaktorom:" "What’s Hot" "Recent Changes" "Upcoming Events" "Tags" "Edited" inurl:"tiki-index.php" inurl:"title=%D0%A0%D0%B0%D0%B7%D0%B3%D0%BE%D0%B2%D0%BE%D1%80_%D1%81%D0%B0_%D0%BA%D0%BE%D1%80%D0%B8%D1%81%D0%BD%D0%B8%D0%BA%D0%BE%D0%BC:" inurl:"title=Bruger_diskussion:" inurl:"Especial:Registre_i_entrada" wiki inurl:"title=Usuari_Discussi%C3%B3:" inurl:"title=Overleg_gebruiker:" inurl:"title=%CE%A3%CF%85%CE%B6%CE%AE%CF%84%CE%B7%CF%83%CE%B7_%CF%87%CF%81%CE%AE%CF%83%CF%84%CE%B7:" "Make sure to whitelist this domain to prevent registration emails being canned by your spam filter!" inurl:"Especial:Userlogin" wiki inurl:"%E4%BD%BF%E7%94%A8%E8%80%85:" wiki inurl:"title=Usuario_discusi%C3%B3n:" inurl:"title=Brugerdiskussion:" "Theme: Jqui" inurl:"title=Brukerdiskusjon:" "wiki is licensed under" "What’s Hot" "Recent Changes" inurl:"tiki-login.php" inurl:"Special:Inloggning" wiki "MoinMoin Powered" inurl:"Speci%C3%A1ln%C3%AD:P%C5%99ihl%C3%A1sit" wiki inurl:"Speci%C3%A1lis:Bel%C3%A9p%C3%A9s" wiki inurl:"title=Anv%C3%A4ndardiskussion:" inurl:"Special:Whatlinkshere" "pageindex" "recentchanges" "recentlycommented" inurl:"/RecentlyCommented" site:.edu "forums register" site:.edu "register iam over 13 years of age forum" site:.edu "discussion board register" site:.edu "bulletin board register" site:.edu "message board register" site:.edu "phpbb register forum" site:.edu "punbb register forum" site:.edu "forum signup" site:.edu "vbulletin forum signup" site:.edu "SMF register forum" site:.edu "register forum Please Enter Your Date of Birth" site:.edu "forums - Registration Agreement" site:.edu "forum Whilst we attempt to edit or remove any messages containing inappropriate, sexually orientated, abusive, hateful, slanderous" site:.edu "forum By continuing with the sign up process you agree to the above rules and any others that the Administrator specifies." site:.edu "forum In order to proceed, you must agree with the following rules:" site:.edu "forum register I have read, and agree to abide by the" site:.edu "forum To continue with the registration procedure please tell us when you were born." site:.edu "forum I am at least 13 years old." site:.edu "Forum Posted: Tue May 05, 2009 8:24 am Memberlist Profile" site:.edu "View previous topic:: View next topic forums" site:.edu "You cannot post new topics in this forum" site:.edu "proudly powered by bbPress" site:.edu "bb-login.php" site:.edu "bbpress topic.php" site:.edu "Powered by PunBB viewforum.php" site:.edu "Powered by PunBB register.php" site:.edu "The Following User Says Thank You to for this post" site:.edu "BB code is On" site:.edu "Similar Threads All times are GMT +1? site:.edu "If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post" site:.edu "Hot thread with no new posts" site:.edu "Thread is closed" site:.edu "There are 135 users currently browsing forums." site:.edu "forums post thread" site:.edu "forums new topic" site:.edu "forums view thread" site:.edu "forums new replies" site:.edu "forum post thread" site:.edu "forum new topic" site:.edu "forum view thread" site:.edu "forum new replies" site:.edu "add topic" site:.edu "new topic" site:.edu "phpbb" site:.edu "view topic forum" site:.edu "add message" site:.edu "send message" site:.edu "post new topic" site:.edu "new thread forum" site:.edu "send thread forum" site:.edu "VBulletin forum" site:.edu "Quick Reply Quote message in reply?" site:.edu "Currently Active Users: 232 (0 members and 232 guests)" site:.edu "Currently Active Users: members and guests" site:.edu "Forums Posting Statistics Newest Member" site:.edu "Users active in past 30 minutes: SMF" site:.edu "Users active in past 30 minutes: Most Online Today Most Online Ever" site:.edu "Most Online Today Most Online Ever Forums" site:.edu "Currently Active Users: 18 (0 members and 18 guests)" site:.edu "Users active today: 15478 (158 members and 15320 guests)" site:.edu "Threads: 673, Posts: 7,321, Total Members: 376? site:.edu "Add this forum to your Favorites List! Threads in Forum:" site:.edu "Threads in Forum Hot thread with no new posts" site:.edu "powered by vbulletin" site:.edu "powered by yabb" site:.edu "powered by ip.board" site:.edu "powered by phpbb" site:.edu "powered by phpbb3? site:.edu "powered by invision power board" site:.edu "powered by e-blah forum software" site:.edu "powered by xmb" site:.edu "powered by: fudforum" site:.edu "powered by fluxbb" site:.edu "powered by forum software minibb" site:.edu "this forum is powered by phorum" site:.edu "powered by punbb" site:.edu "powered by quicksilver forums" site:.edu "powered by seo-board" site:.edu "powered by smf" site:.edu "powered by ubb.threads" site:.edu "powered by the unclassified newsboard" site:.edu "powered by usebb forum software" site:.edu "powered by xennobb" site:.edu "powered by yaf" site:.edu "Powered By MyBB" site:.edu "Powered by IP.Board" site:.edu "powered by phpbb" site:.edu "forums post thread" site:.edu "forums new topic" site:.edu "forums view thread" site:.edu "forums new replies" site:.edu "forum post thread" site:.edu "forum new topic" site:.edu "forum view thread" site:.edu "forum new replies" site:.edu "forum" site:.edu "phorum" site:.edu "add topic" site:.edu "new topic" site:.edu "phpbb" site:.edu "yabb" site:.edu "ipb" site:.edu "posting" site:.edu "add message" site:.edu "send message" site:.edu "post new topic" site:.edu "new thread" site:.edu "send thread" site:.edu "vbulletin" site:.edu "bbs" site:.edu "intext:powered by vbulletin" site:.edu "intext:powered by yabb" site:.edu "intext:powered by ip.board" site:.edu "intext:powered by phpbb" site:.edu "inanchor:vbulletin" site:.edu "inanchor:yabb" site:.edu "inanchor:ip.board" site:.edu "inanchor:phpbb" site:.edu "/board" site:.edu "/board/" site:.edu "/foren/" site:.edu "/forum/" site:.edu "/forum/?fnr=" site:.edu "/forums/" site:.edu "/sutra" site:.edu "act=reg" site:.edu "act=sf" site:.edu "act=st" site:.edu "bbs/ezboard.cgi" site:.edu "bbs1/ezboard.cgi" site:.edu "board" site:.edu "board-4you.de" site:.edu "board/ezboard.cgi" site:.edu "boardbook.de" site:.edu "bulletin" site:.edu "cgi-bin/ezboard.cgi" site:.edu "invision" site:.edu "kostenlose-foren.org" site:.edu "kostenloses-forum.com" site:.edu "list.php" site:.edu "lofiversion" site:.edu "modules.php" site:.edu "newbb" site:.edu "newbbs/ezboard.cgi" site:.edu "onlyfree.de/cgi-bin/forum/" site:.edu "phpbbx.de" site:.edu "plusboard.de" site:.edu "post.php" site:.edu "profile.php" site:.edu "showthread.php" site:.edu "siteboard.de" site:.edu "thread" site:.edu "topic" site:.edu "ubb" site:.edu "ultimatebb" site:.edu "unboard.de" site:.edu "webmart.de/f.cfm?id=" site:.edu "xtremeservers.at/board/" site:.edu "yooco.de" site:.edu "forum" site:.edu "phorum" site:.edu "add topic" site:.edu "new topic" site:.edu "phpbb" site:.edu "yabb" site:.edu "ipb" site:.edu "posting" site:.edu "add message" site:.edu "send message" site:.edu "post new topic" site:.edu "new thread" site:.edu "send thread" site:.edu "vbulletin" site:.edu "bbs" site:.edu "cgi-bin/forum/" site:.edu "/cgi-bin/forum/blah.pl" site:.edu "powered by e-blah forum software" site:.edu "powered by xmb" site:.edu "/forumdisplay.php?" site:.edu "/misc.php?action=" site:.edu "member.php?action=" site:.edu "powered by: fudforum" site:.edu "index.php?t=usrinfo" site:.edu "/index.php?t=thread" site:.edu "/index.php?t=" site:.edu "index.php?t=post&frm_id=" site:.edu "powered by fluxbb" site:.edu "/profile.php?id=" site:.edu "viewforum.php?id" site:.edu "login.php" site:.edu "register.php" site:.edu "profile.forum?" site:.edu "posting.forum&mode=newtopic" site:.edu "post.forum?mode=reply" site:.edu "powered by icebb" site:.edu "index.php?s=" site:.edu "act=login&func=register" site:.edu "act=post&forum=19? site:.edu "forums/show/" site:.edu "module=posts&action=insert&forum_id" site:.edu "posts/list" site:.edu "/user/profile/" site:.edu "/posts/reply/" site:.edu "new_topic.jbb?" site:.edu "powered by javabb 0.99? site:.edu "login.jbb" site:.edu "new_member.jbb" site:.edu "reply.jbb" site:.edu "/cgi-bin/forum/" site:.edu "cgi-bin/forum.cgi" site:.edu "/registermember" site:.edu "listforums?" site:.edu "forum mesdiscussions.net" site:.edu "version" site:.edu "index.php?action=vtopic" site:.edu "powered by forum software minibb" site:.edu "index.php?action=registernew" site:.edu "member.php?action=register" site:.edu "forumdisplay.php" site:.edu "newthread.php?" site:.edu "newreply.php?" site:.edu "/phorum/" site:.edu "phorum/list.php" site:.edu "this forum is powered by phorum" site:.edu "phorum/posting.php" site:.edu "phorum/register.php" site:.edu "phpbb/viewforum.php?" site:.edu "/phpbb/" site:.edu "phpbb/profile.php?mode=register" site:.edu "phpbb/posting.php?mode=newtopic" site:.edu "phpbb/posting.php?mode=reply" site:.edu "/phpbb3/" site:.edu "phpbb3/ucp.php?mode=register" site:.edu "phpbb3/posting.php?mode=post" site:.edu "phpbb3/posting.php?mode=reply" site:.edu "/punbb/" site:.edu "punbb/register.php" site:.edu "powered by phpbb" site:.edu "powered by punbb" site:.edu "/quicksilver/" site:.edu "powered by quicksilver forums" site:.edu "index.php?a=forum" site:.edu "index.php?a=register" site:.edu "index.php?a=post&s=topic" site:.edu "/seoboard/" site:.edu "powered by seo-board" site:.edu "seoboard/index.php?a=vforum" site:.edu "index.php?a=vtopic" site:.edu "/index.php?a=register" site:.edu "powered by smf 1.1.5? site:.edu "index.php?action=register" site:.edu "/index.php?board" site:.edu "powered by ubb.threads" site:.edu "ubb=postlist" site:.edu "ubb=newpost&board=1? site:.edu "ultrabb" site:.edu "view_forum.php?id" site:.edu "new_topic.php?" site:.edu "login.php?register=1? site:.edu "powered by vbulletin" site:.edu "vbulletin/register.php" site:.edu "/forumdisplay.php?f=" site:.edu "newreply.php?do=newreply" site:.edu "newthread.php?do=newthread" site:.edu "powered by bbpress" site:.edu "bbpress/topic.php?id" site:.edu "bbpress/register.php" site:.edu "powered by the unclassified newsboard" site:.edu "forum.php?req" site:.edu "forum.php?req=register" site:.edu "/unb/" site:.edu "powered by usebb forum software" site:.edu "/usebb/" site:.edu "topic.php?id" site:.edu "panel.php?act=register" site:.edu "a product of lussumo" site:.edu "comments.php?discussionid=" site:.edu "/viscacha/" site:.edu "forum.php?s=" site:.edu "powered by viscacha" site:.edu "/viscacha/register.php" site:.edu "/post?id=" site:.edu "post/printadd?forum" site:.edu "community/index.php" site:.edu "community/forum.php?" site:.edu "community/register.php" site:.edu "powered by xennobb" site:.edu "hosted for free by zetaboards" site:.edu "powered by yaf" site:.edu "yaf_rules.aspx" site:.edu "yaf_topics" site:.edu "postmessage.aspx" site:.edu "register.aspx" site:.edu "post/?type" site:.edu "action=display&thread" site:.edu "index.php" site:.edu "index.php?fid" site:.edu inurl:guestbook inurl: edu guestbook inurl:edu Link:http://worldwidemart.com/scripts/ inurl:"guestBook.aspx" site:edu inurl:guest inurl:guest site:edu inurl:guestbook.html inurl:guestbook.php inurl:kg.php inurl:guestbook.html site:.edu inurl:guestbook.php site:.edu inurl:?agbook=addentry inurl:?show=guestbook&do=add inurl:?t=add inurl:GuestBook/addentry.php inurl:Myguestbook/index.asp inurl:addentry.html inurl:addentry.php inurl:addguest.cgi inurl:addguest.htm inurl:addguest.html inurl:addguest.php inurl:addguest.shtml inurl:apeboard.cgi inurl:apeboard_plus.cgi inurl:apeboard_plus.cgi?command= inurl:ardguest.php?do= inurl:aska.cgi inurl:aspboardpost.asp?id= inurl:bbs.cgi inurl:bbs.cgibbs.cgi? inurl:bbs.cgibbs.cgi?id= inurl:bbs.cgibbs.cgi?mode= inurl:bbs.cgibbs.cgi?page= inurl:bbs.cgibbs.cgi?room= inurl:bbs.cgibbs.php inurl:bbs.cgibbs/mm.php inurl:bbs.cgibbs_inaka.jsp inurl:board.cgi?id= inurl:board.cgi?mode= inurl:book.php inurl:c-board.cgi?cmd= inurl:cbbs.cgi inurl:cbbs.cgi?mode= inurl:cbbs.cgi?mode=new inurl:cf.cgi?mode= inurl:cgi-bin/config.pl inurl:cgi-bin/gbook.cgi inurl:cgi/gbook.cgi inurl:clever.cgi inurl:clever.cgi?mode= inurl:clever.cgi?page= inurl:clip.cgi inurl:combbs.cgi?mode= inurl:comment.htm inurl:comment.php inurl:comment.php?id= inurl:comment_reply.php?com_itemid= inurl:commentaire.php?id= inurl:comments.asp inurl:comments.htm inurl:comments.html inurl:comments.php inurl:comments.php?id= inurl:crazyguestbook.cgi?db= inurl:custombbs.cgi inurl:custreg.asp?action= inurl:cutebbs.cgi inurl:dcguest.cgi?action=add_form inurl:default.asp inurl:default.asp?action= inurl:diary.cgi?mode= inurl:e-guest_sign.pl inurl:e_sign.asp inurl:easyguestbookentry inurl:eguestbook.cgi?Sign inurl:eintrag.htm inurl:eintrag.html inurl:eintrag.php inurl:eintrag.php?id= inurl:eintrag1.php inurl:eintrag_neu.php inurl:eintragen.asp inurl:eintragen.htm inurl:eintragen.html inurl:eintragen.php inurl:eintragen.php?menuid= inurl:eintragen.pl inurl:emfsend.cgi?sc= inurl:entry.php inurl:entry.php?id= inurl:epad.cgi inurl:fantasy.cgi inurl:firebook.cgi inurl:form.php inurl:forum_posts.asp inurl:forum_topics.asp inurl:fpg.cgi inurl:fsguest.html inurl:fsguestbook.html inurl:g_book.cgi inurl:gaeste.php? inurl:gaestebuch.cgi inurl:gaestebuch.htm inurl:gaestebuch.html inurl:gaestebuch.php inurl:gaestebuch.php?action= inurl:gaestebuch.php?action=entry inurl:gaestebuch/ inurl:gaestebuch_lesen.php inurl:gastbok.php inurl:gastbuch.php inurl:gastenboek.html inurl:gastenboek.php inurl:gb.asp inurl:gb.cfm?bookID= inurl:gb.cgi?id= inurl:gb.php inurl:gb.php?action= inurl:gb.php?id= inurl:gb.php?tmpl= inurl:gb.php?user= inurl:gb/ inurl:gb/addrec.php inurl:gb_list.asp inurl:gb_sign.asp inurl:gbadd.php inurl:gbadd.php?action=new&interval=1 inurl:gbaddentry.php inurl:gbook.asp inurl:gbook.html inurl:gbook.php inurl:gbook.php?a= inurl:gbook.php?action= inurl:gbook.php?id= inurl:gbook.php?page=1 inurl:gbook.php?show= inurl:gbook/?page=1 inurl:gbook/gbook.php inurl:gbook2.php inurl:gbook?sign= inurl:gbooksign.asp inurl:gbserver inurl:gbuch.php inurl:gjestebok.php inurl:gjestebok/index.asp inurl:gjestebok/index.pl inurl:gjestebok3.asp inurl:gjesteboken.asp inurl:glight.cgi inurl:goto.php?msgadd inurl:gst_sign.dbm inurl:gstbk_add.php?sid= inurl:guest.asp inurl:guest.cfm inurl:guest.cgi inurl:guest.cgi?action=add_form inurl:guest.cgi?handle= inurl:guest.cgi?pageid= inurl:guest.cgi?site= inurl:guest.htm inurl:guest.html inurl:guest.php inurl:guest.pl inurl:guest/gbook.php inurl:guest_book.htm inurl:guest_book.html inurl:guestadd.html inurl:guestbook inurl:guestbook-add.html inurl:guestbook.asp inurl:guestbook.asp?action= inurl:guestbook.asp?mode= inurl:guestbook.asp?sent= inurl:guestbook.aspx inurl:guestbook.cfm inurl:guestbook.cgi inurl:guestbook.cgi?action= inurl:guestbook.cgi?action=add&aspm1= inurl:guestbook.cgi?id= inurl:guestbook.cgi?start= inurl:guestbook.htm inurl:guestbook.html inurl:guestbook.html?page= inurl:guestbook.mv?parm_func= inurl:guestbook.php inurl:guestbook.php.cgi?gbook= inurl:guestbook.php? inurl:guestbook.php?act= inurl:guestbook.php?action= inurl:guestbook.php?action=add inurl:guestbook.php?cmd= inurl:guestbook.php?do= inurl:guestbook.php?form= inurl:guestbook.php?id= inurl:guestbook.php?inputmask= inurl:guestbook.php?lang= inurl:guestbook.php?mode= inurl:guestbook.php?new_message= inurl:guestbook.php?new_message=1 inurl:guestbook.php?page= inurl:guestbook.php?pg= inurl:guestbook.php?sn= inurl:guestbook.pl inurl:guestbook.pl?action= inurl:guestbook.pl?action=add inurl:guestbook.pl?action=form inurl:guestbook/add.html inurl:guestbook/comment.php?gb_id= inurl:guestbook/index.asp inurl:guestbook/php/entry.php inurl:guestbook/post/ inurl:guestbook2.asp?l= inurl:guestbook_add.php inurl:guestbook_new.php inurl:guestbook_sign.php inurl:guestbook_sign.php?oscsid= inurl:guestbookadd.asp inurl:guestbookvip.php inurl:guestbookvip.php?memid= inurl:guestbox.php?anfangsposition= inurl:guestform.php inurl:guestform.php?gbid=cdg inurl:guestsaisie.php inurl:honey.cgi inurl:honey.cgi?mode= inurl:ibbs.cgi inurl:ibbs.cgi?H=tp&no=0 inurl:ibbs.cgi?page= inurl:imgboard.cgi inurl:index.php3?add=1 inurl:index.php?gbname= inurl:index.php?id=...&item_id= inurl:index.php?p=guestbook!}<=NL&action=add inurl:index.php?page=guestbook_read inurl:joyful. inurl:joyful.cgi inurl:joyfulyy.cgi inurl:jsguest.cgi?action=new inurl:kakikomitai.cgi? inurl:kb_pc.cgi inurl:kboard.cgi inurl:kbpost.htm inurl:kerobbs.cgi inurl:kerobbs.cgi?page= inurl:kiboujoken.htm inurl:kniha.php inurl:krbbs.cgi inurl:ksgosci.php inurl:ksiega.php inurl:ktaiufo.cgi inurl:light.cgi inurl:light.cgi?page= inurl:mboard.php inurl:messageboard.html inurl:messages.php?1=1&agbook=addentry inurl:mezase.cgi inurl:minibbs.cgi inurl:minibbs.cgi?log= inurl:mkakikomitai.cgi inurl:msboard.cgi?id= inurl:msgboard.mv?parm_func= inurl:msgbook.cgi?id= inurl:new.php?forum_id= inurl:new_message.asp inurl:newdefault.asp inurl:newdefault.asp?DeptID= inurl:news.php?subaction= inurl:patio.cgi inurl:petit.cgi inurl:phello.cgi inurl:post.asp inurl:post.htm inurl:post.html inurl:post_comment.php?u= inurl:post_comment.php?w= inurl:postcards.php?image_id= inurl:print_sec_img.php inurl:purybbs.cgi inurl:purybbs.cgi?page= inurl:rabook.php inurl:rbook.cgi inurl:rbook.cgi?page= inurl:read.cgi/gboy/ inurl:read.cgi?board= inurl:reg.php?pid= inurl:resbbs.cgi inurl:schedule.cgi?form= inurl:sendmessage.asp inurl:showguestbook.php?linkid= inurl:sicharou.cgi inurl:sign.asp inurl:sign.asp?PagePosition= inurl:sign.html inurl:sign.php inurl:sign_guestbook.asp inurl:sign_guestbook_form.asp inurl:signbook.cfm inurl:signerbok.asp inurl:signgb.php inurl:signguestbook.asp inurl:signguestbook.html inurl:signguestbook.php inurl:signup.php inurl:simbbs.cgi inurl:skriv.html inurl:skriv_i_gaestebogen.html inurl:spguest.cgi?id= inurl:stlfbbs.cgi inurl:submit.asp inurl:submit.html inurl:submit.php inurl:submit.pl inurl:suggest.php?action= inurl:sunbbs.cgi?mode= inurl:tnote.cgi inurl:treebbs.cgi inurl:ttboard.cgi?act= inurl:upb.cgi inurl:upbbs.cgi inurl:user.php inurl:view.php?id=9&action=new inurl:write.asp inurl:write.php?uid= inurl:wwwboard.cgi inurl:yapgb.php?action= inurl:yuu-fantasy.cgi inurl:yybbs.cgi inurl:zboard.php?id= inurl:0815guestbooks.de inurl:100pro-gaestebuch.de/gbserver/ inurl:12book.de/gaestebuch inurl:Gb/Sign_Guestbook.asp inurl:Gbook/Sign_Guestbook.asp inurl:GuestBook/gst_sign.dbm inurl:Guestbook/Sign_Guestbook.asp inurl:Guestbook_eintrag.htm inurl:Sign_Guestbook.asp inurl:addbook.cgi inurl:addentry inurl:addguest inurl:addguest.html inurl:addguest.php inurl:addguestGB2.cgi inurl:addmessage inurl:apeboard inurl:bbs inurl:burning inurl:epad inurl:feedbook.de inurl:flash_gb9.php?id= inurl:flf-book.de inurl:free-guestbooks.de/gbserver/ inurl:freeguestbook.de/addbook.cgi? inurl:freeguestbook.de/readbook.cgi? inurl:freeguestbook4you.de gaestebuch-umsonst.ws inurl:gaestebuch. inurl:gaestebuch.007box.de inurl:gaestebuch.php inurl:gaestebuch.php? inurl:gaestebuch/neu.php inurl:gaestebuch4u.de inurl:gaestebuchking.de inurl:gastbuch.php inurl:gastbuch.php3 inurl:gastbuch.php?id= inurl:gb.cgi inurl:gb.php?user= inurl:gb.webmart.de inurl:gb.webmart.de/gb.cfm?id= inurl:gb/addguest.html inurl:gb/guest.pl inurl:gb/sign.html inurl:gb2003.de inurl:gb_eintrag.php? inurl:gbook.cgi inurl:gbook.tv inurl:gbook/addguest.html inurl:gbook/guest.pl inurl:gbook/sign.html inurl:gbserver.de inurl:gratis-gaestebuch.de inurl:gratis-gaestebuch.eu/firebook.cgi? inurl:gst_sign.dbm inurl:guessbook/sign.html inurl:guest. inurl:guest.pl inurl:guest_book/guest.pl inurl:guestb inurl:guestbook inurl:guestbook-free.com/books inurl:guestbook-free.com/books2 inurl:guestbook.cgi inurl:guestbook.onetwomax.de inurl:guestbook/a=sign inurl:guestbook/addguest.html inurl:guestbook/guest.pl inurl:guestbook/sign.html inurl:guestbook24.com/gastbuch.php inurl:guestbook24.eu inurl:guestbook4you.de/gb.php? inurl:iboox.com inurl:multiguestbook.com inurl:my-gaestebuch.de inurl:netguestbook.com inurl:new.html#sign inurl:power-guestbook.de inurl:regsign.cgi inurl:sign.fcgi inurl:sign.html inurl:sign_book.cgi inurl:wgbsign.html site:com “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” "post a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:org “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by BlogEngine.NET” "add a comment" -"comments closed" -"you must be logged in" site:com “powered by BlogEngine.NET” "post a comment" site:edu “powered by BlogEngine.NET” "post a comment" site:org “powered by BlogEngine.NET” "post a comment" site:gov “powered by BlogEngine.NET” "post a comment" site:com “powered by BlogEngine.NET” "Leave a comment" site:org “powered by BlogEngine.NET” "Leave a comment" site:edu “powered by BlogEngine.NET” "Leave a comment" site:gov “powered by BlogEngine.NET” "Leave a comment" site:com “powered by BlogEngine.NET” "add a comment" site:org “powered by BlogEngine.NET” "add a comment" site:edu “powered by BlogEngine.NET” "add a comment" site:gov “powered by BlogEngine.NET” "add a comment" site:com “powered by BlogEngine.NET” inurl:blog "post a comment" site:edu “powered by BlogEngine.NET” inurl:blog "post a comment" site:org “powered by BlogEngine.NET” inurl:blog "post a comment" site:gov “powered by BlogEngine.NET” inurl:blog "post a comment" site:com “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:org “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:edu “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:gov “powered by BlogEngine.NET” inurl:blog "Leave a comment" site:com “powered by BlogEngine.NET” inurl:blog "add a comment" site:org “powered by BlogEngine.NET” inurl:blog "add a comment" site:edu “powered by BlogEngine.NET” inurl:blog "add a comment" site:gov “powered by BlogEngine.NET” inurl:blog "add a comment" site:edu "powered by BlogEngine.NET" site:com "powered by BlogEngine.NET" site:gov "powered by BlogEngine.NET" site:org "powered by BlogEngine.NET" “powered by BlogEngine.NET” site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” "post a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:org “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:edu “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:gov “Powered by BlogEngine.NET 1.4.5.0” "add a comment" -"comments closed" -"you must be logged in" site:com “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” "post a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” "Leave a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” "add a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "post a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "Leave a comment" site:com “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:org “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:edu “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:gov “Powered by BlogEngine.NET 1.4.5.0” inurl:blog "add a comment" site:edu "Powered by BlogEngine.NET 1.4.5.0" site:com "Powered by BlogEngine.NET 1.4.5.0" site:gov "Powered by BlogEngine.NET 1.4.5.0" site:org "Powered by BlogEngine.NET 1.4.5.0" “Powered by BlogEngine.NET 1.4.5.0” site:com “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” inurl:blog "post a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” inurl:blog "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” inurl:blog "add a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” "post a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” "Leave a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:org “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:edu “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:gov “powered by expressionengine” "add a comment" -"comments closed" -"you must be logged in" site:com “powered by expressionengine” "post a comment" site:edu “powered by expressionengine” "post a comment" site:org “powered by expressionengine” "post a comment" site:gov “powered by expressionengine” "post a comment" site:com “powered by expressionengine” "Leave a comment" site:org “powered by expressionengine” "Leave a comment" site:edu “powered by expressionengine” "Leave a comment" site:gov “powered by expressionengine” "Leave a comment" site:com “powered by expressionengine” "add a comment" site:org “powered by expressionengine” "add a comment" site:edu “powered by expressionengine” "add a comment" site:gov “powered by expressionengine” "add a comment" site:com “powered by expressionengine” inurl:blog "post a comment" site:edu “powered by expressionengine” inurl:blog "post a comment" site:org “powered by expressionengine” inurl:blog "post a comment" site:gov “powered by expressionengine” inurl:blog "post a comment" site:com “powered by expressionengine” inurl:blog "Leave a comment" site:org “powered by expressionengine” inurl:blog "Leave a comment" site:edu “powered by expressionengine” inurl:blog "Leave a comment" site:gov “powered by expressionengine” inurl:blog "Leave a comment" site:com “powered by expressionengine” inurl:blog "add a comment" site:org “powered by expressionengine” inurl:blog "add a comment" site:edu “powered by expressionengine” inurl:blog "add a comment" site:gov “powered by expressionengine” inurl:blog "add a comment" site:edu "powered by expressionengine" site:com "powered by expressionengine" site:gov "powered by expressionengine" site:org "powered by expressionengine" “powered by expressionengine” inurl:"title=Dyskusja_u%C5%BCytkownika:" inurl:"/wiki/index.php" "Theme: Strasa - Mono" wiki "you only need to fill in when" categorywiki "This is an alphabetical list of pages you can read on this server." "Login/Register" inurl:"title=%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:" inurl:"title=U%C5%BEivatel_diskuse:" "Theme: Fluid Index by Your Index" inurl:"title=Discussion_utilisateur:" "Welcome to MoinMoin. You will find here the help pages for the wiki system itself." "Wiki:About" inurl:"Speciaal:Aanmelden" wiki inurl:"title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:" inurl:"CategoryWiki" inurl:"Especial:Entrar" wiki inurl:"title=Discussioni_utente:" inurl:"/mediawiki/index.php" "The wiki, blog, calendar, and mailing list" inurl:"Istimewa:Masuk_log" wiki inurl:"title=%E4%BD%BF%E7%94%A8%E8%80%85%E8%A8%8E%E8%AB%96:" inurl:"title=%E0%B8%84%E0%B8%B8%E0%B8%A2%E0%B9%80%E0%B8%81%E0%B8%B5%E0%B9%88%E0%B8%A2%E0%B8%A7%E0%B8%81%E0%B8%B1%E0%B8%9A%E0%B8%9C%E0%B8%B9%E0%B9%89%E0%B9%83%E0%B8%8A%E0%B9%89:" inurl:"title=Usu%C3%A1rio_Discuss%C3%A3o:" inurl:"Speciale:Entra" wiki "Powered by WikkaWiki" inurl:"tiki-register.php" "dokuwiki.txt" "Tema: Fivealive - Lemon" inurl:"%E7%89%B9%E5%88%A5:%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3" wiki Categories PageIndex Recent Changes Recently Commented "Login/Register" "" "" "Powered by Tikiwiki CMS/Groupware" inurl:"title=Utilizador_Discuss%C3%A3o:" "Tema: Fivealive" "This page was last modified on" "wiki" inurl:"Specjalna:Zaloguj" wiki "Thanks for installing Wikka! This wiki runs on version" inurl:"http://wikka." "Theme: Coelesce" "Powered By MediaWiki" inurl:wiki "Theme: Fivealive - Kiwi" inurl:"Utente:" wiki "recentchanges" "findpage" "helpcontents" inurl:"Sp%C3%A9cial:Connexion" wiki inurl:"Pengguna:" wiki "MoinMoin Powered" "Python Powered" inurl:"title=%E0%B4%89%E0%B4%AA%E0%B4%AF%E0%B5%8B%E0%B4%95%E0%B5%8D%E0%B4%A4%E0%B4%BE%E0%B4%B5%E0%B4%BF%E0%B4%A8%E0%B5%8D%E0%B4%B1%E0%B5%86_%E0%B4%B8%E0%B4%82%E0%B4%B5%E0%B4%BE%E0%B4%A6%E0%B4%82:" inurl:"U%C5%BCytkownik:" wiki inurl:"Speciel:Log_p%C3%A5" wiki "Powered By MediaWiki" "Powered By MediaWiki" inurl:wiki "what links here" "related changes" "special pages" inurl:Special:Whatlinkshere "There is currently no text in this page, you can search..." "Powered by wikkawiki" inurl:wiki/RecentlyCommented "pageindex" "recentchanges" "recentlycommented" "you only need to fill in when" categorywiki "MoinMoin Powered" "MoinMoin Powered" "Python Powered" "recentchanges" "findpage" "helpcontents" "powered by tikiwiki" "powered by tikiwiki" inurl:tiki-index.php Powered by TikiWiki CMS/Groupware v2 inurl:tiki-register.php

Clientul poate solicita de la serverul web atât un fișier document de pe disc, cât și un document generat dinamic de un program extern (de regulă, în funcție de datele furnizate de utilizator la completarea formularului). Interfața CGI este o specificație pentru interacțiunea dintre un server web și un program extern pe care serverul web îl rulează pentru a procesa o solicitare. (Un program extern, indiferent de natura lui, este adesea denumit script CGI.)

CGI determină modul în care datele furnizate de client într-o solicitare sunt transmise programului, modul în care programul returnează conținutul HTML generat către server și ce variabile de mediu sunt setate de server la pornirea programului. Variabilele de mediu conțin informații suplimentare despre server și cerere (de exemplu, tipul serverului, adresa IP a clientului etc.).

Datele dintr-un formular HTML completat de client pot fi trimise către server prin două metode: GET și POST, aceasta este determinată de parametru metodă eticheta corespunzătoare<metoda formei=... actiune=...>. În primul caz (GET), datele sunt atașate după semnul întrebării la sfârșitul adresei URL specificate în parametru acțiune, în al doilea caz, acestea sunt trimise în corpul cererii - în secțiunea destinată datelor (urmează după toate anteturile și o linie goală). În ambele cazuri, datele sunt codificate în același mod - vezi în continuare. paragraf.

Când este apelat un program CGI, orice se află în corpul cererii este dat programului prin intrare standard și orice se află în URL după ce semnul de întrebare este plasat în variabila de mediu QUERY_STRING. Serverul web nu interpretează sau transformă în niciun fel datele cererii, aceste sarcini sunt atribuite programului CGI.

Programul CGI scrie conținutul răspunsului (de obicei conținut HTML) la ieșirea sa standard, care este interceptată de serverul web pentru a le trimite înapoi către client. Programul CGI trebuie să imprime mai întâi antetul „Content-Type” și să îl separe de date cu o linie goală. De exemplu, rezultatul unui program CGI care generează HTML ar putea arăta astfel:

Tip de conținut: text/html

Salut Lume

Configurarea serverului Apache pentru a executa scripturi CGI

Pentru ca Apache să trateze toate fișierele dintr-un anumit director ca scripturi CGI, trebuie să utilizați directiva

ScriptAlias ​​​​/ virtual/cale/ /cale/către/director/ ScriptAlias ​​​​/cgi-bin/ /usr/local/www/cgi-bin/ Aceasta înseamnă că pentru a procesa o solicitare pentru o adresă URL cum ar fi http://your.server.com/cgi-bin/dir/script, un fișier script din catalog DocumentRoot/cgi-bin/dir/ și /usr/local/www/cgi-bin/dir/script rulează.

Pentru stocarea mixtă a fișierelor de vizualizat și a scripturilor CGI în același director din arbore DocumentRoot dați scripturilor CGI aceeași extensie (de exemplu, „.cgi”) și spuneți serverului să interpreteze astfel de fișiere ca scripturi CGI:

AddHandler cgi-script .cgi Directiva AddHandler poate fi utilizată în orice context de configurare Apache.

Structura URL și codificarea datelor solicitate

Părțile URL numite PATH_INFO și QUERY_STRING sunt esențiale pentru funcționarea programelor CGI. Luați în considerare o solicitare cu o adresă URL similară

http://my.server.com/cgi-bin/dir/prog/a/b?A=1&B=qwerty

Folosind directiva ScriptAlias, dat în paragraful anterior, serverul stabilește că a existat un apel către programul CGI și, pentru a căuta acest program, înlocuiește inițial /cgi-bin/ pe /usr/local/www/cgi-bin/. După adresa URL solicitată, serverul găsește un subdirector în acest director dir, dar subdirector progîn catalog /usr/local/www/cgi-bin/dir nu a fost detectat. În acest caz, serverul presupune că prog- numele programului CGI care urmează să fie executat. Dacă programul /usr/local/www/cgi-bin/dir/prog nu a fost găsit sau nu poate fi executat, serverul returnează clientului o eroare 403, 404 sau 500. În caz contrar, programul prog este rulat, iar restul căii de la URL este /a/b- trecut la programul prog în variabila de mediu PATH_INFO. În acest fel, puteți trece parametri suplimentari programului CGI.

Orice după semnul întrebării A=1&B=qwerty- transmis la prog în variabila de mediu QUERY_STRING. Acestea pot fi date dintr-un formular completat de utilizator, trimise către server folosind metoda GET sau alte informații (serverul nu face nicio presupunere cu privire la interpretarea datelor din QUERY_STRING, aceasta este sarcina apelului program).

Datele din câmpurile de formular completate de utilizator - indiferent de metoda (POST sau GET) prin care sunt trimise către server - sunt codificate după cum urmează:

numele domeniului=field_value&numele domeniului=field_value...

Perechile nume-valoare sunt separate printr-un ampersand. Caracterele alfanumerice și unele semne de punctuație care nu au o semnificație specială (liniuță, liniuță de subliniere) sunt transmise ca atare. Caracterele rămase sunt codificate ca „ %NM ", Unde NM- cod de caractere hexazecimale din două cifre. Un spațiu poate fi trecut ca „%20” sau ca un caracter „+”. Caracterele chirilice trebuie, de asemenea, să fie codificate în modul specificat. Codificarea se face de către browser la trimiterea câmpurilor formularului completat.

De exemplu:

http://my.server.com/cgi-bin/dir/prog?birthday=11%2F05%2F73&name=John+Smith înseamnă că în casetă zi de nastere utilizatorul a introdus „11/05/73”, iar în câmp Nume- John Smith.

Decodificarea datelor din formular este sarcina programului CGI.

Când trimite datele formularului codificate în modul de mai sus folosind metoda POST, clientul trebuie să seteze antetul cererii Content-Type după cum urmează:

Tip de conținut: application/x-www-form-urlencoded

variabile de mediu CGI

Când rulează un script CGI, serverul web setează variabile de mediu suplimentare:

Variabil Sens
AUTH_TYPE

Metoda de autentificare utilizată pentru autentificarea utilizatorului. Vedeți și REMOTE_USER și REMOTE_IDENT.

CONTENT_LENGTH

Lungimea datelor de solicitare în octeți transmise scriptului CGI prin intrare standard.

TIPUL DE CONȚINUT

Tipul MIME al datelor solicitate.

DOCUMENT_ROOT

Directorul rădăcină al arborelui de documente al serverului web (definit de directiva DocumentRoot).

GATEWAY_INTERFACE

Versiunea CGI de utilizat.

HTTP_ACCEPT

O listă de tipuri de date MIME pe care clientul le poate accepta.

HTTP_FROM

Adresa de e-mail a utilizatorului care a făcut cererea (multe browsere nu transmit aceste informații).

HTTP_REFERER
HTTP_USER_AGENT

Browser client.

PATH_INFO PATH_INFO (dacă există) - vezi mai sus „ ”
PATH_TRANSLATED

PATH_INFO convertit într-o cale completă în sistemul de fișiere al serverului (PATH_INFO atașat la DOCUMENT_ROOT).

ȘIR DE INTEROGARE

Solicitați datele transmise ca parte a adresei URL după semnul întrebării - vedeți „ ” mai sus.

REMOTE_ADDR

adresa IP a clientului.

GAZDA LA DISTANTA Numele DNS al clientului.
REMOTE_USER Nume de utilizator autentificat.
REQUEST_METHOD

Metoda de solicitare (GET, POST, HEAD etc.).

SCRIPT_NAME Calea virtuală (de ex. /cgi-bin/program.pl) către scriptul CGI executabil.
NUMELE SERVERULUI Numele DNS al serverului sau, dacă numele nu poate fi determinat, adresa lui IP.
SERVER_PORT

Numărul portului serverului.

SERVER_PROTOCOL Numele și versiunea protocolului prin care a fost făcută cererea (de exemplu, HTTP/1.1).
SERVER_SOFTWARE

Tipul și numărul versiunii software-ului serverului web.

Apache vine cu un script de testare standard, test-cgi, care afișează valorile variabilelor de mediu CGI.

Cookie-uri și alte metode de salvare a stării

Principala problemă la scrierea scripturilor CGI interactive, de exemplu. scripturile ale căror invocări succesive de către același utilizator sunt legate logic între ele este o problemă de persistență a stării. Faptul este că protocolul HTTP consideră că toate solicitările primite către server sunt independente unele de altele. În consecință, după procesarea fiecărei solicitări noi, scriptul CGI își încetează complet activitatea, iar pentru a procesa următoarea cerere, indiferent dacă aparține aceleiași sesiuni logice de utilizator sau nu, scriptul pornește de la zero fără nicio informație despre istoric.

Exemple de situații în care se cere economisirea statului sunt: ​​un proces de înregistrare secvenţial, când solicitantul trebuie să completeze mai multe formulare, următorul formular depinde de rezultatul completării celui precedent; cumpărături online, atunci când utilizatorul colectează cumpărături în coș pe măsură ce se deplasează prin site; teste și chestionare, când utilizatorul răspunde constant la întrebări.

Există mai multe metode de salvare a stării:

  1. cookie-uri - salvare pe computerul clientului,
  2. câmpuri ascunse - stocate în formularul trimis clientului,
  3. salvarea într-un fișier de orice format pe server,
  4. salvarea într-o bază de date care rulează paralel.

Ultimele două metode implementează persistența stării pe partea serverului.

Bază de date

Oricare dintre SGBD-urile disponibile poate acționa ca o bază de date paralelă, pentru accesarea căreia limbajul de programare script are o interfață (Perl are biblioteci care asigură interacțiunea cu toate SGBD-urile obișnuite).

Există, de asemenea, o soluție sub forma unui daemon care rulează în paralel cu serverul http și stochează informațiile necesare în RAM-ul său sub forma variabil=sens. Pentru a scrie sau a prelua date, scriptul se conectează la demon pe un port TCP sau UDP predeterminat, se identifică și folosește un set de comenzi simple precum „salvare Nume=valoare" și "extract Nume" (se intoarce valoare).

Interesant este că, în ciuda complexității implementării, o astfel de soluție (sau utilizarea unui DBMS cu posibilitatea de a accesa prin rețea) vă permite să partajați date între scripturi care rulează pe diferite servere (dacă este în curs de dezvoltare un sistem web interactiv distribuit complex). implementat), salvând în același timp datele din partea utilizatorului.

Fişier

Principalul dezavantaj al stocării datelor într-un fișier, în afară de utilizarea spațiului pe disc și supraîncărcarea operațiunii fișierului, este operația de scriere pe disc în sine. Scrierea pe disc poate fi o sursă de probleme serioase de securitate, deoarece funcționarea unui script CGI este de fapt controlată de utilizatori externi care pot avea intenții rău intenționate. Trimițând orice date speciale către un script neglijent, puteți provoca o blocare gravă a serverului. Dacă scriptul are permisiunea de scriere pe disc, consecințele pot fi mult mai grave, așa că, de obicei, scripturile CGI, cum ar fi serverul web însuși, rulează cu privilegii minime în numele utilizatorului nimeni fără permisiunea de scriere pe disc.

Persistența statului din partea utilizatorului

Stocarea datelor de stare pe partea utilizatorului (cookie-uri și, din punct de vedere tehnic, câmpuri ascunse) este un dezavantaj semnificativ: utilizatorul are acces deplin la datele stocate și le poate modifica neautorizat (de exemplu, citiți răspunsul corect de test sau modificați ID-ul utilizatorului) . Avantajul este implementarea simplă.

Cookie-uri

Cookie-urile sunt date de vizualizare Nume=sens, care, atunci când sunt primite de la server, sunt stocate de browser pe discul utilizatorului pentru a fi returnate serverului la solicitările ulterioare către această sau altă adresă URL. Deoarece datele sunt stocate pe disc, acestea pot fi folosite după ce browserul este repornit.

Serverul trimite cookie-ul printr-un câmp special de antet de răspuns HTTP „Set-Cookie”. De asemenea, browserul returnează cookie-ul printr-un câmp special din antetul solicitării HTTP – „Cookie”. Pe partea de server, cookie-ul este de obicei format dintr-un script care pur și simplu trimite antetul corespunzător către STDOUT. Transferul datelor primite prin cookie-uri din browser către script este realizat de server prin setarea variabilei de mediu HTTP_COOKIE, care este disponibilă în interiorul scriptului și conține perechi. Nume=sens, pe care browserul l-a transmis în câmpul „Cookie” din antetul solicitării sale.

Setați formatul câmpului cookie (răspuns HTTP)

Setați cookie-uri: Nume=sens; Varsta maxima= secunde; Comentariu= text_comment; Calea= URI_or_part_URI; Domeniu= server_domain; sigur; versiune=1

Toate elementele cu excepția Nume=sensși Versiunea sunt opționale. Un singur antet de răspuns de server poate conține mai multe câmpuri Set-Cookie.

Nume=sens informații destinate să fie stocate pe partea clientului și ulterior returnate la server; nici in Nume, nici în sens nu poate conține spații, file sau punct și virgulă; dacă este necesar, astfel de caractere trebuie să fie codificate în conformitate cu regulile generale pentru codificarea URL-urilor.

Varsta maxima= secunde setează data de expirare a datelor (în secunde din momentul primirii cookie-ului); implicit - până la sfârșitul acestui proces de browser.

Comentariu= text_comment comentariu de server despre scopul cookie-ului; se presupune că utilizatorul poate refuza să lucreze cu acest cookie dacă nu îi place comentariul.

Domeniu= server_domain domeniul pentru care este valabil acest cookie (browserul trebuie să returneze un cookie atunci când accesează toate serverele din acest domeniu, ținând cont de parametrul Path [vezi mai jos]); domeniul trebuie să înceapă cu un punct; acest server trebuie să fie în acest domeniu. Dacă parametrul Domain nu este specificat, returnați cookie-ul numai la acest server.

Calea= URI_or_part_URI cale de la rădăcina arborelui de documente (URI) al serverului; browserul trebuie să returneze un cookie atunci când accesează acest URI și toate URI-urile care încep cu acesta; implicit, URI-ul care a generat cookie-ul atunci când a fost solicitat, minus numele fișierului.

Exemplu: la accesarea „http://s.vvsu.ru/a/b/c”, serverul a returnat un răspuns cu câmpul antet setat:

SetCookie: X=5; Versiune=1 Aceasta înseamnă că cookie-ul ar trebui să fie returnat de browser la accesarea tuturor adreselor URL, cum ar fi „http://s.vvsu.ru/a/b/ un nume de fișier".
Dacă SetCookie în răspunsul serverului arată astfel: SetCookie: X=5; Domeniu=.vvsu.ru; Calea=/a/; Version=1, atunci browserul trebuie să atașeze acest cookie la toate solicitările de adrese URL din formularul: „http:// nume_fără_punct.vvsu.ru/a/b/ unele_cale_sau_niciuna".

Securizat dacă acest parametru este prezent, atunci browserul ar trebui să returneze cookie-ul la server doar printr-un canal de comunicare securizat; standardul nu specifică un mecanism specific pentru protejarea datelor în tranzit, dar se presupune că acesta este SSL.

Formatul câmpului cookie (solicitare HTTP)

Cookie-uri: Nume=sens; Calea= URI_or_part_URI; Domeniu= server_domain; versiune=1

Parametrii Path și Domain sunt incluși numai dacă au fost setați în antetul Set-Cookie. Dacă mai multe cookie-uri satisfac parametrul Path, acestea sunt specificate în același antet Cookie unul după altul (separate prin punct și virgulă) în următoarea ordine: cookie-urile cu parametrul Path mai lung sunt transmise mai întâi. Ordinea în care parametrii Path sunt egali nu este definită.

Câmpuri ascunse

Un câmp ascuns este creat în interiorul unui formular folosind o etichetă
nume1 valoare= valoare1>

Când browserul primește un document cu acest formular, conținutul câmpurilor de tip „ascuns” nu este afișat și utilizatorul nu este conștient de existența acestora (cu excepția cazului în care se uită în textul HTML al documentului trimis). După ce utilizatorul trimite formularul la server, „ nume1=valoare1" se atașează la datele formularului care vor fi procesate de scriptul nou lansat. În acest fel, scriptul poate obține date despre istoricul lucrului său cu utilizatorul. De exemplu, la cumpărături online, câmpurile ascunse pot conține o listă de produse selectate pentru cumpărare în alte departamente pe care utilizatorul le-a vizitat deja în această sesiune.

Dezavantajul acestei metode (pe lângă posibilitatea de a accesa și modifica datele menționate mai sus) este că datele sunt stocate doar în timpul unei singure sesiuni de browser. Dacă browserul este repornit, toate datele se vor pierde și procesul de interacțiune cu scriptul va începe de la zero.

Partea server include

SSI este un mecanism pe partea de server pentru analizarea documentelor HTML pentru a le localiza în document și a executa directive care adaugă informații suplimentare documentului.

Toate directivele sunt inserate în interiorul etichetelor de comentariu HTML, ceea ce permite clientului, dacă serverul nu acceptă SSI, să ignore aceste directive. Directivele au următorul format:

Mai jos este o listă a principalelor directive SSI și parametrii acestora.

ecouÎnlocuiește în document valoarea unei variabile de mediu specificată ca parametru (vezi și lista de variabile CGI) sau o variabilă SSI specială (vezi ):

Ați ajuns la serverul situat la...

include Inserează textul altui fișier în document. Parametri: fişier- indică calea către fișierul inserat relativ la locația acestui document; virtual- specifică calea virtuală (așa cum ar apărea într-un URL) către fișierul care urmează să fie inserat.

Această directivă este foarte utilă pentru crearea antetelor și subsolurilor standard pentru paginile web.

fsize Inserează dimensiunea fișierului specificată în parametru (calea către fișier este virtuală):

dimensiunea fișierului archive.zip -octeți.

flashmod Inserează data și ora ultimei modificări a fișierului specificat în parametru în document (calea către fișier este virtuală):

Data ultimei modificări:octeți. Formatul de ieșire a datei și orei poate fi specificat cu ajutorul parametrului timefmt directive config.

exec Execută programul extern specificat de parametru și inserează rezultatul acelui program în document. Parametri: cmd- programul executabil este o aplicație obișnuită; cgi- programul care se execută este un script CGI

Am vizitat această paginăo singura data. Primul exemplu folosește înlocuirea variabilelor de mediu (vezi Variabile CGI).

config Modifică diferite aspecte ale modului în care funcționează SSI. Parametri:

  • errmsg - mesaj de eroare emis atunci când directiva nu poate fi executată:
  • sizefmt - setează formatul de ieșire al dimensiunii fișierului (înlocuit de directivă fsize; valori: octeți- afisare in octeti; abrev- Se rotunjește la cel mai apropiat număr întreg de kiloocteți.dimensiunea fișierului archive.zip - aproximativocteți.
  • timefmt - setează formatul de ieșire a datei și orei, vezi .

Variabile speciale SSI

Mai jos sunt variabilele SSI care pot fi utilizate în directivă ecou pe lângă variabilele CGI.

DOCUMENT_NAME Numele acestui document. De exemplu:

Citiți un fișier numit:

DOCUMENT_URL Calea virtuală către documentul dat. De exemplu:

QUERY_STRING_UNESCAPED Date decodificate din QUERY_STRING (vezi „ „), cu toate metacaracterele shell-ului cu o bară oblică inversă (\).

DATE_LOCAL Data și ora curente în ora locală. De exemplu:

Acum

DATE_GMT Data și ora actuală GMT.

MODIFICAT ULTIMA DATĂ
Data și ora la care acest document a fost modificat ultima dată. De exemplu:

Acest fișier a fost modificat ultima dată

Sarcina

Scrieți un scenariu CGI pentru un joc de spânzurătoare (ghicirea unui cuvânt prin ortografie).

Regulile jocului

Serverul ghicește un cuvânt din dicționar și îl arată utilizatorului într-o formă deghizată (literele sunt înlocuite cu asteriscuri). Utilizatorul are un anumit număr de încercări; în timpul fiecărei încercări, el poate ghici o literă. Dacă utilizatorul ghicește corect o literă sau numește o literă pe care a folosit-o deja, încercarea nu contează. În caz contrar, numărul de încercări se reduce cu una.

Dacă utilizatorul ghicește corect litera, serverul demască toate aparițiile literei ghicite în afișarea cuvântului. În ambele cazuri, serverul adaugă litera sugerată de utilizator la lista de litere folosite care este afișată în timpul fiecărei încercări pentru confortul utilizatorului. Este afișat și numărul de încercări rămase.

Jocul se termină dacă numărul de încercări devine egal cu zero (utilizatorul pierde) sau dacă toate literele din cuvânt sunt ghicite (utilizatorul câștigă).

Dacă utilizatorul la orice încercare sugerează mai multe litere, se consideră că utilizatorul încearcă să ghicească întregul cuvânt. Cu o presupunere corectă, utilizatorul câștigă, în caz contrar pierde, indiferent de numărul de încercări rămase.

Implementarea

Cuvintele sunt selectate aleatoriu dintr-un fișier text dat.

Raportul dintre numărul de încercări și lungimea cuvântului este determinat în mod rezonabil de programator. De exemplu, numărul de încercări este o funcție dată a lungimii cuvântului; numărul de încercări este legat rigid de fiecare cuvânt din dicționar; lungimea cuvintelor din dicționar și numărul de încercări sunt constante; la determinarea numărului de încercări, se utilizează nivelul de dificultate declarat de utilizator.

Prima dată când scriptul este accesat, sunt afișate un ecran de introducere și un formular de înregistrare a vizualizării.

Vă recomandăm să citiți

Top