Anti intrusione - Copertina - NWE |
Articolo
PHP: Introduzione
Questo articolo non vuole in nessun modo essere né una guida esaustiva
all'uso di php, né un articolo generico che ne elogia i meriti senza mai
entrare nello specifico; è semplicemente la testimonianza di chi come
me ha scoperto le immense potenzialità dell'HTML dinamico e la semplicità
di utilizzo di uno strumento come il php integrato al potente web server
apache. Per chi non ne avesse mai sentito parlare, per sommi capi, php
è un modulo di apache (il server web più diffuso per sistemi unix) che
consente, agendo assieme al web server, una gestione semplice, efficace
ed esaustiva, di pagine web dinamiche, costituendo una soluzione completamente
alternativa all'implementazione di cgi, javascript, e allo stesso tempo
potrebbe esser visto come la alternativa unix agli asp della microsoft
(a tale proposito per inciso esiste un convertitore asp2php che consente
di passare dall'uno all'altro e che mi dicono funzioni molto bene; io francamente
non ho mai avuto la necessità di utilizzarlo non avendo troppo in simpatia
i prodotti proprietari microsoft). In questo articolo, del tutto generico,
sarà posta particolare attenzione all'installazione di php (al momento
in cui scrivo esiste la versione 3.0.7); verranno successivamente esposti
alcuni esempi di utilizzo delle principali funzioni che toccheranno gli
argomenti più disparati; nel prossimo articolo vedremo invece nel dettaglio
come implementare sul proprio web-server un servizio rudimentale di lettura/scrittura
di mail protetto da un'elementare forma di autenticazione realizzata in
php. Ribadisco che l'articolo non è in nessun modo esaustivo sui concetti
trattati, ma vuole essere una rapida introduzione con qualche esempio perché
i più scettici si rendano conto delle effettive stupefacenti potenzialità
di questo prodotto.
Dovendo PHP interagire direttamente con il web server, occorre
che venga compilato insieme proprio ad apache. Supporremo di seguito che
esista sul nostro pc una versione funzionante di apache e che venga creato
un link simbolico dalla directory /www che porti alla rootdir del web server.
Così ad esempio se sulla mia macchina apache si trove installato in /usr/local/apache,
occorrerà fare quanto segue :
ln -s /usr/local/apache /www
Sorgenti
di Apache versione 1.3.6 oppure se fosse uscita una versione
nuova la
sezione web-servers su linuxberg
Sorgenti
di php versione 3.0.7 oppure se fosse uscita una versione nuova
la
sezione develop-languages su linuxberg
Librerie
GD 1.3 oppure se fosse uscita una versione nuova la
sezione develop-libs su linuxberg
Imap
4.5 oppure se fosse uscita una versione nuova la
sezione server-mail su linuxberg
Se intendete utilizzare il supporto per MySQL dovrete disporre ovviamente
di una versione funzionante di MySQL disponibile sempre su linuxberg nella
sezione Server-database
Poiché è possibile che abbiate in futuro bisogno di ricompilare php per implementare differenti funzioni, vi consiglio di lasciare nella directory /usr/src i sorgenti scompattati almeno di apache e php, nonchè di imap.
Una volta ottenuti i file necessari passiamo a scompattarli nella directory /usr/src come segue (supponiamo che li abbiate salvati nella directory /ftp che sul mio pc è un link simbolico a /home/ftp/pub):
cd /usr/src
tar xfvz /ftp/apache_1.3.6.tar.gz ./
tar xfvz /ftp/php-3.0.7.tar.gz ./
tar xfvz /ftp/imap-4.5.tar.Z
cd /usr/local/lib
tar xfvz /ftp/gd-1.3-4.tar.gz ./
Per prima cosa compiliamo le librerie gd in /usr/local/lib semplicemente
digitando il comando make all'interno di /usr/local/lib/gd1.3-4, dopodiché
passeremo alla configurazione di imap e alla compilazione di php:
per esser compilato con imap occorre non installare tutto il pacchetto,
bensì esclusivamente una libreria ed alcuni header. Per compilare le librerie
di imap occorre portarsi in /usr/src/imap-4.5 e digitare:
make sl4 # per un sistema libc5 che usa -lshadow
make slx # per un sistema glibc che usa -lcrypt
una volta compilato occorre copiare alcuni file:
cp c-client/c-client.a /usr/local/lib
cp c-client/rfc822.h /usr/local/include
cp c-client/mail.h /usr/local/include
cp c-client/linkage.h /usr/local/include
ldconfig
Ora passiamo ad apache e php3:
cd /usr/src/apache_1.3.6
./configure --prefix=/www
cd ../php-3.0.7
./configure --with-mysql=/usr/local/mysql --with-apache=../apache_1.3.6 --with-imap --with-gd=/usr/local/lib/gd1.3-4 --enable-track-vars
make
make install
cd ../apache_1.3.6
./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a
make
Ora dobbiamo copiare l'eseguibile appena compilato di apache nella sua directory di installazione; per far questo occorre che il demone httpd non sia in funzione: se lo fosse basta digitare 'kill -9 httpd' , dopodiché si può copiare il nuovo:
cp src/httpd /www/bin
Ora copiamo il file di inizializzazione di php (editatelo semmai per rispondere meglio alle vostre esigenze) :
cd ../php-3.0.7
cp php3.ini-dist /usr/local/lib/php3.ini
Ultimo passo è editare il file di configurazione di apache per fargli sapere che esistono le estensioni php che vogliamo, quindi occorrerà che tra gli AddType del file /www/conf/httpd.conf ci siano:
AddType application/x-httpd-php3 .php3
AddType application/x-httpd-php3 .phtml
AddType application/x-httpd-php3-source .phps
Vedrete che la ultima riga diverrà particolarmente utile in fase di debug degli errori che inevitabilmente si commettono quando si scrive un po' di codice.
Finalmente abbiamo finito la fase di installazione e possiamo passare
a divertirci con le funzionalità di php, ma prima dobbiamo ovviamente
riavviare httpd semplicemente digitando /www/bin/httpd
Alleluja... comincia il divertimento.
Il primo passo è ovviamente la verifica che il modulo php sia effettivamente installato e funzionante; per far questo creiamo subito la nostra prima pagina php con un file che chiameremo test.phtml così fatto:
--begin file test.phtml--
<?php
echo "Ciao mondo! (mi sembra familiare!!??)<BR>";
?>
Facile, no ?
--end file test.phtml--
Ciao mondo! (mi sembra familiare!!??)
Facile, no ?
Ed andando a visualizzare il sorgente vi accorgerete che sono scomparse
tutte le righe di codice all'interno dei tag <?php ... ?> ad eccezione
di quanto vogliamo mandare in output con il comando echo.
Da questo primo piccolo test possiamo subito renderci conto di come
generare contenuto html da un file php: con il comando echo, e a
tale proposito vediamone rapidamente la sintassi:
echo "stringa da visualizzare".$variabiledavisualizzare.
"altra stringa"
... ;
Tramite il comando echo mandiamo in output il sorgente della pagina html che l'utente vedrà; tutto cio che è preceduto dal simbolo del "$" viene interpretato e tradotto come una variabile; per visualizzare una riga che debba essere composta da stringhe fisse e variabili possiamo utilizzare l'operatore '.' che si occupa di concatenare delle stringhe, oppure strutturare una serie di comandi echo. Del tutto equivalente al caso precedente sarebbe stato un costrutto del tipo:
echo "stringa da visualizzare";
echo $variabiledavisualizzare;
echo " altra stringa";
Vediamo anche subito un altro importante elemento di php: ogni comando
è separato dal successivo mediante l'operatore ";"
Chi ha un po' di dimestichezza con il C si sarà accorto che
la sintassi di php è molto simile, in effetti andando a spulciare la reference
guide di PHP si trovano molti costrutti del tutto simili.
Un'altra informazione che possiamo trarre dal primo test è che non
è necessario che una pagina .phtml sia scritta interamente in php:
si può tranquillamente utilizzare la sintassi tradizionale dell'html,
e poi quando ve ne sia la necessità inserire codice php mediante i tag
<?php ...?>
Non posso, per esigenze di spazio, dilungarmi in questa sede sulla sintassi e le sottigliezze, fornirò di seguito una spcie di tips che consentiranno di utilizzare con successo le più comuni funzionalità php.
Ne abbiamo visto sopra un utilizzo sommario; ci sono però in questa maniera dei caratteri che non possono esser visualizzati, come ad esempio il "$" o i doppi apici; per utilizzarli occorre farli precedere dal "\" che, proprio come in C, dice al compilatore di non interpretare il carattere che segue, ma di trattarlo come semplice testo.
Abbiamo detto che in php una variabile è identificata dal segno di
"$" che la precede. Non è necessario dichiarare il tipo di variabile che
si intende utilizzare, all'atto dell'inizializzazione le viene assegnato
automaticamente un tipo; fondamentalmente si ha a che fare con tipi "int" (interi)
e tipi "string" (stringhe). Non esistono in php i tipi "boolean" TRUE
e FALSE
.
L'operatore di assegnazione è "=", quindi :
$intero=5 assegnerà alla variabile intero il valore 5
$stringa="Ciao mi chiamo Paolo" assegnerà alla variabile stringa il valore "Ciao mi chiamo Paolo"
$secondointero=$intero+2 assegnerà alla variabile $secondointero il valore 7
Potete divertirvi a verificare l'output di questo secondo test:
--begin file test2.phtml --
<?php
$a=1 ;
$b=4 ;
$nome1="\"Paolo " ;
$nome2="sono " ;
$nome3="io \"" ;
$nome4=$nome1.$nome2.$nome3 ;
echo $a."<BR>";
echo $a++."<BR>";
echo $a+$b."<BR>";
$a=1;
echo ++$a."<BR>";
echo $a+$b."<BR>";
echo $nome1.$nome2.$nome3."<BR>" ;
echo $nome4."<BR>";
?>
--end file test2.phtml --
La cosa che più mi ha colpito di php è la straordinaria versatilità con cui si passano le variabili. Ricordate i noiosissimi cgi che si dovevano occupare del parsing delle variabili che venivano passate da una pagina all'altra? ...dimenticateli: con php potete passare le variabili e renderle disponibili per il trattamento ad una pagina successiva semplicemente chiamandole per nome e dandogli un valore. Il classico utilizzo di questo tipo si ha passando tramite un form delle variabili. Supponiamo quindi di avere una pagina form.html che passa dati ad una pagina formoutput.phtml . Il form di form.html è così strutturato:
--begin file form.html --
<FORMMETHOD="POST" ACTION="formoutput.phtml">
<INPUTTYPE="text" name="mionome" value="">
<BR>
<INPUTTYPE="text" name="miocognome" value="">
<BR>
<INPUTTYPE="submit" value="stupiscimi">
</INPUT>
</FORM>
--end file form.html --
Questa form genererà una chiamata del tipo:
http://localhost/formoutput.phtml?mionome=valore1&miocognome=valore2
dove ovviamente i due valori sono il testo che voi avete inserito nei
campi text; ebbene ora stupiamoci del fatto che la pagina che viene chiamata
avrà già fatto da sé il parsing della stringa passatale e saprà già che
la variabile $mionome sarà "valore1" mentre $miocognome sarà "valore2".
Verifichiamolo implementando il file formoutput.phtml :
--begin file formoutput.phtml --
<?php
echo $mionome."<BR>";
echo $miocognome."<BR>";
?>
--end file formoutput.phtml --
--begin file passami.phtml--
<?php
$nomevar="Ciao caro";
echo "<A HREF=\"passato.phtml?quelchevoglio=$nomevar&veramente=si\">Clikkami</A>";
?>
--end file passami.phtml--
--begin file passato.phtml--
<?php
echo $quelchevoglio."<BR>";
echo $veramente;
?>
--end file passato.phtml--
Avrete certamente già capito che quello che vogliamo fare in questa sede è implementare una pagina php che ci consenta di emulare formmail, il cgi in perl che consente di inviare una e-mail a partire da una interfaccia web riempiendo dei campi testo.
void mail (string to, string subject, string message, string additional_headers)
Ovvero per capirci:
mail ("gabanaz@usa.net" , "Ho letto con piacere il tuo articolo sul
PLJ" , "Ciao Paolo \n Hai scritto un bellissimo articolo \n Tua Ludovica"
, "From: ludovica@sexynet.com");
Anche variabili stringa sono bene accette.
A questo punto abbiamo tutti gli strumenti per implementare il nostro formphpmail.
--begin file formphpmail.html--
<FORMMETHOD="POST" ACTION="formphpmail.phtml">
<B>To :</B>
<INPUTTYPE="text" name="destinatario">
<BR>:
<B>From :</B>
<INPUTTYPE="text" name="mittente">
<BR>
<B>Subject :</B>
<INPUTTYPE="text" name="subject">
<BR>
<B>Messaggio :</B>
<BR>
<textarea name="messagebody" rows=6 cols=50>
</textarea>
<BR>
<INPUTTYPE="submit" value="Invia">
</FORM>
--end file formphpmail.html--
--begin file formphpmail.phtml--
<?php
mail ("$destinatario" , "$subject" , "$messagebody" , "From: $mittente\nX-Mailer:
PHP /".phpversion());
echo "The following email was sent:";
echo "<BR><BR><BR>";
echo "Mail To: $destinatario<BR>";
echo "From: $mittente<BR>";
echo "X-Mailer: PHP/".phpversion()."<BR>";
echo "Subject: $subject<BR><BR>";
echo "$messagebody";
?>
--end file formphpmail.phtml--
Il funzionamento dei due file, dopo aver letto il contenuto di questo
articolo, è abbastanza intuitivo e non mi ci dilungherò ulteriormente.
Anticipo ai lettori che non è stato, per motivi di chiarezza e semplicità,
trattato il campo fondamentale della gestione degli errori; è forse necessario
per rendere operativo il tutto effettuare dei controlli sulle variabili,
mediante il comando ereg_replace, che verrà affrontato nel prossimo articolo;
per il momento è tutto.
Anti intrusione - Copertina - NWE |