Home / Indice sezione
 www.icosaedro.it 

 Apache e PHP

Come installare l'interprete PHP 4 e 5 stand-alone e come scrivere programmi CGI con questo linguaggio.

Storico degli aggiornamenti

2004-08-21
Inizio di questa sezione.

Indice

Introduzione
PHP come modulo di estensione di Apache
PHP come interprete stand-alone per CGI
Aggiornamento
Verifichiamo il tutto
Argomenti correlati

Introduzione

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

PHP come modulo di estensione di Apache

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.

PHP come interprete stand-alone per CGI

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:

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.

Aggiornamento

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.

Verifichiamo il tutto

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

Argomenti correlati


Umberto Salsi
Commenti
Contatto
Mappa
Home / Indice sezione
Still no comments to this page. Use the Comments link above to add your contribute.