Ga naar Bijlagen | Ga naar andere tutorials |
In English (in het Engels), door
James
Marshall
Auf deutsch (in het Duits), vertaald door
Friedemann Wachsmuth
En español (in het Spaans),
vertaald door
René Alvarez
Em português (in het Portugees),
vertaald door
Claudio F. Chagas
Stel: Het is 16.00, je baas heeft een CGI script nodig om 16.30, en jij weet niet eens waar CGI voor staat. Je bent nu op de juiste plaats.
CGI is niet zo moeilijk, hoewel er allerlei bangmakende dingen over worden gezegd. Als je kan lezen vanuit STDIN en schrijven naar STDOUT, kun je CGI scripts schrijven. Als je al een programmeur bent, zul je in een paar minuten de basis van CGI onder de knie hebben. Als je geen programmeur bent, zal deze tutorial je niet veel leren -- sorry. Leer wat programmeren, ook shell scripting, en kom dan terug. Veel geluk!
Deze tutorial richt zich op het schrijven van CGI scripts om HTML formulieren op het Web te verwerken. Er worden wat details overgeslagen, maar daardoor zal het wel snel gaan (waarschijnlijk hooguit een uur), en zul je er in 90% van de situaties in het echte leven genoeg aan hebben. Als je dan toch meer nodig hebt, kijk dan eens naar de complete CGI specificatie . Voor hulp met het schrijven van HTML formulieren, kijk naar dit tutorial fragment, of deze documentatie bij NCSA.
Als je deze pagina hebt gelezen, kijk dan naar de bijlagen voor voorbeeld scripts en andere onderwerpen.
Die set van naam-waarde paren wordt aan jou gegeven als 1 lange tekst, die je moet rangschikken. Dat is niet heel moeilijk, en er zijn genoeg bestaande routines die het voor je doen. Hier is er een in Perl, een simpelere in Perl, of een in C. Voor meer afgewerkt CGI moet je eens naar Perl's CGI.pm module kijken. De CGI directory bij Yahoo bevat vele CGI routines (en voorgeschreven scripts) in verschillende talen.
Als dat genoeg voor je is, kun je verdergaan naar de volgende sectie. Als je het echt zelf wil doen, of je bent gewoon nieuwsgierig, is hier de opmaak van de lange string:
"naam1=waarde1&naam2=waarde2&naam3=waarde3"Dus je moet de = en & tekens weghalen. Dan doe je nog twee dingen met iedere naam en waarde:Dit is nodig omdat de originele lange string URL-gecodeerd is, te zien aan de = en &, en ga zo maar door.
- Converteer alle + karakters naar spaties, en
- Converteer alle "%xx" volgordes naar een karakter waarvan de ascii waarde is "xx". Bijvoorbeeld, converteer "%3d" naar "=".
Maar hoe kom je aan die lange string? Dat hangt af van de HTTP methode waarmee het formulier verstuurd was:
(Als je je afvraagt wat het verschil tussen GET en POST is, kijk naar de bijlage erover. Kort antwoord: POST is voor meer algemene doelen, maar GET is goed voor kleine formulieren.)
- Voor GET zendingen, is het de environment variabele QUERY_STRING.
- Voor POST zendingen, lees je het van STDIN. Het exacte aantal te lezen bytes is te zien in de environment variabele CONTENT_LENGTH.
Content-type: text/htmlplus nog een lege regel naar STDOUT. Daarna schrijf je HTML antwoordpagina naar STDOUT, en het zal worden verzonden aan de gebruiker als je script afgelopen is. Dat is alles.
Ja, je schrijft gewoon pure HTML. Het is niet moeilijk, het is juist heel handig.
Als je een figuur wil terugsturen of een ander niet HTML-antwoord, lees
hier hoe.
Voordat je te veel scripts schrijft, kijk eens naar CGI veiligheid.
Als je meer moet weten over CGI, kijk dan naar de complete CGI specificatie bij NCSA. W3C heeft ook een CGI pagina met links naar allerlei documenten die je mogelijk handig vindt.
O ja, CGI staat voor Common Gateway Interface-- in andere woorden, een standaard ("common") manier van communiceren ("interface") tussen procedures op verschillende machines ("gateway").
(commentaar is hartelijk welkom; voor vragen, lees alstublieft eerst de FAQ)
Opmerking: Commentaar op de inhoud graag (in het Engels) naar J. Marshall, commentaar op de vertaling (in Nederlands of Engels) naar S. Amstel
Laatst Gewijzigd (originele tekst): 18 april 1998 | http://www.jmarshall.com/easy/cgi/ |
Laatst Gewijzigd (vertaling): 4 januari 2000 | http://www.jmarshall.com/easy/cgi/dutch/ |