Chi si trova nella necessità di utilizzare Php su piattaforma Windows, e pretenda affidabilità e stabilità assolute, al momento deve necessariamente optare per Internet Information Services (il webserver Microsoft) e Php nella versione CGI.
Le ragioni per questa scelta sono almeno tre:
- In ambiente Windows il webserver Apache 1.3.x non può competere con IIS
- Apache 2.x e Php, quale che sia la piattaforma, non sono ancora perfettamente compatibili
- Il filtro ISAPI che integra Php in IIS (in modo simile ai linguaggi ASP) non garantisce ancora una stabilità sufficiente e spesso non riesce a convivere con altri moduli ISAPI.
In questo articolo esamineremo l'installazione di Php 4.3.x come CGI e Fast CGI in Windows 2000 con IIS 5, ma gran parte delle indicazioni che daremo saranno valide anche per Windows NT e XP.
Due parole su CGI e Fast CGI
La Common Gateway Interface (CGI appunto) non ha bisogno di troppe presentazioni: è una tecnologia indipendente dalla piattaforma che consente a un Webserver di chiamare qualsiasi programma esterno, prenderne l'output, racchiuderlo negli header HTTP e inviare i dati al browser.
È un protocollo relativamente semplice, e fino a qualche anno fa il binomio Perl/CGI rappresentava il sistema più diffuso per la realizzazione di applicazioni server-side.
L'unica controindicazione riguarda il pesante sovraccarico ("overhead") che, specialmente nel caso dei linguaggi di scripting, può comportare per il server: infatti ogni volta che riceve una richiesta diretta ad uno script il webserver deve caricare in memoria l'interprete del linguaggio (php.exe nel caso di Php), effettuare la compilazione del codice, eseguire le operazioni previste e catturare l'eventuale output.
Fast CGI e un'evoluzione dello standard CGI che pone rimedio all'"overhead" e consente prestazioni spesso superiori anche a quelle ottenibili con l'integrazione di un linguaggio nel webserver (attraverso i classici moduli di Apache o i filtri ISAPI per IIS ).
In Fast CGI il processo descritto poco fa non si esaurisce al termine dell'esecuzione del programma, ma persiste in memoria per un certo lasso di tempo ed è pronto a riattivarsi per soddisfare nuove richieste.
Installazione di Php CGI per IIS
Per prima cosa scarichiamo da www.php.net il "package" con la distribuzione Php per Windows, evitiamo "l'installer" (scelta comoda ma sconsigliata in ambiente di produzione) e procediamo con l'installazione manuale.
La distribuzione Php per Windows contiene due file chiamati entrambi "php.exe": uno è l'eseguibile pensato per utilizzare Una shell in PHP e si trova nella directory CLI, l'altro si trova nella directory principale ed è appunto Php versione CGI/Fast CGI.
Ecco i passaggi che dovremo seguire supponendo di aver posto l'eseguibile CGI nel percorso C:php4.3.3php.exe
- Apriamo lo snap-in (interfaccia di amministrazione) di IIS seguendo il percorso start > impostazioni > pannello di controllo > strumenti di amministrazione > gestione servizi internet
- Espandiamo l'elenco sottostante al nome della nosta macchina e scegliamo "Sito Web predefinito", quindi clicchiamo con il tasto destro del mouse e selezioniamo "proprietà", poi dal pannello "Home Directory" Configurazione > Mapping Applicazioni > Aggiungi.
- Alla voce "Eseguibile " indichiamo il path "C:php4.3.3php.exe" e come "Estensione" ".php".
- Selezioniamo le opzioni "Tutti i verbi" (se vogliamo che lo script sia accessibile attraverso tutti i metodi HTTP), "Modulo Script" e "Verifica l'esistenza del file", infine diamo "Ok".
Le operazioni ai punti 3 e 4 devono essere ripetute per ogni estensione che desideriamo faccia riferimento a Php (php3, phtml etc.etc.).
La configurazione di IIS è terminata e non ci resta che riavviare il servizio, possiamo farlo sempre dall'interfaccia di aministrazione del webserver o molto più semplicemente da prompt di DOS inviando il comando
"C:> IISRESET /restart"
Il procedimento per abilitare Php in un determinato Virtualhost o in una singola directory è analogo a quello appena visto.
Importante: impostazioni di php.ini
Il file di configurazione utilizzato da Php deve trovarsi in un percorso all'interno del "Path" di Windows, il contenuto di questa variabile d'ambiente è verificabile da "pannello di controllo > sistema > avanzate > variabili di ambiente".
Di solito si preleva il file "php.ini-dist" presente nel pacchetto di installazione e lo si pone in C:/WINNT rinominandolo "php.ini": questa sarà la configurazione che, solo con CGI, viene letta ad ogni accesso ad uno script.
Affinchè Php/CGI funzioni correttamente con IIS è necessario modificare in php.ini due direttive con i valori che indichiamo qui sotto:
cgi.force_redirect = 0
cgi.fix_pathinfo = 1
Il significato di queste modifiche è spiegato nel manuale ufficiale e nei commenti dello stesso php.ini.
Per conferma inseriamo nella webroot (default C:Inetpubwwwroot ) una pagina con il seguente codice:
<?php phpinfo() ; ?>
e diamo un'occhiata alle informazioni sulla nostra installazione.
Importante: permessi di accesso
È probabile che a questo punto gli script abbiano soltanto l'accesso in lettura a file e directory all'interno della webroot: le opportune autorizzazioni (lettura, scrittura, esplorazione) vanno verificate prima di tutto attraverso la normale gestione dei permessi di Windows 2000, e poi nelle impostazioni del webserver (pannello "Home Directory" o "Directory" descritto al punto 2 del paragrafo precedente).
Abbiamo finito, attraverso CGI ora il webserver Microsoft è in grado di eseguire anche script Php oltre alle tradizionali pagine ASP; nei prossimi paragrafi scopriremo come beneficiare dei vantaggi di Fast CGI.
Fast CGI e Php
php.exe è compatibile con Fast CGI a partire dalla versione 4.3.0 tuttavia, visto che solo di recente sono stati risolti alcuni bug, è indispensabile ricorrere ad una release pari o superiore alla 4.3.3.
Fast CGI con Internet Information Services
IIS supporta Fast CGI attraverso un modulo di terze parti che è stato pensato appositamente per Php, ma può essere sfruttato da qualsiasi linguaggio compatibile con il protocollo (Perl, Python, TCL etc.).
Installazione e configurazione
- Scarichiamo il modulo dal sito del suo autore, Shane Caraveo (url http://www.caraveo.com/fastcgi/).
- salviamo il file per IIS (isapi_fcgi.dll) in un percorso qualsiasi, ad es. C:php4.3.3fcgiisapi_fcgi.dll. L'altro file presente nel pacchetto zip (nsapi_fcgi.dll) è l'estensione per server Netscape e non ci serve.
- Eseguiamo tutti i passaggi già visti per l'installazione CGI tradizionale, ma arrivati al punto 3 inseriamo il percorso in cui si trova isapi_fcgi.dll anzichè quello di php.exe: così avremo dotato il webserver del "FastCGI Process Manager" che gestirà gli script ".php".
Ora è fondamentale aggiungere alcune voci al registro di sistema di Windows:
- raggiungiamolo con " start > esegui > regedit.exe"
- facciamo un backup del registry nel caso in cui qualcosa vada storto ("Registro di sistema > Esporta file del registro di sistema")
- Raggiungiamo la posizione HKEY_LOCAL_MACHINESOFTWARE, cliccando con tasto destro del mouse su SOFTWARE aggiungiamo una nuova chiave chiamandola ad esempio "FastCGI". Ripetiamo l'operazione su FastCGI e aggiungiamo la chiave ".php".
- Sempre utilizzando con il tasto destro del mouse inseriamo in ".php" due valori di tipo REG_SZ ("Nuovo > valore stringa"). Il primo deve chiamarsi "AppPath" a gli assegneremo il valore C:php4.3.3php.exe (il percorso dell'eseguibile php ). L'altro è "Bind-Path" con valore "php-fcgi".
In questo modo abbiamo "mappato" gli script con estensione ".php" a Php Fast CGI anzichè alla versione CGI "tradizionale", e anche quest'ultima operazione va ripetuta per tutte le estensioni da registrare.
Se tutto è andato per il meglio, dopo aver riavviato il webserver scopriremo che phpinfo() presenta alcune nuove variabili del tipo $_SERVER['FCGI_XXXX'].
Lanciando task manager ci saranno uno o più processi "php.exe" ancora attivi anche dopo che lo script avrà terminato l'esecuzione, questi sono i processi persistenti pronti a risvegliarsi per servire richieste successive.
È importante tenere presente che nel caso di Fast CGI è indispensabile riavviare il webserver ad ogni modifica del php.ini.
Conclusioni
Abbiamo visto come sia possibile utilizzare Php anche su piattaforma Windows in modo sicuro e senza penalizzare le prestazioni.
Fast CGI è una tecnologia che consente funzionalità molto più avanzate di quelle che abbiamo potuto evidenziare in questo articolo, specialmente se applicata al webserver Apache e in ambiente "Unix-like".
Nella speranza di aver suscitato almeno un po' di curiosità elenco qui sotto la maggior parte delle poche fonti disponibili sull'argomento.
Link
- Il sito ufficiale del progetto Fast CGI
- Alcune spiegazioni di Shane Caraveo (http://www.caraveo.com/fastcgi/ e http://aspn.activestate.com/)
Bibliografia
- Un testo che dedica molto spazio a Fast CGI: Apache 2.0
- Amministrazione di Internet Information Services: Windows 2000 e IIS 5.0 Guida Tascabile