BigThink

PHP trick: inviare header dopo aver scritto nella pagina

Mi è capitato spesso nella mia carriera di programmatore PHP di trovarmi di fronte a questo errore:

Warning: Cannot modify header information - headers already sent by

E’ un problema che incorre quando tentiamo di inviare informazioni header, dopo aver già mandato del contenuto ad una pagina: ad esempio se abbiamo scritto qualcosa e proviamo a fare un redirect.
In codice:

echo "ciao";
if($pippo)
    header("location: pippo.php");

Ci sono vari modi per risolvere il problema, a seconda della situazione e delle vostre possibilità:

1. Per prima cosa provate a vedere se potete rifattorizzare il codice, in modo da fare prima il redirect e poi scrivere sulla pagina: magari è sufficiente un altro if e si risolve tutto.

2. Se abbiamo accesso al file di configurazione php.ini, basterà abilitare il buffering:
output_buffering = On.

3. Nel caso fossimo su un hosting che non ci permette questo tipo di modifiche, dovremo abilitare il buffering direttamente da codice. All’inizio della pagina php in questione scrivete:

ini_set('output_buffering', 'On');

4. Se nemmeno questo dovesse funzionare, dovremo ricorrere alle funzioni di php per il buffering della pagina. Inseriamo questa funzione prima del nostro codice:

ob_start();

Quindi alla fine della pagina inseriamo:

ob_end_flush();

In questo modo avremo risolto i nostri problemi. Praticamente la prima funzione trattiene nel buffer tutto il contenuto della pagina, che solo alla fine verrà rilasciato come output. Sembrerebbe funzionare anche tralasciando la seconda funzione, ma credo che sia più corretto così.

Un’ultima curiosità. Nel mezzo delle due funzioni, potremo salvare in una variabile il contenuto del buffer tramite questo codice:

$content = ob_get_contents();

Spero che questo PHP trick vi torni utile. Alla prossima.

Articolo scritto da Ghido

Fondatore di BigThink.it, si occupa dello sviluppo e del coordinamento dei progetti tecnologici. Specializzato nel Marketing su Facebook e nello sviluppo di Applicazioni Social, fa consulenza e formazione ad aziende ed agenzie.

Leggi anche...

Creare un database di testo in PHP

Creare un database di testo in PHP

Spesso potremmo aver necessità di utilizzare un database. Tuttavia, se si tratta di un piccolo script che non useremo spesso, invece di andare a creare tabelle su MySQL, possiamo utilizzare un semplice file di testo e andare a scrivere e leggere delle stringhe. E' chiaro che le limitazioni sono molte: deve trattarsi di una mole ...
Risorse per creare un'applicazione Facebook in PHP

Risorse per creare un’applicazione Facebook in PHP

Facebook è ormai un fenomeno di massa, perchè non approfittarne? Da bravi programmatori PHP quali siamo, ci sarà pur venuta la curiosità di creare una nostra applicazione Facebook, giusto per sperimentare qualcosa di nuovo o magari per promuovere il nostro sito o blog. E' giunto allora il momento di buttarci ed iniziare a studiare ...
Twitter: c'erano una volta le API

Twitter: c’erano una volta le API

Eccoci alla seconda puntata della miniserie di Camu. Se la prima puntata era dedicata agli Hook di WordPress, oggi si parlerà delle API di Twitter e nella prossima metteremo tutto insieme. Oggi, quando nel gergo informatico si parla di API, non ci si riferisce a quei simpatici insetti che producono il miele e ci ...
Una cache per il numero di iscritti a Facebook e Twitter

Una cache per il numero di iscritti a Facebook e Twitter

Visualizzare il numero di followers su twitter e di fan su facebook è molto oneroso in termini di tempo per il nostro blog. I server sempre sovraccarichi di questi social network minano i tempi di caricamento in modo notevole. Chiunque abbia provato a recuperare in formato testuale questi valori, in particolare quelli relativi a ...
PHP tip: ordinare un array di date

PHP tip: ordinare un array di date

Come spesso accade, mi trovo ad affrontare alcuni problemi durante i miei lavori in php e ne approfitto per condividere con voi le soluzioni. Oggi vediamo come ordinare un array di date in php. Solitamente, per ordinare un array numerico o di stringhe, si usa la funzione sort, piuttosto che asort per gli array associativi. ...

7 Commenti

  1. Ciao,
    navigando alla ricerca di una guida per correggere il famigerato warning “Cannot modify header information”, sono capitato sul tuo blog. LA tua ottima guida,purtroppo non ha risolto il mio problema…

    Fortunatamente sono riuscito a sistemare le cose semplicemente aprendo il file con il blocco note e salvando non come codifica UTF-8 ma come ANSI… evidentemente il mio editor (netbeans) inseriva qualche schifezza in apertura del file… cosicché la chiamata all’header non era più la prima istruzione della pagina e, di conseguenza, si generava l’errore…

    Lo segnalo solo per completezza all’articolo che, comunque è davvero ottimo :)

    Ciao e buona giornata

    -JeKo-

    23 giugno 2009, 16:19
    • Ciao Jeko, grazie per aver condiviso la tua soluzione, integrando il mio post ;)

      24 giugno 2009, 01:45
      • DoZ

        Ciao ragazzi, e grazie anche di essere passati sul mio blog.
        In effetti c’ho sbattuto la testa non poco primo di provare quell’ultima soluzione …che per fortuna si è rivelata quella decisiva! ;)
        CIAO!!

        24 giugno 2009, 20:08
  2. Ghido

    [Comment ID #802 Will Be Quoted Here] ;)

    4 ottobre 2008, 22:35
  3. tra l’altro ho installato lo script in 2 domini e in uno solo dei 2 mi dà l’errore. quindi ci ho perso non so quanti notti in cerca di trovare l’inghippo! :(
    be almeno ho risolto! meglio tardi che mai! :)

    4 ottobre 2008, 20:47
  4. Ghido

    [Comment ID #800 Will Be Quoted Here]
    Grazie per la… “testimonianza”, mi fa piacere che sei riuscito a risolvere. Quel warning è davvero tra i più antipatici!

    4 ottobre 2008, 20:38
  5. Ciao, da tempo lotto contro questo problema e ci ho perso delle ore di sonno!
    Io sono su hosting Aruba e ho risolto con il metodo 4.
    Finalmente quel cavolo di errore è sparito dal mio guestbook!!!
    ciao.

    Scrivi info molto utili, mi sono abbonato subito ai feeds!

    4 ottobre 2008, 20:31

1 Citazioni