3 commenti php

Il costrutto header() di php assume particolare importanza in quanto permette di aggiungere, oltre a quelli predefiniti, header addizionali alla risposta HTTP da rendere al browser insieme (o in sostituzione) del risultato dello script.

Ma cosa sono gli headers? 

Il browser client durante la navigazione su un sito si sta collegando ad un web server: il browser invierà delle "richieste" ed il server gli ritorna delle "risposte".

Queste richieste e queste risposte sono definite headers e contengono al loro interno delle informazoni: alcune sono essenziali per consentire la regolare navigazione altre sono puramente informative.

Tra gli header inviati dal browser al server (tecnicamente detti request headers) i più importanti vi sono ad esempio "Cookie" e "User-Agent", ovvero l'ip. 

 

Il costrutto header() di php consente, invece, di far inviare dal server delle "risposte" (response headers) in relazione ad una determinata pagina Web. Il loro utilizzo deve essere fatto con attenzione in quanto il file non deve generare alcun output prima della loro esecuzione: in tal caso si genera un errore di tipo Warning che recita "Cannot modify header information - headers already sent by...".

 

Vediamo alcuni dei più utilizzati sono i seguenti headers reponse da inviare con la funzione header() di php.

 

 

ESEGUIRE UN REDIRECT

Il reindirizzamento può avvenire verso un'altra pagina (interna o esterna al sito); inoltre, essendo un redirect, per evitare di generare output dopo l'header può essere opportuno interrompere l'esecuzione ulteriore del codice con il costrutto exit:

<?php
header("Location: www.sito.it");
exit;
?>

 

Il suo utilizzo è incompatibile con qualsiasi altro output. Quindi, nella pagina contentente un reindirizzamento non può prevedere stampa a video di nessun genere (nemmeno righi bianchi!).

 

 

REDIRECT TEMPORIZZATO

<?php
header('Refresh: 5; url=http://www.miosito.it/');
echo "Sarai reindirizzato fra 5 secondi";
?>

 

 

MODIFICARE IL CONTENT TYPE: LA TIPOLOGIA DI FILE PRODOTTA

Un file php può generare in output vari tipi di file (immagini, mp3, pdf, excel, etc etc). In questi casi si dovrà "dire al browser" il tipo di file che ci apprestiamo a generare come output.
I più utilizzati sono i seguenti:

<?php
// in caso file immagini si potrà avere alternativamente
header('Content-Type: image/jpeg');
header("Content-type: image/png");
header('Content-Type: image/bmp');

// file compressi
header('Content-Type: application/zip'); 

// pdf
header('Content-Type: application/pdf'); 

// mp3
header('Content-Type: audio/mpeg');
?>

 

 

FORZARE IL DOWNLOAD

<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="file.zip"'); 
header('Content-Transfer-Encoding: binary');

readfile('file.zip');
?>

 

 

DISABILITARE LA CACHE DEL BROWSER

<?php
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header('Pragma: no-cache');
?>

 

 

LE PAGINE DI ERRORE

<?php
// pagina non trovata
header('HTTP/1.1 404 Not Found');

// divieto di accesso
header('HTTP/1.1 403 Forbidden');

// pagina web spostata definitivamente
header('HTTP/1.1 301 Moved Permanently');

// fallimento di una richiesta del server
header('HTTP/1.1 500 Internal Server Error');
?>

 

Vai alla lezione successiva

Vai alla lezione precedente

Olimpio Romanella

Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.

Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.

3 Commenti presenti

avatar Piermarcello Piazza

Piermarcello Piazza

15 October 2013 ore 23:19

L' header ci da anche una stime della bontà o dell' autorevolezza del server.

avatar Piermarcello Piazza

Piermarcello Piazza

03 May 2013 ore 13:31

It's very usefu for me this paper and very inportant for my hopes!!!
Thank you

avatar Luca Bonaldo

Luca Bonaldo

26 September 2012 ore 09:45

Ottimo articolo molto specifico :)