In der PHP -Programmierung ist die Funktion Header () ein sehr häufiges Tool zum Senden von RAW -HTTP -Header -Informationen an den Client, z. B. die Umleitung festlegen, den Inhaltstyp angeben, Cache -Steuerung usw. kann jedoch noch funktionieren, wenn wir das PHP -Skript im Modus ausführen? Dieser Artikel gibt Ihnen eine detaillierte Antwort.
Zunächst müssen wir verstehen, was das PHP -CLI -Muster ist. CLI (Befehlszeilenschnittstelle) besteht darin, PHP -Skripte direkt über die Befehlszeile auszuführen, anstatt sie über einen Webserver (wie Apache und Nginx) zu analysieren. Normalerweise treten wir ein:
php script.php
In diesem Fall fungiert PHP nicht mehr als Tool zum Generieren von Webseiten, sondern ist nur ein normaler Skript -Executor.
Die Hauptfunktion der Header () -Funktion besteht darin, HTTP -Headerinformationen an den Client (Browser) zu senden, z. B.:
header('Location: https://m66.net/welcome');
exit;
Dieser Code wird den Browser angeben, sich in die angegebene URL zu leiten.
Hinweis: Header () gibt den tatsächlichen Inhalt nicht aus, sondern nur den Antwortheader . Mit anderen Worten, seine Rolle hängt vollständig vom HTTP -Protokoll zwischen PHP und dem Webserver ab.
Direkte Antwort: Es kann nicht verwendet werden oder es macht keinen Sinn, wenn Sie es verwenden .
Die Gründe sind wie folgt:
Im CLI -Modus schreibt PHP die Ausgabe direkt in die Standardausgabe (STDOut) ohne HTTP -Protokoll, ohne Anforderungsheader und ohne Antwortheader.
Die Funktion Header () überprüft intern, ob es in einer Umgebung mit SAPI (Server API) CLI ausgeführt wird. In diesem Fall generiert es beim Aufrufen keinen echten HTTP -Header und meldet keinen Fehler, aber das Ergebnis ist nur, dass es keinen Einfluss auf STDOut hat.
Führen Sie beispielsweise den folgenden Code aus:
<?php
header('Content-Type: application/json');
echo json_encode(['status' => 'ok']);
In einer Webumgebung erhält der Browser den Header vom Typ Content-Typ und erkennt ihn als JSON. Aber rennen Sie unter der CLI:
php script.php
Sie werden nur die Ausgabe sehen:
{"status":"ok"}
Weil das Terminal HTTP -Header überhaupt nicht versteht oder handhaben.
Zusammenfassen:
? Der Anruf bei Header () unter CLI meldet keinen Fehler, entspricht jedoch einer ungültigen Operation.
? Es werden keine HTTP -Antwort -Headers gesendet, da die CLI keine HTTP -Schicht hat.
? Sie können weiterhin Echo , Print_r und andere Funktionen verwenden, um Text an das Terminal auszugeben.
Wenn Sie beim Schreiben von CLI -Skripten auch Header () anrufen, wird empfohlen:
Bestätigen Sie, ob der Code sowohl das Web als auch die CLI dient. Wenn ja, ist es am besten, die SAPI -Erkennung hinzuzufügen: