60.19.13.1. Část první, CGI

60.19.13.1.1. Proměnné prostředí
60.19.13.1.2. Hlavička odpovědi

Než se dobereme věcí zajímavější je třeba probrat základy. Takže co je to CGI. CGI neboli Common Gateway Interface je rozhraní mezi webovým serverem a CGI aplikací. Toto rozhraní je definováno na úrovni prostředí. Zkrátka webový server analyzuje přišedší dotaz od prohlížeče, naplní proměnné prostředí a spustí CGI program (skript). Tento program pak na standardní výstup vypíše html kód stránky který webový server vrátí dotazujícímu se prohlížeči. Toto jednoduché rozhraní má jednu velkou výhodu. CGI program není součástí webového serveru a může být naprogramován v jakémkoliv jazyce. Může to být binární výkonný program (binárka) nebo to může být skript v libovolném skriptovacím jazyce. Zkrátka nejsme ve svém výběru vývojového prostředí žádným způsobem omezeni webovým serverem.

Než si ukážeme jednoduchý skript, připravíme si webový server, v mém případě apache-ssl. Do jeho konfigurace /etc/apache-ssl/httpd.conf vložíme buď to přímo nebo přes direktivu Include následující řádky.

Příklad 60.2. Konfigurace Apache

  1 # Konfigurace pro na�e experiment�ln� CGI skripty v bashi
    ScriptAlias /bash/cgi-bin \
                /home/radek/document/book/programming/example/bash/cgi/bin
    <Location /bash/cgi-bin>
  5 	# Omezen� p��stupu na u�ivatele se znalost� hesla
    	AuthType	Basic
    	AuthName	"Proka�te se pros�m heslem."
    	AuthUserFile	/etc/apache-ssl/passwd/user
    	Require		user radek
 10 
    	# Omezen� p��stupu podle adresy u�ivatele
    	Order Deny,Allow
    	Allow from localhost
    	Deny from All
 15 </Location>
    

Řádek ScriptAlias definuje kde bude vystaven adresář s CGI skripty a kde se tento adresář fyzicky nachází. Uvedený příklad je aktuálně používaný při psaní této knihy a zkoušení příkladů. Následující část <Location> je zbytná a používám ji k omezení přístupu k CGI skriptům z bezpečnostních důvodů. Použil jsem dvě metody, omezení přístupu jen na vyjmenované uživatele kteří se prokazují znalostí hesla a omezení přístupu podle (ip) adresy uživatele (jeho počítače).

# /etc/init.d/apache-ssl reload

Nyní po „reloadu“ konfigurace apache-ssl si můžeme ukázat slibovaný jednoduchý skript.

Příklad 60.3. Jednoduchý CGI skript

#!/bin/bash
# $Id: ahoj,v 1.1.1.1 2009-01-24 15:42:51 radek Exp $
echo "Content-type: text/plain"
echo
echo "Ahoj"

Tento velmi jednoduchý skript použijeme k tomu abychom si ověřili, že máme správně nakonfigurovaný web server. Jestli ano, měli bychom vidět v prohlížeči po odkazu na náš skript text „Ahoj“. Prvního čeho si všimnete, že náš skript nevrací stránku v html kódu ale v čistém (plain) textu. To není proto, že bychom html nepoužili. V první části našeho skriptu totiž vypisujeme hlavičku a v ní je uvedeno že následuje „text/plain“. Hlavička slouží k informování prohlížeče o tom jaká data budou následovat, a je od těla stránky/dokumentu oddělena prázdným řádkem.

Do prohlížeče zadáme URL https://localhost/bash/cgi-bin/ahoj a ukáže se nám výsledek práce našeho jednoduchého CGI skriptu.

FIXME:vložit případný obrázek s prohlížeče.

Než si ukážeme nějký html kód, povíme si jak jsou našemu CGI skriptu předány parametry. Tyto webowý server uloží do proměnných v prostředí. Místo dlouhého povídáni příklad.

Příklad 60.4. Proměnné prostředí

#!/bin/bash
# $Id: env,v 1.1.1.1 2009-01-24 15:42:51 radek Exp $
echo "Content-type: text/plain"
echo
echo "Prom�nn� prost�ed�:"
env

V prohlížeči pak vidím všechny proměnné prostředí. Vetšinu z nich pro nás připravil webový server a můžeme je ve svém CGI skriptu použít.

FIXME:Doplnit parametry předávané v URL.