copyright I Ljungström, flowsim ABilj@flowsim.se
CGI-SKRIPT PÅ SVENSKA
CGI-SKRIPT 1 - environment variables
 
PATH_INFO
QUERY_STRING
REQUEST_METHOD
HTTP_USER_AGENT
 
miljövariabler
?

 
 

Miljövariabler är diverse fakta som CGI-programmet (eller vilket program eller vilken process som helst) automatiskt känner till.
 
Exakt vilka miljövariabler ett program har tillgång till beror dels på varifrån programmet körs, dels på diverse inställningar på servern.
 
En del miljövariabler kan man få tag i bara om man kör programmet från en hemsida; andra har man tillgång till endast om man kör programmet från prompten. Samma variabel kan dessutom ha olika värde beroende på varifrån programmet körs.
 
Alla som har tillgång till ett UNIX-konto kan ta reda på de miljövariabler som finns tillgängliga vid prompten genom att helt enkelt skriva env.

 
En miljövariabel är REQUEST_METHOD. Den talar om för CGI-programmet vilken metod som används.
 
Om programmet anropats från ett formulär (FORM) på en webbsida och FORM-taggen ser ut så här:
 
<FORM METHOD="
get"
        ACTION="cgi-programmet">
 
är
REQUEST_METHOD lika med get.
 
En FORM-tagg kan också se ut så här:
 
<FORM METHOD="
post"
        ACTION="cgi-programmet">
 
och då är
REQUEST_METHOD alltså lika med post.
 

 
Om REQUEST_METHOD är get så kommer den information som skickats från webbsidan att hamna i variabeln QUERY_STRING.
 
Om
REQUEST_METHOD är post så hämtar programmet den information som skickats från STDIN (standard in) och innehållets längd definieras i variabeln CONTENT_LENGTH.
 

 
Ett exempel.
Ett CGI-program som heter
test.cgi anropas från en webbsida där det finns en FORM som ser ut så här:
 
<FORM METHOD="
get"
     ACTION="
test.cgi">
<INPUT TYPE="text" NAME="
iljruta1" SIZE="20">
<INPUT TYPE="text" NAME="
iljruta2" SIZE="20">
<INPUT TYPE="submit" VALUE="SKICKA!">
</FORM>
 
På FORMen finns alltså två textrutor och en knapp.
 
Personen som besöker hemsidan skriver in någonting i den första textrutan, t ex "August Strindberg" och någonting i den andra, t ex "boken Inferno".
 
Metoden är
get och den information som skickats hamnar alltså i variabeln QUERY_STRING.
 
Om man skulle printa ut innehållet i
QUERY_STRING rakt av utan att göra någonting med det skulle resultatet i det här exemplet se ut så här:
 
iljruta1=August+Strindberg&iljruta2=boken+Inferno
 

 

 
Här följer några fler ENVIRONMENT VARIABLES:
AUTH_TYPE
CONTENT_LENGTH
Hur mycket data skickades? Om FORM METHOD=post så finns det definierat i den här variabeln.
CONTENT_TYPE
Vilken typ av data?
Skickas data från en form så är den här variabelns värde
application/x-www-form-urlencoded.
GATEWAY_INTERFACE
Vilken version?
REQUEST_METHOD
Vilken metod används? get eller post eller någon annan?
PATH_INFO
PATH_TRANSLATED
QUERY_STRING
Här finns all data som skickats om metoden var get.
REMOTE_ADDR
Vem anropar programmet? Svar t ex: 195.163.239.55 (IP-numret)
REMOTE_HOST
Vem anropar programmet? Svar t ex: sdu55-239.ppp.algonet.se
REMOTE_USER
Den här variabeln sätts bara om man använder lösenord.
SCRIPT_FILENAME
Hela adressen till CGI-programmet.
SCRIPT_NAME
Adressen till CGI-programmet, relativt från roten.
SERVER_ADMIN
E-postadress till serveransvarig.
SERVER_NAME
Serverns domännamn eller IP-nummer.
SERVER_PORT
Till vilken TCP-port skickades det hela? 80, normalt.
SERVER_PROTOCOL
Vilket protokoll och vilken version använder servern?
SERVER_SOFTWARE
Vilken typ av server?
T ex Apache/1.3.6 (Unix)

 
     

 
Så här kan ett program som skriver ut nå "environment variables" se ut:
 
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
 
$gate=$ENV{"GATEWAY_INTERFACE"};
$uagent=$ENV{"HTTP_USER_AGENT"};
$raddr=$ENV{"REMOTE_ADDR"};
$chost=$ENV{"REMOTE_HOST"};
$reque=$ENV{"REQUEST_METHOD"};
$servadm=$ENV{"SERVER_ADMIN"};
$servname=$ENV{"SERVER_NAME"};
$servprot=$ENV{"SERVER_PROTOCOL"};
print "<HTML>\n";
print "<HEAD>\n<TITLE>environment variables</TITLE>\n";
print "</HEAD>\n";
print "<BODY BGCOLOR='white'>\n";
print "<FONT FACE='Artial,sans-serif' COLOR='black' SIZE='4'>";
print "ENVIRONMENT VARIABLES<BR> <BR>";
print "<DL>";
print "<DT>GATEWAY_INTERFACE";
print "<DD>$gate";
print "<DT>HTTP_USER_AGENT";
print "<DD>$uagent";
print "<DT>REMOTE_ADDR";
print "<DD>$raddr";
print "<DT>REMOTE_HOST";
print "<DD>$chost";
print "<DT>REQUEST_METHOD";
print "<DD>$reque";
print "<DT>SERVER_NAME";
print "<DD>$servname";
print "<DT>SERVER_PROTOCOL";
print "<DD>$servprot";
print "<DT>SERVER_NAME";
print "<DD>$servname";
print "</DL>";
print "</BODY>";
print "</HTML>";

 
Hur man gör för att lägga in skriptet på servern och få det att fungera finns beskrivet under CGI/1 lite grunder.
 
en linje
Sidan gjordes av
 
ilj
 
ilj@flowsim.se
 
en fyrkant
 
Senast ändrad 26 mars 2004.
 
Den här sidan hör hemma i ett ramsystem
hos
www.flowsim.se