ob_start und ob_end_flush sind eine schnelle Lösung.
Das Problem ist, dass du versuchst HTTP-Header mitzusenden, aber schon Teile der Webseite an den Browser geschickt hast.
Mit den zwei Funktionen bufferst du die Ausgabe und gibst erst am Ende alles an den Browser zurück. So kannst du auch zwischendrin noch Header setzen.
Meine PHP-Kenntnisse sind schon gute 10 Jahre her, aber irgendwie so sollte es ausschauen:
https://pastebin.com/hAD5AzUR




Zitieren