Ich stoße häufig auf dieses Problem, wenn ich PHP-Programme schreibe.
Einschließlich der Verwendung der Header()-Funktion, der Session()-Funktion und der Cookies-Funktion kann es zu Problemen kommen
PHP-Programme Folgendes Es wird ein Fehler gemeldet:
Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von (Ausgabe gestartet um
Header-Informationen können nicht geändert werden. Um diesen Fehler zu beheben, müssen Sie zwei Probleme verstehen.
Erstens das http-Protokoll
Im http-Protokoll gibt der Server eine HTML-Datei an den Browser aus. Die HTML-Datei besteht aus zwei Teilen, ein Teil sind die Daten unserer Seite selbst und der andere Teil Die Header-Informationen der HTML-Seite. Diese Informationen enthalten viele Daten, z. B. das Codierungsformat, in dem die Seite angezeigt wird, die Größe der HTML-Daten, ob gesprungen werden soll, ob zwischengespeichert werden soll usw. Diese HTML-Header-Dateiinformationen darf nach der Generierung nicht mehr geändert werden. Dies ist der Grund für den oben gemeldeten Fehler beim Ändern der Header-Informationen. Es besteht aus zwei Teilen des Caches, den ich als die Daten des Programms im Speicher verstehe. Durch dieses Modul öffnet PHP einen zusätzlichen Platz als Cache Wenn der PHP-Modul-Cache aktiviert ist und Echodaten im Programm vorhanden sind, werden die Daten im Cache abgelegt. Anstatt die HTML-Datei direkt zu generieren, warten Sie, bis die Ausführung des PHP-Programms abgeschlossen ist, und generieren Sie dann Der HTML-Code mit den vom Modul zwischengespeicherten Daten, einschließlich der Header-Datei:
1. Der Cache ist nicht aktiviert (die Standardeinstellung ist so).
Zu diesem Zeitpunkt wurde der Fehler „Header-Informationen können nicht geändert werden“ aufgedeckt2. Schalten Sie den Caching-Mechanismus ein
<?php echo "123"; header("Content-type:text/html;charset=utf-8") echo "456"; ?>
In den beiden oben genannten Beispiel: Der Cache-Status ist nicht aktiviert und ein HTML-Code wurde generiert, wenn die dritte Zeile erreicht wird. Die Header-Funktion kann die Header-Dateiinformationen nicht ändern und es wird ein Fehler gemeldet 2. ob_start(); schaltet den Cache ein (ob ist Output_buffer), wenn das Echo „123“ ist, werden die Daten in das Cache-Modul geschrieben und dann wird die Funktion header() ausgeführt nicht generiert, und dann wird auch das Echo „456“ an das Cache-Modul ausgegeben. Nach der Ausführung werden die Daten des Cache-Moduls zu einer vollständigen HTML-Seite neu generiert, sodass kein Fehler gemeldet wird
Zweitens die Caching-Mechanismus-Funktion von PHP und wie man sie aktiviert
<?php ob_start() ; //开启页面缓存 echo "123"; header("Content-type:text/html;charset=utf-8") echo "456"; ?>
Der PHP-Caching-Mechanismus hat auch einige Funktionen.
ob_start() startet die Ausgabepufferung , Die Ausgabe wird in einen internen Puffer übertragen. ob_get_contents() Diese Funktion gibt den Inhalt des internen Puffers zurück. Dies entspricht der Umwandlung der Ausgabe in einen String. Gibt die Länge des internen Puffers zurück. ob_end_clean() beendet den Ausgabepuffer und gibt den Inhalt des Puffers aus Puffer, und werfen Sie den Inhalt des Puffers weg.