Come installare uno script CGI

MANUALI
CURRICULUM
LA MIA TESI
CHI SONO
TELELAVORO
CORSI ONLINE
ENGLISH
SCRIVIMI
WEBMASTER
XML
SCRIPT CGI

Desriviamo le fasi "standard" di installazione di uno script CGI su un server remoto.

La prima cosa da prendere in considerazione è sicuramente la locazione dell'interprete Perl installato sul server che ospita le vostre pagine web: se notate, in ogni script (quindi file con estensione .pl o .cgi) la prima riga inizia con un

#!

seguito da una directory (nei sistemi Unix, le directory si indicano con le slash [ / ], come si usa fare in internet, e non con le backslash [ \ ] come succede nei sistemi Windows) che altro non è che la directory che contiene l'eseguibile dell'interprete Perl.
Purtroppo, la locazione dell'interprete non è standard, ma varia a seconda del sistema installato sul server e da come lo stesso è stato configurato dall'amministratore.
Alcune locazioni abbastanza standard sono:

#!/usr/bin/perl #!/usr/local/bin/perl

ma non si può mai essere sicuri che una delle due sia quella che fa al caso nostro: per sciogliere questo dubbio basterà collegarci all'home page di chi ospita le nostre pagine e cercare le FAQ (Frequently Asked Questions) dove sarà sicuramente indicata la locazione dell'interprete Perl installato sulle loro macchine. Per chi sia così fortunato da avere un accesso telnet, invece, basterà leggere l'output del comando:

which perl

lanciato ovviamente dalla shell.

