4 Stimmen

php headers_sent Funktion funktioniert nicht

<h1>Header</h1>
<?php
echo 'teste'; // output here
echo headers_sent(); // no output here!
?>

Warum wird headers_sent() in diesem Fall nicht ausgegeben? Ich danke Ihnen.

4voto

Kamil Szot Punkte 16381

Schauen Sie in Ihre php.ini-Konfigurationsdatei und suchen Sie nach einer Zeile mit output_buffering und stellen Sie sicher, dass es so aussieht:

output_buffering = Off

Wenn Sie sie ausgeschaltet haben, dann echo headers_sent() sollte ausgeben 1

Wenn Sie es eingeschaltet haben, dann echo headers_sent() wird nichts ausgeben, weil headers_sent() in diesem Fall FALSE zurückgibt, weil Header (also nicht HTML <h1> aber HTTP-Antwort-Header) wurden noch nicht gesendet, da die Ausgabe gepuffert wird.

Um das Senden der Kopfzeilen und der bisherigen Ausgabe zu erzwingen, können Sie flush()

2voto

Jim Punkte 18298

Weil sie true oder false zurückgibt.

var_dump(headers_sent());

Sollte angezeigt werden (das eine oder das andere unten)

bool(true)
bool(false)

Es funktioniert, es wird nur kein Text ausgegeben, wenn sie falsch ist , da es sich nicht um Text handelt es ist ein boolean Wert. Die allgemeine Verwendung dieser Funktion ist für eine if-Anweisung gedacht, nicht für eine anzeigende Anweisung; wenn Sie sie anzeigen möchten, verwenden Sie einfach die ternary operator

echo (headers_sent())?'true':'false';

Editar

Danke an Victor für die Korrektur: Bei true wird 1 zurückgegeben, bei false eine leere Zeichenkette.

Update

Warum ist headers_sent() return false? Nun, um zu klären, werde ich aus dem Handbuch posten:

headers_sent - Prüft, ob oder wo Kopfzeilen gesendet worden sind

Wenn Sie eine Ausgabe haben, werden die Kopfzeilen automatisch an den Browser gesendet und der Textkörper beginnt. Zum Beispiel:

<?php
echo "test";
echo headers_sent(); // should yield 1
?>

Das sollte 1 anzeigen, da wir eine echo-Anweisung für die headers_sent anrufen.

<?php
echo headers_sent(); // should yield empty string
?>

Dadurch wird eine leere Zeichenkette angezeigt, da vor dem Aufruf von headers_sent() keine Ausgabe erfolgt. Die obige setzt voraus. dass output_buffering ausgeschaltet ist. Wie bei output_buffering Wenn diese Option aktiviert ist, werden alle Ausgaben gespeichert, bis das Skript mit der Verarbeitung fertig ist, und dann angezeigt, so dass der Header / Body-Tag am Ende des Skripts gesendet wird.

Ich hoffe, das klärt die Sache auf. Wenn nicht, sehen Sie sich den Link zum Handbuch an, den ich oben gepostet habe, und lesen Sie die Beispiele im Handbuch durch.

0voto

Victor Nicollet Punkte 23939

Dies könnte geschehen, wenn ob_start aufgerufen wurde, bevor der von Ihnen gezeigte Code ausgeführt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X