|
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.
|