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...

Array delle nazioni del mondo e delle province italiane

Array delle nazioni del mondo e delle province italiane

Creando una qualsiasi applicazione web (ma anche desktop), può capitare molto spesso di aver bisogno di una lista delle nazioni del mondo, piuttosto che quella delle province italiane. Paradossalmente, risorse del genere sembrano quasi introvabili sul web o comunque richiedono lunghe ricerche. Qualcosa si trova, ma spesso non è nel formato che serve a ...
PHP: validare un form con le eccezioni

PHP: validare un form con le eccezioni

E' da tempo che programmo in PHP e ho avuto modo di apprezzare la programmazione OO, rispetto all'approccio procedurale, in particolare grazie al maggior supporto agli oggetti di PHP5. Vedremo in questo articolo come validare i campi di un form, utilizzando la gestione delle eccezioni, disponibili solo dalla versione 5, appunto. Darò per scontato che ...
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 ...
PHP: manipolare immagini con tre righe di codice

PHP: manipolare immagini con tre righe di codice

Oggi vi presento una classe PHP per manipolare in tutta facilità le immagini: si tratta di SmartImage del buon Alessandro Coscia di CodiceFacile. Con poche righe di codice potremo ridimensionare, croppare, convertire, ottimizzare, ruotare le immagini ed aggiungervi un watermark. Il tutto compatibile sia con PHP 4 che 5. Per prima cosa, scarichiamo SmartImage, ...
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 ...

8 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