Probleme mit header-Weiterleitung unter PHP, aber nur bei Strato?
Hey zusammen,
neulich habe ich auf meinem Strato-Webspace etwas ausprobiert. Header sollen ja am Anfang des Dokuments ausgegeben und mit die(); oder exit(); beendet werden, schon ein echo kann die Weiterleitung via header("Location #"); sabotieren.
So weit, so gut - kennt man ja als Fortgeschrittener.
Allerdings kann ich auf meinem zweiten Webspace, dem selbstgehostetem, header an jeder beliebigen Stelle im Script setzen und dennoch funktionieren sie. Wie kann das sein??
In beiden Fällen ist PHP 5.9 installiert.
Funktioniert nur auf dem 2. Webspace:
<?php
echo "Nur ein Beispiel... störendes echo";
header("Location: data.php");
?>
Wieso funktioniert dieser Code auf einmal, aber PHP bei Strato wehrt sich dagegen. Gibt's ne PHP-Einstellung, die das erlaubt?
2 Antworten
Das nennt sich Output Buffering. Mehr Informationen dazu gibt es hier: http://php.net/manual/en/book.outcontrol.php
Die meisten Hoster deaktivieren Output Buffering, da sonst erstmal alles im Speicher landet und erst danach an den Browser geschickt wird.
Schreibe deinen Code so, dass er auch ohne Output Buffering funktioniert, dann hast du keine Probleme mehr.
Merci. Mein Code oben diente nur Testzwecken, normalerweise schreibe ich ihn so, dass er ohne OB auskommt. ;-)
Es gibt zwei Möglichkeiten, weshalb dieser Code funktioniert:
- Error Reporting und/oder Error Displaying ist deaktiviert, d.h. es treten ebenfalls Fehler auf, nur du siehst sie nicht.
- Output-Buffering ist aktiviert, d.h. die gesamte Ausgabe wird gepuffert, bevor sie an den Webserver weitergegeben wird. Anschließend wird sie in einem Zug an den Client gesendet. Siehe auch: http://php.net/manual/en/outcontrol.configuration.php#ini.output-buffering
Ja, das kannst du auch manuell aktivieren: http://php.net/manual/en/function.ob-start.php
Was spricht aber dagegen, deinen Code so umzubauen, dass du kein Output Buffering mehr benötigst?
Merci für die Hilfe.
Ich hatte Output Buffering im Visier, dann liegts definitv daran. Leider haben wir (soweit ich weiß), bei Strato keinen Zugriff auf die php.ini.
Weißt du, ob es einen Weg gibt, die Einstellung dennoch zu aktivieren?