La seconda fase solitamente è quella del settaggio delle variabili.
Intanto: perchè esistono le variabili?
Dal nome, dovrebbe essere chiaro: visto che i sistemi sono differenti gli uni dagli altri, directory, percorsi ed URL non possono essere standard. Inoltre, essendo appunto variabili (inteso qui come aggettivo), permettono un certo grado di configurabilità per lo script, in modo che ognuno possa personalizzare alcuni comportamenti dello script come ritiene più opportuno (mi sto riferendo alle directory che contengono i file dei dati degli script, il modo di visualizzarne l'output e simili).
Solitamente, le variabili sono interne agli script veri e propri, ma in alcuni casi possono essere contenute in altri file, il cui nome potrebbe essere qualcosa del tipo:

nomescript.cfg
config.txt
config
setup.pl - .cgi
nomescriptsetup

e via dicendo: in ogni caso, comunque, questi file hanno un nome che vi fa capire subito che si tratta di file di configurazione. Non ci interessa qui vedere come questi file vengono letti ed interpretati dallo script, sappiate solo che questo è il ruolo che tali file ricoprono. Dove si parla di variabili, inoltre, si parla anche di commenti; spesso infatti per ogni variabile vediamo qualcosa del tipo:

# Descrizione
$variabile= ....

E' importante sapere che tutte le righe che iniziano con il cancelletto ( # ) sono chiamate "commenti", ossia vengono tralasciate dall'interprete in fase di compilazione degli script, ma servono solo a chi scrive o legge il codice come "promemoria" o chiarimento. Quindi, le righe sopra ad una variabile che iniziano con il cancelletto altro non sono che una spiegazione del valore della variabile, che è stato introdotto dall'autore presumibilmente per semplificare il procedimento di configurazione-personalizzazione del suo script, e che dovrebbero aiutarci non poco a capire il significato di ogni variabile.

Anche per le variabili non ci sono degli standard: alcune si riferiscono ad URL, altre a percorsi interni, altre ancora a titoli, nomi, colori e quant'altro; ricordiamo quanto detto poche righe sopra e capiremo l'importanza di leggere i commenti introdotti dall'autore.
Ricordiamo ancora un paio di cose che sembrano banalità ma che spesso sono cause di "Error 500"!! Il Perl utilizza dei caratteri speciali e riservati, uno tra tutti la chiocciola ( @ ) per indicare la presenza di un array. Se dovete inserire la chiocciola come valore di una variabile, ricordatevi di inserire davanti a questa anche un backslash che indica all'interprete di interpretare (mi si scusi il gioco di parole) letteralmente il carattere. I caratteri speciali più utilizzati sono: $, ", \, ! (sebbene ve ne siano molti altri).

I percorsi, che nei sistemi Unix si indicano come /percorso/della/directory nei sistemi Windows si indicano come \\percorso\\della\\directory ossia con le backslash precedute da un carattere di escape per il discorso fatto sopra.

Anche se non si parla propriamente di variabili, può accadere di dover modificare, invece che il codice di uno script, il codice di una pagina HTML, ossia l'indice dello script. Molto probabilmente, in queste pagine dovremo andare a modificare dei links che punteranno allo script vero e proprio; sapendo dove lo script sarà caricato, sarà molto semplice far puntare i links allo script stesso, con una piccola attenzione: a volte è necessario passare determinati parametri allo script nel formato http://www.vostroserver.it/cgi-bin/nomescript.cgi?PARAMETRO.
Quindi, nel caso in cui dobbiate modificare un link di tal genere in modo che punti allo script installato sul vostro server, fate grande attenzione a non dimenticare i parametri.


Una volta che le variabili sono impostate (si spera correttamente) si passa al trasferimento dei file: sembra una banalità, ma molto spesso questo passaggio crea non pochi problemi agli utenti. L'upload, sia che venga fatto direttamente dalla linea di comando che tramite qualche programma apposito, deve sempre essere effettuato in ASCII mode: il formato ASCII è lo standard per i file di testo, quali ad esempio i file di cui sono formati i nostri script.

Nei programmi dedicati all'FTP, si noterà da qualche parte nella finestra principale (oppure nelle "opzioni" del programma, se proprio l'autore ha voluto complicare le cose) la possibilità di scegliere come i file devono essere caricati: spesso le opzioni tra cui scegliere sono tre: ASCII, binary ed auto. La prima, che è quella che ci serve per le nostre operazioni, è stata brevemente discussa poche righe sopra, la seconda, invece, fa sì che i nostri script non girino sul server, visto che caricare un file di uno script in binary mode equivale alla certezza che questo non possa mai essere eseguito correttamente dal server. La terza opzione lascia molta discrezionalità al programma che stiamo utilizzando visto che (in teoria) esso fa una rapida scansione dei file da caricare e decide come essi devono essere spostati sul server; questa opzione è utile quando si devono caricare in remoto diversi tipi di file, senza per ognuno andare a decidere la modalità dell'upload.
Ma anche questa, che sembra una grande comodità, ha i suoi svantaggi: spesso infatti i programmi si basano sull'estensione dei file, e tramite questa risalgono al loro tipo, senza curarsi troppo di cosa sia effettivamente contenuto all'interno del file stesso. Esistono dei metodi più esatti per un tale tipo di determinazione, che comunque non vedremo in questa sede.
Per chi utilizzi l'FTP direttamente da linea di comando, invece, la modalità ASCII dovrebbe essere la modalità di default: per accertarvene, lanciate il comando "ascii" una volta che siete collegati all'host.

Una volta che i file sono caricati bisognerà impostarne i permessi: non ci soffermeremo qui a parlare di come si impostano i permessi sui file, ci interesseremo piuttosto a prendere in esame alcuni casi particolari:
· I file con estensione .pl o .cgi: questi file sono a tutti gli effetti i nostri file eseguibili ma, appena caricati sul server, perdono tale caratteristica (a meno che il vostro host remoto non sia uno di quelli che impostano automaticamente i permessi per gli script da voi caricati). Vista la loro condizione di "inutilità" sul server nelle attuali condizioni, dobbiamo per forza renderli eseguibili con il comando chmod 755 nomefile.
La domanda più ovvia a questo punto è: devo rendere eseguibili tutti i file con estensione .pl o .cgi? La risposta è "sarebbe meglio", tuttavia non è sempre necessario. Supponete di avere uno script che consta di tre file .cgi, script1.cgi, script2.cgi e script3.cgi e che script1.cgi sia il file principale dello script: ovviamente, script1.cgi deve da noi essere reso eseguibile, ma gli altri due? Dipende da come è stato scritto lo script! Nel caso gli altri due script siano chiamati all'interno di script1.cgi con comandi del tipo: perl script2.cgi

