# dnes mame 23. brezna 1995



CGI skripty

------------------------------------------------------------ 1. Konfigurace serveru 2. Volani skriptu z HTML dokumentu 3. Informace predavane skriptu serverem 4. Informace predavane skriptu z dokumentu (od uzivatele) ------------------------------------------------------------ 1. Konfigurace serveru Ve svete se pouzivaji nejcasteji dva typy serveru pro stanice s UNIXem: a) NCSA httpd - nainstalovan na nasem sgi b) CERN httpd Kazdy z nich vyzaduje odlisny zpusob konfigurace, nicmene zda se, ze oba nabizeji shodne sluzby a umoznuji tedy docilovat stejnych vysledku. Konfigurace serveru je popsana vzdy v konfiguracnich souborech. V tech se musi v nasem pripade explicitne vyjadrit, zda lze CGI skripty spoustet, pripadne v jakych adresarich se vyskytuji, jak se jmenuji (hvezdickova konvence) apod. To co CGI skript vyprodukuje na standardni vystup se pak chape jako dokument, ktery zpracovava browser. Na zacatku takoveho dokumentu je vyjadreno o jaky typ dokumentu se jedna. Napr. planar text, html text, gif image, jpeg image atd. Po tomto oznaceni typu nasleduji data. CGI skript, ktery ma nastavena prava pro spousteni, je jista abstrakce spustitelneho programu. Na zacatku skriptu se totiz objevuje cesta k interpreteru obsahu tohoto skriptu. Napr. je-li na prvni radce dokumentu napsano #!/bin/sh znamena to, ze text obsazeny ve skriptu bude zpracovavat program sh umisteny v adresari /bin (obsah CGI skriptu mu bude zasilan na standardni vstup). V tomto pripade tedy CGI skript bude zcela bezny skript v shellu a jeho vystup bude zpracovan jako dokument v browseru. 2. Volani skriptu z HTML dokumentu Je-li server spravne nakonfigurovan, lze jmena CGI skriptu umistovat do HTML dokumentu jako linku (kotvicku, anchor) nebo jej lze vyvolavat pro zpracovani formularu: a) <A HREF="/cgi-bin/skript1">Spust skript1</A> b) <FORM ACTION="/cgi-bin/skript1"> <INPUT NAME=vstup TYPE=text> <INPUT NAME=tlacitko TYPE=submit> </FORM> 3. Informace predavane skriptu serverem Uvnitr skriptu jsou definovany nasledujici environment promene: SERVER_SOFTWARE - oznaceni WWW-serveru ve formatu "jmeno/verze", napr. NSCA/1.3 SERVER_NAME - jmeno stroje, na kterem bezi server. GATEWAY_INTERFACE - specifikace verze CGI ve formatu "CGI/verze", napr. CGI/1.1 SERVER_PROTOCOL - jmeno/verze protokolu, kterym probiha pristup, napr. HTTP/1.0 SERVER_PORT - port na ktery prijde pozadavek, napr. 80 REQUEST_METHOD - metoda pristupu, resp. predavani dat GET, POST, PUT, DELETE HTTP_ACCEPT - obsahuje vsechny typy MIME, ktere akceptuje client PATH_INFO - virtualni cesta k tomuto skriptu (jak byl volan)- nevim jak PATH_TRANSLATED - uplna cesta k tomuto skriptu -nevim jak SCRIPT_NAME - jako PATH_INFO, ale funkcni QUERY_STRING - obsahuje predavane parametry (je-li metoda GET) REMOTE_HOST - stroj z nehoz je zaslan pozadavek (u nehoz sedi uzivatel) REMOTE_ADDR - to same, ale v cislech AUTH_TYPE - je-li dokument chranen, je zde informace o metode ochrany REMOTE_USER - jmeno uzivatele (neni nutne stejne jako login-name) v pripade chraneneho dokumentu CONTENT_TYPE - typ predavanych dat pri metode PUT a POST CONTENT_LENGTH - delka predavanych dat pri metode PUT a POST 4. Informace predavane skriptu z dokumentu (od uzivatele) Tyto informace se predavaji v zavislosti na zvolene metode (GET, POST ..). Implicitne se pouziva metoda GET, ktera pouziva pro predavani parametru promennou QUERY_STRING. Pri volani skriptu se parametr oddeluje otaznikem, napr. http://sgi/cgi-bin/skript1?coje&nic. Parametry jsou oddeleny &. Je-li volani provedeno z formulare, do skriptu se prenesou v promenne QUERY_STRING hodnoty, ktere uzivatel ve formulari vyplnil. Retezec ma format JMENO1=hodnota1&JMENO2=hodnota2, jednotlive polozky jsou oddeleny &. Polozky JMENOx nesou oznaceni definovane ve formulari direktivou NAME. Je-li pouzita metoda POST, parametry se predavaji do skriptu na standardnim vstupu, pripadne opet oddeleny &. Pro zjednoduseni ziskani hodnot parametru predanych z formulare exituje pomocny program cgiparse (dodava se s CERN serverem, nicmene funguje dobre i pri pouzivani s NCSA serverem)(volany s parametrem -form), ktery umi precist retezec QUERY_STRING a nadefinovat sadu promennych FORM_JMENOx a naplni je hodnotami "hodnotax".