In questo piccolo howto, vi mostrerò come aggirare il solito problema della funzione Header di PHP:
Warning: headers already sent by (output started ...
Per risolvere questo piccolo, ma fastidioso warning è necessario utilizzare due funzioni che php ci fornisce:
Piccolo esempio non funzionante:
<?php
/*
* Questo esempio non funzionerà, ma restituirà un warning, e quindi il redirect non verrà effettuato.
*/
echo 'Big-Bug - Community Programmazione & Linux';
header("Location: http://www.big-bug.net");
?>
ed ecco invece un esempio funzionante
:
<?php
ob_start();
/*
* Questo esempio funzionerà.
*/
echo 'Big-Bug - Community Programmazione & Linux';
header("Location: http://www.big-bug.net");
ob_end_flush();
?>
Nel primo esempio la funzione header() non funziona poichè prima di averla richiamata ho
un output restituito dal costrutto echo.
Mentre nel secondo esempio, pur avendo un output,la pagina funziona correttamente.
Questo perchè?
Come vedete,nell'esempio funzionante ho inizializzato la funzione
ob_start() ad inizio pagina, e dopo la chiamata alla funzione
header(), ho utilizzato ob_end_flush() risolvendo il problema, ed avendo uno script funzionante al 100%.