5 Mar 2011 5 commenti
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'); ?>
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.
Raffaele
08 February 2019 ore 17:12