Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

PHP 5.4: il web server integrato

Impara ad usare il web server integrato nella versione 5.4 di PHP: per testare velocemente il codice dei propri script o di piccole applicazioni
Impara ad usare il web server integrato nella versione 5.4 di PHP: per testare velocemente il codice dei propri script o di piccole applicazioni
Link copiato negli appunti

Tra le funzionalità più interessanti della versione 5.4 di PHP vi è l'introduzione di un Web server integrato; una vera e propria novità appositamente pensata per le esigenze degli sviluppatori che potranno così testare rapidamente le richieste generate dalle proprie applicazioni e veicolate tramite protocollo HTTP, il tutto senza dover utilizzare una soluzione avanzata, ma più impegnativa dal punto di vista della configurazione, come per esempio Apache.

Tale strumento è stato concepito per essere impiegato unicamente in fase di sviluppo mentre non è adatto in sede di produzione, esso potrebbe certo essere utilizzato per il funzionamento di piccole applicazioni locali, ma non per servizi accessibili via Web, non integra infatti né le opzioni né i moduli necessari per garantire un accettabile livello di sicurezza per gli script.

Nel corso di questa trattazione verranno analizzate le caratteristiche principali di questo Web server.

Avvio del Web server

Il Web server di PHP 5.4 è disponibile tramite CLI (Command Line Interface o "Interfaccia da linea di comando"), per cui sarà possibile interagire con esso attraverso istruzioni da terminale; per il suo avvio è disponibile l'apposita opzione switch -s, questa dovrà essere seguita dal nome del server ospitante e dal numero relativo alla porta d'ascolto, cioè quella utilizzata dal Web server per l'attesa delle richieste; per cui, lavorando in locale, il comando d'avvio potrebbe essere simile al seguente:

php -S localhost:8080

A questo punto, la risposta all'istruzione da parte del sistema potrebbe anche essere negativa, invece di un avvio del Web server potrebbe essere infatti generata una notifica come la seguente:

Failed to listen on localhost:8080 (reason: Address already in use)

Ciò accade quando la porta selezionata è utilizzata da un altro servizio, essendo occupata essa non potrà essere impiegata dal Web server di PHP, per ovviare a tale problema sarà quindi necessario scegliere una porta differente (ad esempio la 8000) oppure arrestare il servizio occupante e quindi lanciare nuovamente il comando; in caso di esito positivo dovrebbe essere visualizzabile un output come il seguente:

PHP 5.4 Development Server started at Mon Mar 5 12:56:21 2012
Listening on localhost:8080
Document root is /home/claudio/www
Press Ctrl-C to quit.

Come impostazione predefinita la directory corrente di lavoro sarà la Web root dell'utilizzatore o più semplicemente la directory da cui è stato lanciato PHP; le richieste URI (Uniform Resource Identifier) per il reperimento di una risorsa, ad esempio un comune file, verranno messe a disposizione a partire da tale posizione se l'utilizzatore non avrà specificato una Document Root differente.

Come già accade per applicazioni dello stesso tipo, anche il Web server integrato di PHP è in grado di rendere visibile automaticamente un file predefinito, ad esempio index.php o index.html, da fornire nel caso in cui la richiesta URI effettuata non faccia riferimento ad una risorsa specifica oltre alla directory corrente; se non dovesse essere disponibile alcun file predefinito, verrà prodotta una risposta relativa al codice di stato HTTP 404 (risorsa non trovata).

Modificare nome di Host e Document Root

Nel caso in cui si abbia la necessità di chiamare il proprio server in modo diverso da "localhost", per esempio quando si vuole effettuare l'accesso da una postazione differente da quella in cui esso è stato configurato, sarà possibile lanciare il Web server integrato in PHP utilizzando un nome diverso; per far questo basterà editare il file in cui sono definiti i nomi di host per la propria macchina, ad esempio, su Linux si potrà modificare il contenuto del file /etc/hosts che in genere presenta una struttura come la seguente:

IPAddress	Hostname	Alias
127.0.0.1	localhost	mio.dominio.com
127.0.0.1	mioserver

Una volta effettuate le modifiche relative al nome di host aggiungendo i record desiderati, si potrà procedere con una nuova chiamata al Web server:

php -S mioserver:8080

Per quanto riguarda invece la Document Root, si potrebbe presentare spesso la necessità di avviare il Web server da una directory differente da quella corrente; a questo proposito è disponibile l'opzione flag -t che nell'istruzione da riga di comando va digitata dopo il numero della porta d'ascolto e accetta come argomento il percorso alla nuova Document Root.

Un semplice esempio in questo senso potrebbe essere il seguente:

php -S localhost:8080 -t /var/www/html

