Na localu pewnie działa, bo PHP ma włączony output buffering i wszystko z automatu leci przez bufor - zatem błąd nie występuje.
ob_start to ręczne wymuszenie tego bufora i musi się znaleźć bezwzględnie na początku pliku PHP. Inna rzecz, że to w zasadzie hack. Nie byłby on potrzebny gdybyśmy się trzymali zasady podziału aplikacji. Każda aplikacja webowa jest jak cebula (czy tam ogr): ma warstwy. Jedną z warstw jest logika, inną - prezentacja. Jeśli wszystkie szablony wywali się do osobnych plików i będzie wyświetlać tylko wtedy, gdy trzeba o tego typu błędach można po prostu zapomnieć. Wówczas bowiem PHP najpierw przemieli wszystkie warunki i przekieruje gdzie trzeba, a dopiero później się zajmie wyświetlaniem czegokolwiek jeśli jest to potrzebne.
Zatem najlepsze rozwiązanie to oddzielenie logiki aplikacji od prezentacji, czyli inaczej: skorzystanie z systemu szablonôw - https://pornel.net/szablony Tego typu rzecz jest dodatkowo genialnym wstępem do poznania wzorca MVC, wciąż będącego najpopularniejszym wśród aplikacji webowych.