CGI scripts op uw homepage

CGI scripts op uw homepage

CGI-scripts (Common Gateway Interface) zijn programma's die - net zoals HTML-documenten - op de server worden geïnstalleerd. Doorgaans worden ze gebruikt om de input van formulieren of 'clickable maps' te verwerken, maar ze kunnen worden ingeschakeld voor een brede waaier van opdrachten waarvan de auteur wenst dat ze door de gebruiker met behulp van de browser worden geïnitieerd: het raadplegen van een databank, het berekenen van een waarde, enz. CGI-scripts kunnen worden opgesteld in bijvoorbeeld Perl, C, C++, de Unix Bourne Shell, de C Shell, enz. U kunt ze zelf schrijven of overnemen van anderen.

Gateway scripts bevinden zich gewoonlijk op systeemniveau. De eigenlijke CGI scripts dienen door de gebruiker in een eigen directory geplaatst te worden. Ze worden dan door de respectievelijke servers uitgevoerd. Ga als volgt te werk: Creëer in uw WWW-directory een subdirectory cgi-bin met het commando

mkdir ~/WWW/cgi-bin

en plaats de scripts in deze subdirectory.
Zorg ervoor dat de permissies als volgt zijn ingesteld:

  • voor uw home directory: rwx--x--x
    Gebruik vanuit de home directory hiervoor het commando:
    $ chmod 711 .
    
  • voor de subdirectories WWW en cgi-bin: rwx--x--x
    Gebruik vanuit de home directory hiervoor de commando's:
    $ chmod 711 WWW
    $ chmod 711 WWW/cgi-bin
    
  • voor de CGI-bestanden: rwx-rx-rx
    Gebruik vanuit de WWW/cgi-bin directory bijvoorbeeld het commando:
    $ chmod 755 script.cgi
    

Het script zal worden uitgevoerd door middel van een URL van het volgende type:
http://users.UGent.be/~gebruikersnaam/cgi-bin/script.cgi
Het script moet dan wel als extensie .pl of .cgi dragen, anders wordt het niet als dusdanig herkend. Eventuele bestanden moeten enkel schrijf/leesbaar zijn voor uzelf.

Bij het gebruik van scripts is het mogelijk dat u op volgende foutmelding stoot:

'Internal Server Error
Error: Malformed header from script.
'

Laat eerst uw script lopen aan de Unix-prompt vooraleer u het script via een WWW-browser aanspreekt. Dat geeft u al een idee van de fout. U doet dat met het commando

./naam_van_het_script 

Het uitvoeren van het script vanaf de Unix-prompt lukt niet:

  • kijk de permissies van het script na, die moeten op 755 staan. Veranderen kan via het commando chmod 755 scriptnaam
  • is uw script een perl-script, dan moet de 1e lijn van het script zijn:
    #!/usr/local/bin/perl
  • U hebt uw script vanop een PC in binaire mode gekopieerd. Als u dit gedaan hebt, dan staat op het einde van elke lijn in uw script een ^M en daardoor loopt uw script verkeerd. U kunt het oplossen door het script te editeren met pico (een teken toevoegen, terug verwijderen) en te bewaren of het script opnieuw vanaf de PC over te zetten, maar dan in ASCII mode. De ^M's zijn dan verdwenen.

Het uitvoeren van het script aan de Unix-prompt lukt wel maar u krijgt in uw Browser de Internal Server Error. Mogelijke oorzaken hiervan kunnen zijn:

  • enkel voor studenten: u gebruikt het script om een formulier via sendmail door te sturen. Op studwww werd die mogelijkheid wegens misbruik afgezet.
  • Verkeerde permissie van uw script of van één van de bovenliggende directories. De directories moeten minstens 711 (drwx--x--x) zijn en het script zelf 755 (-rwxr-xr-x).
  • Uw script staat niet in de correcte directory. Het moet nl. in ~/WWW/cgi-bin staan.
  • In uw script worden bestanden aangesproken die niet bestaan of die niet kunnen gelezen of geschreven worden. Ga dus na of alle te gebruiken files correct aangemaakt zijn of kunnen aangemaakt worden door het script. Een script wordt opgeroepen via een URL van de vorm
    http://server/~gebruiker/cgi-bin/script.pl (in dit geval moet uw script wel de extensie .pl of .cgi hebben) dan loopt het script onder uw eigen account en moeten de gebruikte bestanden enkel lees/schrijfbaar zijn voor uw account.

Veel personen maken ook gebruik van CGI scripts (Common Gateway Interface) op hun homepage (bijvoorbeeld tellers die het aantal bezoekers registreren). Ook hier weer enkele links naar pagina's die u meer info bieden:

Let op, de scripts van 'Matt's Script Archive' bevatten een aantal security holes. Gebruik dus de goeie alternatieven op bv. http://nms-cgi.sourceforge.net/