php setcookie meldet einen Fehler, weil setcookie() bereits eine Ausgabe hatte. Die Lösung besteht darin, die ausgegebenen Echodaten und das Cookie im Header zusammen zu senden.
Die Betriebsumgebung dieses Artikels: Windows 7-System, PHP-Version 7.1, DELL G3-Computer
php setcookie Was tun, wenn ein Fehler auftritt?
PHP setcookie() kann keine Ausgabe haben Vor der setcookie-Funktion von
PHP heißt es im Handbuch:
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.
Die grobe Bedeutung ist, dass vor setcookie nichts an den Client-Browser ausgegeben werden kann, andernfalls wird ein Fehler gemeldet. Nach dem Test stellte sich jedoch heraus, dass kein Fehler gemeldet wurde. Lesen Sie weiter im Handbuch:
You can use output buffering to send output prior to the call of this function, with the overhead of all of your output to the browser being buffered in the server until you send it. You can do this by calling ob_start() and ob_end_flush() in your script, or setting the output_buffering configuration directive on in your php.ini or server configuration files.
Also habe ich die Ausgabepufferung von php.ini (PHP-Version 5.4) auf 0 geändert, was bedeutet, dass der Puffer ausgeschaltet ist. (Es ist unter PHP 5.3 geschlossen und nach 5.3 standardmäßig mit einem Wert von 4096 aktiviert.)
bedeutet, dass kein Fehler gemeldet wird, wenn ob_start und ob_end_flush so eingestellt sind, dass der Puffer vor der Ausgabe des Cookies ausgegeben wird. Warum gibt es also keinen Fehler, wenn die Cookie- und Pufferdaten zusammen zurückgegeben werden? Dies liegt daran, dass die Daten im Puffer in einem vollständigen HTTP-Paket organisiert und versendet werden.
Wir können uns die Fehlermeldung ansehen:
echo "i am going to setcookie"; var_dump(setcookie('buhehe', 'asdasdasdasdad')); print_r($_COOKIE);
„Bitte ändern Sie die Header-Informationen nicht, da der Header bereits gesendet wurde.“ Offensichtlich wird die Pufferausgabe nicht verwendet, daher wird der Header zurückgegeben Zuerst an den Browser und dann beim Setzen von Cookies zum Senden von Header-Informationen wird ein Fehler gemeldet – es entspricht nicht den Spezifikationen des HTTP-Protokolls. Denn das HTTP-Protokoll schreibt vor, dass der Header vor dem Body ausgegeben werden soll.
Ich habe den Code geändert und die ausgegebenen Echodaten und das Cookie im Header zusammen gesendet.
ob_start(); echo "i am going to setcookie"; var_dump(setcookie('buhehe', 'asdasdasdasdad')); ob_end_flush(); print_r($_COOKIE);
Die Ergebnisse sind wie folgt:
Wenn Sie Output_buffering auf 0 setzen, d. h. wenn Sie den Puffer in php.ini ausschalten, müssen Sie ob_start manuell ausführen, um den Puffer zu öffnen.
Warum stellen einige Entwickler beim Testen fest, dass nach dem Echo von Informationen vor setcookie kein Fehler auftritt?
Denn die meisten aktuellen PHP-Anwendungen sind 5.3+ und einige verwenden sogar 7. Da in der PHP5.3+-Version der Puffer standardmäßig aktiviert ist und die Standardgröße 4096 beträgt, werden die Echodaten vor setcookie und die Cookie-Header-Informationen in HTTP-Pakete im Puffer gekapselt und an den Client gesendet ~So der Fehler Die Meldung im Bild oben wird nicht generiert (bitte ändern Sie die HTTP-Header-Informationen nicht)~~
Empfohlenes Lernen: „PHP-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn ich in PHP Setcookie eine Fehlermeldung erhalte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!