L'utilizzo di una Document Root diversa da quella corrente è però condizionato alle impostazioni del proprio sistema, l'utente che lancia l'istruzione dovrà infatti avere i privilegi di accesso sui file contenuti nel percorso indicato.

Gestione delle richieste di routing

I limiti del Web server integrato di PHP 5.4 si manifestano in particolare quando si ha la necessità di eseguire procedure più avanzate della gestione di elementari richieste HTTP; un esempio potrebbe essere quello relativo alle richieste di routing (instradamento), infatti, utilizzando soluzioni diffuse come Apache, è possibile risolvere problematiche come quelle relative al rindirizzamento delle richieste utilizzando delle impostazioni che potranno essere salvate all'interno di un semplice file .htaccess, esso sarà deputato all'invio di istruzioni al Web server.

Gli .htaccess non sono però supportati dal nuovo Web server di PHP, anche se cominciano ad essere disponibili in Rete delle soluzioni che tentano di simulare questa funzionalità; esiste però la possibilità di creare dei file .php per eseguire semplici operazioni di routing (PHP based router) all'interno dei quali sarebbe per esempio possibile digitare un codice sul modello del seguente:

<?php
// definizione di una variabile contenente la risorsa richiesta
$nome_file = __DIR__ . '/' . $_SERVER['REQUEST_URI'];
// controllo sull'esistenza della risorsa
if (file_exists($nome_file)) {
     // se la risorsa esiste, il Web server la restituisce
     // senza la necessità di ulteriori elaborazioni
     return false;
   } else {
     // diversamente viene incluso il file predefinito
     // per la Document Root
     include_once 'index.php';
   }
?>

Per testare il codice proposto, sarà possibile salvarlo all'interno di un file, denominato per esempio php-router.php e richiamarlo tramite il Web server integrato:

php -S localhost:8080 php-router.php

In pratica lo script non fa altro che controllare l'esistenza di una specifica risorsa richiesta sulla base del percorso ad essa associato; se questa è effettivamente disponibile, allora verrà restituita così com'è, in caso contrario l'esito sarà quello di includere il file "index.php".

Sempre a proposito di instradamento delle richieste, è possibile presentare un altro semplice esempio di codice basato questa volta sulla richiesta di immagini:

<?php
// controllo sull'estensione della risorsa richiesta
if (preg_match('/.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])){
     // se l'estensione è quella di un'immagine
     // la risorsa viene restituita dal Web server
     return false;
} else {
// in tutti gli altri casi verrà stampata a video la //seguente notifica
     echo "<h1>La risorsa richiesta non è un'immagine.</h1>";
}
?>

In questo caso l'istradamento si basa su una caratteristica precisa della risorsa richiesta, essa verrà restituita soltanto se è un'immagine.

Potenziali problemi per lo sviluppatore

Con la versione 5.4 ora anche PHP ha un suo Web server integrato come altri linguaggi, si pensi per esempio a Ruby o al framework Ruby On Rails e alla libreria WEBrick. Si tratta di una funzionalità interessante che potrebbe però presentare alcune problematiche, una di esse riguarda la natura stessa dell'applicazione, questa è stata concepita unicamente per essere utilizzata in ambiente di sviluppo, si tratta però di una raccomandazione che potrebbe essere disattesa, come dimostrato in precedenza infatti tale servizio è accessibile anche dall'esterno e ciò potrebbe porre alcuni problemi relativi alla sicurezza degli script.

In secondo luogo vi potrebbero essere dei problemi relativi al funzionamento del Web server stesso, si parla infatti di una strumento concepito per l'utilizzo in locale da linea di comando, esso può essere utilizzato per i test ma nulla esclude che il passaggio all'ambiente di produzione, basato su un Web server differente, possa portare alla manifestazione di risultati inattesi; in questo caso le procedure necessarie per la risoluzione di eventuali malfunzionamenti potrebbero rendere vano il risparmio di tempo dovuto al fatto di non aver configurato localmente un Web server di terze parti.

Infine, alcuni sviluppatori hanno fatto notare che tale funzionalità, anche se accessoria, necessiterà di manutenzione, aggiornamento ed eventuali risoluzioni di bug da parte dello staff di sviluppo di PHP, fattore che potrebbe sottrarre energie al miglioramento dell'architettura del linguaggio.

Conclusioni

Con PHP 5.4, il noto linguaggio orientato al Web è stato dotato di un Web server integrato concepito per dotare gli sviluppatori di uno strumento per i loro test che non necessita di particolari configurazioni per la gestione delle richieste HTTP; nel corso di questa trattazione sono state descritte le caratteristiche di queste applicazione e sono stati presentati alcuni esemi pratici relativi ad operazioni di avvio del servizio, modifiche di nome di Host o della Document Root e instradamento delle richieste.

Ti consigliamo anche