2017-09-17 5 views
1

Nach der PHP-Dokumentation gesendet wird:Anruf header() nach der Ausgabe

header() muss aufgerufen werden, bevor eine Ausgabe gesendet wird, entweder durch normale HTML-Tags, leere Zeilen in einer Datei, oder von PHP. Es ist ein sehr häufiger Fehler, Code mit Include- oder Require-Funktionen oder einer anderen Dateizugriffsfunktion zu lesen und Leerzeichen oder Leerzeilen zu haben, die ausgegeben werden, bevor header() aufgerufen wird. Das gleiche Problem tritt auf, wenn eine einzelne PHP/HTML-Datei verwendet wird.

aber wenn ich das Beispiel versuchte, dass die Dokumentation Berichte (mit einem wenig ändern):

<html> 
<?php 
/* This will give an error. Note the output 
* above, which is before the header() call */ 
header('X-Header: http://www.example.com/'); 
exit; 
?> 

alles ganz gut gearbeitet, kein Fehler poped und ich habe glatt meinen <html> Tag in der Ausgabe und meine X-Header in den Headern.

Ich benutze PHP 7.1.9, ist also immer noch richtig, was die Dokumentation sagt?

+0

Es hängt etwas von einigen Einstellungen ab, die in der Konfiguration 'php.ini' eingestellt sind. Obwohl es nicht sinnvoll ist, die HTTP-Header nach der Ausgabe zu ändern, sollte man das Programm immer so strukturieren, dass die Header vor der Ausgabe aufgerufen werden. – Qirel

Antwort

4

Die Dokumentation ist nach wie vor richtig.

Aus Leistungsgründen legt der Interpreter die Ausgabe in einen Puffer. Wenn der Puffer zum ersten Mal gefüllt wird, sendet er die Header, bevor er den Inhalt des Puffers sendet.

Dadurch kann das Skript eine geringe Menge an Ausgabe erzeugen, bevor die Header gesendet werden.

Lesen Sie mehr über output buffering Konfigurationseinstellungen.

Die Option output_buffering ermöglicht das Ein- und Ausschalten der Funktion und sogar das Einstellen der Größe des Puffers.

Die Option implicit_flush weist den Interpreter an, den Puffer nach jedem Ausgabeblock zu löschen. Dies zwingt Ihr Skript, die Header vor jeder Ausgabe korrekt zu senden.

-1

bearbeiten Ihre php.ini und enable Output Buffering ..

+0

Es ist bereits aktiviert und es ist auf 4096 gesetzt – zer0uno

+0

Asker hat bereits eine Form der Ausgabe Pufferung aktiviert, wenn sie keinen Fehler mit diesem Codebeispiel bekommen. – jhilgeman