allora non è necessario che lo script sia eseguibile, in quanto con tale sintassi si chiama in gioco l'interprete che provvede da solo ad eseguire lo script. In altri casi, invece, questo non è possibile, e tutti i tre file devono essere resi eseguibili "a mano". Per chi si chieda come distinguere questi due casi, non disperate, non è necessario leggersi uno ad uno i codici degli script: spesso nei file di aiuto inseriti dall'autore all'interno è ampiamente spiegato quali file necessitano di essere resi eseguibili e quali no. In caso le parole dell'autore siano ambigue o non venga fatta distinzione alcuna, sappiate che rendere eseguibile tutti i file .pl o .cgi non è sbagliato e può togliervi molti problemi.

· Discorso differente va fatto per gli altri file: con la premessa che anche per tutti gli altri file dovreste trovare le istruzioni dell'autore, supponiamo di avere a che fare con un counter: lo script traccia tutte le hits ad un determinato sito e, ovviamente, dovrà anche memorizzarle per poterle incrementare di un'unità ogni volta che un nuovo visitatore arriva sulle pagine del sito.
Ovviamente, i dati del counter sono immagazzinati in un altro file separato dal counter stesso. Immaginate ora due casi: il file (chiamiamolo data.dat) non sia leggibile o non sia scrivibile.

Nel primo caso, il counter si lamenterà per il fatto che il file da cui deve leggere quanti visitatori sono già passati per il sito non è leggibile, e quindi, nel caso in cui non fallisca completamente, interpreterà tale dato come uno zero, e segnerà ogni visitatore come fosse il primo.

Nel secondo caso, invece, riuscirà a leggere il file, ma cosa leggerà mai, se non ha mai potuto scriverci? Ancora, quindi, ogni visitatore sarà il primo (sempre nel caso in cui lo script non fallisca).

Come regolarsi, in questi casi? Sicuramente se l'autore non dice niente la sua serietà è da mettere in dubbio e spetterà a voi capire quali file devono essere scritti e letti dallo script ed impostarne i pemessi di conseguenza; personalmente, comunque, di script ne ho visti davvero tanti, e solo in un paio di occasioni mancavano le istruzioni su come impostare i permessi. In caso anche voi vi troviate in una simile condizione, fate un atto di generosità ed avvertite l'autore per email.
L'ultima fase è il testing dello script appena installato sul server. Cosa succede se non funziona? O, peggio, adesso che abbiamo installato lo script non sappiamo più dove andare a cercarlo.
E' difficile perdersi tra i link del proprio sito, ma a volte qualche script, se richiamato dal browser come:

http://www.vostroserver.it/cgi-bin/nomescript.cgi

risponde con strani messaggi di errore, comunque differenti dall'odiato Error 500. In questo caso, presumibilmente, bisognerà passare allo script qualche parametro, come:

http://www.vostroserver.it/cgi-bin/nomescript.cgi?admin

per fargli capire, ad esempio, che vogliamo entrare nella schermata riservata all'amministratore dello script stesso. Questo succede negli script che richiedono delle impostazioni preliminari che devono essere fatte direttamente dall'amministratore (presumibilmente voi): senza queste impostazioni, non si può accedere direttamente allo script. Comunque, non preoccupatevi: gli autori non si dimenticano mai di dirvi l'URL alla quale collegarvi per la prima esecuzione, compresi i parametri che dovrete passare allo script.

