Purtroppo a volte mi da errore (avendo già spedito gli headers)
Dice di aver già spedito gli headers. secondo php.net:
This function will turn output buffering on. While output buffering is active no output is sent from the script (OTHER THAN HEADERS) [...]
Quindi ob_start() non serve proprio a niente. Differente il caso in cui nessun header venga spedito prima che php inizi a scrivere l'output: allora ob_start() fa il suo (sporco) lavoro redirigendo l'output in una stringa. Ma a quel punto allora è sufficiente non far scrivere nulla al proprio script. Tanto, se bisogna essere rediretti in un'altra pagina, che senso ha scrivere qualcosa a video? lo so che mille mila persone risolvono così, ma secondo me non è un metodo pulito per risolvere il problema. ipse dixit, ciao.

P.S. Mi batterò ferocemente per l'esclusione di ob_start() dalla prossima release di php