PHP: visualizzare il sito web mentre è in manutenzione

Creato il 09 maggio 2010 da Dymissy

Una volta che il sito web è stato pubblicato, spesso si ha bisogno di effettuare dei piccoli lavori di manutenzione che richiedono l’accesso al sito web ai solo sviluppatori, escludendone l’accesso ai visitatori. Oppure, prima della pubblicazione ufficiale, si ha bisogno di effettuare testing sul progetto o, semplicemente, farlo vedere al cliente.

Una soluzione a questi problemi è utilizzare htaccess è consentire l’accesso a determinati indirizzi IP reindirizzando tutte le altre richieste ad una pagina di cortesia restituendo l’errore 503. Purtroppo però sappiamo bene che gli IP non sono quasi mai fissi e cambiano ad ogni nuova connessione.

Una soluzione più semplice è utilizzare una piccola riga di codice PHP in cima alle pagine del nostro sito web. Vediamo di cosa abbiamo bisogno per consentire l’accesso al sito web senza utilizzare un login.

Maintenance.php

Innanzitutto abbiamo bisogno di una pagina che restituirà l’errore 503 sia ai visitatori che ai motori di ricerca. E’ molto importante che la pagina restituisca questo errore perchè esso contiene anche un parametro molto importante, Retry-After, che indica ai motori di ricerca dopo quanto tornare a far visita alla pagina.

Abbiamo bisogno di una semplicissima pagina html di cortesia che, ad inizio pagina, contiene del codice PHP per la modifica dell’header. Il codice PHP necessario all’inizio della pagina è il seguente:

view sourceprint?

1 <?php

2  header('HTTP/1.1 503 Service Temporarily Unavailable',true,503);

3  header('Status: 503 Service Temporarily Unavailable');

4  header('Retry-After: 172800'); //48ore

5 ?>

Il parametro Retry-After è stato settato a 172800 secondi che corrisponde a 48ore, ovviamente tale valore va impostato a seconda delle esigenze.

Controllo mode

All’interno di ogni pagina, poi, abbiamo bisogno di effettuare un piccolo controllo. La soluzione più semplice consiste nel passare un parametro GET da noi scelto che, se settato ad un determinato valore, restituisce la pagina corretta, altrimenti reindirizza alla pagina di manutenzione.

Un semplice esempio di codice è il seguente:

view sourceprint?

1 <?php if($_GET['mode']!='1') header('Location: manteinance.php'); ?>

Ho utilizzato il parametro mode che, se settato ad 1, visualizzerà la pagina; in caso contrario reindirizzerà alla pagina di cortesia.

Vediamo però una demo dell’articolo seguendo i seguenti link. Nel primo verremo indirizzati ad una pagina di cortesia, nel secondo invece visualizzeremo correttamente la pagina richiesta. Con il terzo link è possibile scaricare l’esempio contenente i due file.

Demo 1 Demo 2 Download esempio

Conclusioni

La soluzione proposta può sembrare macchinosa perchè se il progetto ha molte pagine bisognerebbe modificarle tutte. Un progetto grande, però, spesso include in ogni pagina un file di configurazione che contiene funzioni, variabili, ecc. Tale soluzione può essere inserita all’interno del file di configurazione così da richiamarla in ogni pagina senza doverle modificare tutte.