PHP  »  Articoli  »  Programmazione Php 

'Warning: Cannot add header information', accorgimenti per evitarlo

di: Claudio Garau     02 Luglio 2010

Uno degli errori più frequenti che si verificano durante la realizzazione di applicazioni scritte in linguaggio PHP, consiste nel tentativo di inviare le header (intestazioni) dopo aver già spedito degli output HTML al browser; in generale un malfunzionamento del genere porta alla visualizzazione di una notifica simile alla seguente:

Warning: Cannot add header information - headers already sent by (output started at index.php:18)

Il messaggio porta con sé alcune informazioni importanti per identificare la tipologia di errore compiuto:

  • Tipo di notifica "Warning": rappresenta la notifica su un errore di minore gravità rispetto a "Parse error" o "Fatal error", infatti, in questo caso l'esecuzione di uno script non viene bloccata ma viene prodotta comunque una segnalazione relativa all'errore;
  • Errore "Cannot add header information": non è possibile inviare informazioni header senza generare un malfunzionamenti;
  • Causa dell'errore "headers already sent by": al browser è già stato inviato un output, non è quindi possibile che a questo seguano delle intestazioni;
  • Localizzazione dell'errore "output started at index.php:18": l'errore si è verificato in seguito al tentativo di caricamento della pagina "index.php".

In questa breve trattazione verranno descritti alcuni accorgimenti per evitare che l'invio delle header si traduca in una notifica di errore.

Script che possono generare errori

Di seguito verrà proposto un semplice esempio di listato che può dare origine alla notifica oggetto di queste pagine:

<?php
// istruzione per la stampa di una stringa 
echo "<h1>Output inviato al Browser<h1>";
// istruzione per il redirect verso un'altra pagina 
header("Location: http://www.sitoweb.net");
?>

Il piccolo script appena mostrato svolge alcune semplici funzioni: stampa a video una stringa di testo e rindirizza il browser verso una risorsa diversa dalla pagina corrente.

In questo caso è semplice prevedere che, essendo la stampa di una stringa in tutto e per tutto un output HTML, il redirect determinato dalla funzione header() non avrà luogo in quanto non sarà possibile inviare al browser delle intestazioni successive.

Il rindirizzamento di una risorsa implica necessariamente l'invio di un'intestazione, per questo motivo la funzione header() deve essere utilizzata prima di introdurre markup o contenuti in una pagina; ci si chiederà a questo proposito: in che modo può essere utile inserire dei contenuti in una pagina che prevede un redirect? Si pensi per esempio ad una procedura di login che sortisce esito negativo, in questo caso lo sviluppatore potrebbe avere la necessità di notificare la mancata autenticazione prima di forzare il redirect alla pagina di login:

<?php
echo "Tentativo di autenticazione fallito";
header("Location: login.php");
?>

L'esecuzione del codice proposto non potrebbe che portare alla generazione di una notifica di errore, perciò in questi si preferisce affidare l'onere del redirect ad applicazioni client side concepite per esempio in JavaScript.

Si analizzi ora un altro esempio:

 <?php header("Location: index.php"); ?>

Apparentemente si tratta di una semplice istruzione per il redirect verso una pagina definita dallo sviluppatore; come è possibile notare, la funzione header() non è preceduta da alcuna istruzione per la stampa a video o per l'invio di output al browser, eppure, anche in questo caso verrà generata una notifica di errore, infatti, il primo delimitatore del codice PHP è preceduto da uno spazio vuoto (" <?php") che è considerato anch'esso un output dal browser e impedisce il successivo invio di intestazioni.

Guide PHP

Guida Yii Framework

Come creare applicazioni Web in modo semplice e veloce con il...

Guida Zend Framework

Diventate professionisti dello sviluppo Web. Zend Framework è lo...

Guida Applicazioni Facebook con PHP

Come realizzare un'applicazione per Facebook. Dalle basi della...

Altre guide

Newsletter @PHP

Ogni lunedì, direttamente nella tua e-mail: script, articoli, guide e tutorial su PHP, MySQL e Apache.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Corso PHP per Webmaster

11 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

25 Giugno 2012 a Milano
Disponibilità: 7 Posti

Corso Google AdWords Base

05 Giugno 2012 a Roma
Disponibilità: 7 Posti