Discorso leggermente differente va fatto nel caso in cui nell'archivio dello script sia presente un file index.html o nomescript.html: probabilmente, questo file sarà appunto l'indice dello script al quale dovrete collegarvi tramite browser.

Passiamo al secondo caso: lo script si blocca ed esce con un messaggio d'errore.
Credo che pochi abbiano accesso diretto al sistema, potendo così andarsi a leggere i log.
Quindi, dovremo procedere per tentativi:

· La prima cosa da controllare sono i permessi dei file: permesso sbagliato = script bloccato

· Bisognerà poi assicurarsi di aver caricato tutti i file relativi allo script in ASCII mode.

Se ancora lo script dà problemi, controllate che la prima riga degli script rifletta la reale locazione dell'interprete Perl installato sul server. Se il webserver non trova l'interprete che deve eseguire lo script, il processo di esecuzione si bloccherà.

· Quarta cosa da controllare sarà l'impostazione delle variabili: se avete indicato directory inesistenti, o avete immesso come valore di una variabile il vostro indirizzo email come nome@host.com (che dovrebbe essere invece nome\@host.com), o ancora vi siete dimenticati di inserire qualche backslash davanti ai caratteri riservati o chissà cos'altro ancora, lo script sarà terminato prematuramente.
Il primo caso da prendere in considerazione è che state utilizzando uno script scritto su un sistema diverso: ad esempio se utilizzate uno script adatto a sistemi Unix (vuoi perchè cerca determinati moduli, vuoi perchè è strutturato in modo particolare) su un sistema Windows: in questo caso c'è veramente poco da fare, a meno di riscriversi lo script.

Il secondo caso è che stiate utilizzando uno script scritto in Unix ("in", non "per") su un server Windows: per curiosità andate ad aprire lo script con il blocco note, e cercate di capirne qualcosa. Questo perchè i due sistemi utilizzano degli standard differenti per i "Carriage Return", non contemplati (o almeno non completamente) da sistemi differenti: la soluzione è quella di aprire i file con potenti editor di testo che dovrebbero riuscire ad importare correttamente i file (da qualunque fonte essi vengano) oppure utilizzare degli appositi tools di conversione, come unix2dos o dos2unix. Ovviamente il discorso appena fatto vale sia per script Unix utilizzato sotto Wondows che viceversa. Per farvi un esempio, se da linux eseguo (direttamente da shell) uno script scritto con un editor Dos, ottengo:

Illegal character \015 (carriage return) at script.cgi line 2.
(Maybe you didn't strip carriage returns after a network transfer?)

L'interprete stesso mi parla di qualche errore legato allo "strip" dei ritorni a capo: con un "dos2unix nome_dello_script" converto il formato del file e l'errore sparisce.

L'ultimo doloroso caso è: lo script ha qualcosa che non va, ossia qualche errore di scrittura del codice (rarissimo, ma si trova). Il suggerimento è di eseguire lo script direttamente dalla shell e vedere cosa vi dice l'interprete, correggendo gli errori che vi riporta.

E con questo abbiamo finito di illustrare i passi standard per l'installazione e la configurazione di uno script sul nostro server. Come certamente avrete notato, le cose da ricordare sono molte e devono essere rispettate dalla prima all'ultima per essere sicuri che lo script non si blocchi o dia problemi: non spaventatevi, con un po' di pratica imparerete a gestire un'installazione senza troppi problemi, l'importante è avere la possibilità di eseguire le vostre prove errando e correggendo gli errori. Ed è per questo che il mio consiglio è sempre quello di installarsi in locale un webserver e l'interprete Perl.

MATLAB
FORTRAN 90
TURBOPASCAL
C/C++
PERL
JAVA
JAVASCRIPT
SCILAB
LATEX
FORTRAN 77
LINUX