Základní otázky při řešení problému "CGI script nefunguje"
- Kdo je vlastníkem scriptu?
Autor CGI scriptu.
- Jaká jsou přístupová práva skriptu?
Je potřeba zajistit právo spuštění, tedy např. 755.
- Je CGI script ve správném adresáři?
CGI script je potřeba umístit do adresáře vyhrazeného pro CGI scripty, např. /usr/www/cgi-bin.
- Je WWW server nakonfigurován tak, aby uměl spuštět CGI scripty?
Server musí podporovat a mít povolenu metodu GET i POST a spouštění cgi scriptů.
- Pod kterým uid server spustí CGI script?
Pod uživatele, pod kterým běží www server, např. httpd. (Nemůže tedy zapisovat do souborů a adresářů uživatele.)
- Může server vytvářet a zapisovat do libovolných souborů?
Pouze do souborů, ke kterým má přístupová práva.
- Jak je identifikována chyba v errorlogu?
Errorlog je textový soubor, kam server zapisuje chyby při komunikaci s klientem. Je uložený obvykle v adresáři logs pod domácím adresářem www serveru.
- Jaká je cesta k interpretu perlu, je uvedená na začátku CGI scriptu?
např. /usr/local/bin/perl
- Generuje CGI script MIME typ na začátku odpovědi?
CGI script musí generovat hlavičku určující MIME typ (např. Content-type: text/html) a pak teprve vlastní data odpovědi. V perlovém scriptu tedy nesmí na začátku chybět řádka:
print "Content-Type: text/html\n\n";
- Co se stane, když kontroluji návratový kód po každém volání systému?
Je to výhodné používat např:
open(VYST, ">jmeno_soub") || die (nelze zapsat do souboru: $!);
neboť pak v errorlogu najdete obsah proměnné $! tj např. Permission denied nebo No such
file or directory a vše je hned jasnější.
- Máte zajištěno na začátku scriptu vyprázdnění výstupního bufferu?
Aby se chybové hlášky netiskly na výstup dříve než hlavička s MIME ja výhodné na začátku CGI scriptu uvést příkaz $| = 1.