Home / Indice sezione | www.icosaedro.it | ![]() |
Introduzione
PHP come modulo di estensione di Apache
PHP come interprete stand-alone per CGI
Aggiornamento
Verifichiamo il tutto
Argomenti correlati
La sigla PHP è un gioco di parole ricorsivo: "PHP: Hypertext Preprocessor". Giochi a parte, il PHP è e' un linguaggio di programmazione e uno strumento di sviluppo CGI molto pratico e relativamente facile da usare. Non per niente il linguaggio è stato creato proprio a questo scopo: nessuna ambizione di diventare un potente linguaggio di programmazione di uso generale, ma piuttosto orientato ad assolvere in modo efficace alle necessità di programmazione in ambiente WEB lato server. Ed in effetti la scrittura di piccole e medie applicazioni CGI è piuttosto immediato, soprattutto per coloro che hanno già una certa conoscenza della sintassi del linguaggio C e conoscono la tecnologia CGI. Per applicazioni piu' complesse e che richiedono strutture dati articolate, il PHP risente dei soliti difetti dei linguaggi di scripting: tipizzazione debole, scarsa efficienza di esecuzione.
Ecco la carta di identità del PHP:
Dal sito WEB ufficiale www.php.net
si possono scaricare i sorgenti e la documentazione. Per quanto riguarda la
documentazione è disponibile anche in un unico volume omnicomprensivo
che tratta dalla sintassi del linguaggio, alla documentazione delle librerie
incluse: questo manuale è molto chiaro e ricco di esempi, e non
tenterò certo di replicarlo qui. Lo scopo di questo articolo è
limitato ad illustrare le caratteristiche principali di questo linguaggio
attraverso una serie di esempi commentati che dovrebbero dare al lettore
gli strumenti per valutare da sè la sua utilità.
Due parole solo sulla installazione: le principali distribuzioni di GNU/Linux mettono a disposizione i binari preconpilati che includono sia l'interprete autonomo, sia il modolo di estensione per Apache. Il pacchetto del sorgente fornisce le istruzioni per compilare entrambe le versioni.
Questa è la soluzione adottata più frequentemente per via
della sua maggiore efficienza: in questo caso Apache viene configurato
per riconoscere come codice PHP tutti i file con estensione .php
o .php3
o .php4
, a seconda dei gusti.
In questo caso l'interprete gira con l'identita' del server Apache
(nobody:nobody, oppure apache:apache, o altro ancora) e quindi non e'
adatto per la soluzione multiutente che ci proponiamo di costruire.
Noi useremo l'interprete stand-alone, che permette di scrivere programmi
generici e torna utile anche per altre applicazioni oltre il WEB.
In questo caso il PHP e' un programma eseguibile, tipicamente collocato
in /usr/local/php-*/bin/php
o altra directory.
Le differenze tra una pagina WEB scritta usando l'interprete PHP stand-alone
e una pagina WEB scritta utilizzando l'interprete PHP integrato in Apache
sono minime:
pagina.cgi
invece
che pagina.php
. Anche la home page del sito
potra' chiamarsi index.cgi
, basta ricordarsi di
aggiungere index.cgi
alla direttiva DirectoryIndex in
http.conf
. In realta' l'estensione .cgi
l'abbiamo scelta in modo arbitrario nella direttiva ScriptAliasMatch della
configurazione di Apache. Volendo possiamo anche indicare una estensione
diversa, per esempio .php
. Sconsiglio questa soluzione.
o comunque riportare il pathfile completo dell'interprete installato. E' anche possibile indicare un file di inizializzazione specifico usando l'opzione -c, ad esempio:#!/bin/php
oppure#!/bin/php -c/home/utente/php.ini
#!/bin/php -c.
quando il file di configurazione php.ini
si trova nella stessa
directory del programma.
/bin/php4
, /bin/php5
, ecc.
lasciando /bin/php
come link simbolico alla versione piu'
recente di questo interprete.
Riguardo agli ultimi due punti relativi alla penalizzazione della soluzione CGI, bisogna considerare che questa soluzione e' adatta a server che devono supportare molti siti WEB a basso traffico e in multiutenza. Nel caso di pochi siti WEB ad alto traffico, vale la pena di dedicare un server ad ogni sito e adottare la soluzione dell'interprete integrato in Apache.
Alcune distribuzioni (Red Hat) forniscono la versione stand-alone dell'interprete PHP, spesso indicata come php-cgi o simile. Visto che gli aggiornamenti di PHP si susseguono piuttosto rapidamente e con novita' importanti, ho preferito scaricare il sorgente e ricompilarlo. La versione piu' recente nel momento in cui scrivo e' PHP 5.0.1. Di conseguenza, possiamo anche fare piazza pulita dei pacchetti binari precompilati forniti con la distribuzione.
Una volta scaricato il sorgente da
www.php.net
, scompattarlo:
$ tar xvjf php-5.0.1.tar.bz2
Io poi mi sono costruito questo piccolo script per includere
gli strumenti che mi servono, lo script si chiama php-configure
e sara' bene conservarlo per quando faremo gli aggiornamenti:
#!/bin/bash VER=5.0.1 make clean ./configure \ --disable-all \ --prefix=/usr/local/php-$VER \ --exec-prefix=/usr/local/php-$VER \ --enable-fastcgi \ --disable-rpath \ --disable-ipv6 \ --enable-ftp \ --enable-sockets \ --with-pgsql \ --enable-posix \ --enable-memory-limit
La documentazione allegata ai sorgenti illustra tutte le altre opzioni.
Ad esempio, per il supporto di MySQL al posto di PostgreSQL si dovra'
mettere --with-mysql
. Naturalmente e' possibile integrare
entrambi i moduli. Per aggiungere o togliere moduli a PHP bisogna
modificare lo script php-configure
che abbiamo creato
aggiungendo o togliendo le opzioni di volta in volta necessarie, e quindi
bisogna ripetere la trafila.
Notare che il make clean
costringe ogni volta a
ricompilare tutto da capo: purtroppo esistono delle opzioni che non basta
aggiungere/togliere dal configure perché ciò abbia effetto,
ma bisogna proprio cancellare tutto il codice generato prima.
E' questo proprio il caso di --enable-memory-limit
.
NOTA. La funzionalità di memory limit è sempre abilitata a partire
da PHP 5.2.1; a partire da questa versione l'opzione di configurazione
--enable-memory-limit
è stata rimossa.
Posizionarsi ora nella directory di PHP ed eseguire il configure tramite il nostro script e gli altri comandi consueti per la compilazione e l'installazione:
$ cd php-5.0.1 $ ../php-configure $ make $ su # make install # ln -sf /usr/local/php-5.0.1/bin/php /bin/php
L'ultimo comando imposta un link simbolico dell'interprete PHP e lo
posiziona in /bin/php
: poiche' dovremo usarlo spesso,
conviene che l'interprete sia posizionato in un posto comodo e che il
path sia breve.
Ecco come si potrebbe presentare una semplice pagina di esempio:
#!/bin/php <HTML> <BODY> <H1>I primi dieci numeri naturali:</H1> <? for( $i=1; $i<=10; $i++ ){ echo("$i<br>\n"); } ?> </BODY> </HTML>
Salvare questo testo nel file test.cgi
all'interno
dello spazio WEB di un qualche dominio, per esempio in
/home/tizio/public_html/
e renderlo eseguibile con
chmod +x test.cgi
.
Ricorda che il file deve appartenere all'utente tizio
e al
gruppo users
, altrimenti SUEXEC si rifiutera' di eseguirlo.
Come regola generale, e' bene scrivere e modificare i programmi CGI eseguendo
sempre il login come l'utente proprietario: in questo modo la
proprieta' del file risultera' sempre corretta. Se sei root
,
il comando su - tizio
ti fara' diventare immediatamente
l'utente tizio
senza necessita' di eseguie un login regolare.
Esegui il programma CGI da linea di comando per controllare se funziona,
dando il comando ./test.cgi
. Controlla che esca la corretta
intestazione MIME e il corretto body:
$ ./test.cgi Content-type: text/html X-Powered-By: PHP/5.0.1 <HTML> <BODY> <B>I primi dieci numeri naturali:</B><P> 1<br> 2<br> 3<br> 4<br> 5<br> 6<br> 7<br> 8<br> 9<br> 10<br> </BODY> </HTML>
Adesso siamo pronti per provare anche con il browser puntandolo all'URL
http://www.tizio.casa/test.cgi
, che dovrebbe mostrare questo:
I primi dieci numeri naturali:1
2
3
4
5
6
7
8
9
10
Se qualcosa va storto, come sempre dovremo andare a leggere i file di
log di Apache. Le prime volte conviene tenere sempre aperto un terminale
dove avviare il comando tail -f /var/log/httpd/*
oppure
tail -f /var/log/apache/*
(il path corretto dipende dalla
installazione fatta).
Umberto Salsi | Commenti | Contatto | Mappa | Home / Indice sezione |
Still no comments to this page. Use the Comments link above to add your contribute.