7 Stimmen

Wie funktioniert header()?

Ein kleiner Kontext:
Ich musste PHP-Skripte in einem Browser ausführen, aber ich wollte mir nicht die Mühe machen, einen Server zu installieren und den Aufwand zu betreiben, der mit dem Betrieb eines Servers auf meinem Computer verbunden ist, einschließlich Firewalls, bla bla bla.

Also habe ich stattdessen meinen eigenen Server geschrieben. Es ist ein einfaches PHP-Skript, das auf Verbindungen an Port 80 meiner LAN-IP wartet. Es empfängt die HTTP-Anfrage und startet ein zweites PHP-Skript mit exec - damit ich Änderungen leicht vornehmen kann, ohne das Serverskript neu starten zu müssen. Dieses zweite PHP-Skript parst die Anfrage und schließlich include ist das Skript, das tatsächlich aufgerufen wurde. Es ruft die Ausgabe von dort ab und sendet die Antwort mit den entsprechenden Kopfzeilen (die ich ändern kann) zurück an den Browser.

Ja, es ist ein Chaos, aber es funktioniert. Es tut, was ich tun muss.

Und nun die Frage:
Ich kann nicht verwenden header() . Es scheint keinen Einfluss darauf zu haben, was über die Socket-Verbindung an den Browser zurückgesendet wird. Ich habe stattdessen eine setheader() Funktion und speichern Sie die Kopfzeilen in einem Array, das der Antwort vorangestellt wird.

Ich würde gerne wissen, wie die header() Funktion tatsächlich intern funktioniert, so dass ich diese Funktion anstelle meiner "gehackten" Funktion verwenden könnte.

0voto

Linus Kleen Punkte 32759

Eine übliche HTTP-Antwort sieht so aus:

HTTP/1.1 200 OK
Date: Thu, 10 Nov 2011 15:35:27 GMT
Server: Apache
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=None

<!DOCTYPE html>
<html>
....

Die PHP-Funktion header() kümmert sich darum, Kopfzeilen in den ersten Teil der Antwort einzufügen. Das eigentliche HTML können Sie ausgeben mit print und Ähnliches.

Wenn es sich um ein PHP-Skript handelt, das den Apache abspielt, ist dieses Skript dafür verantwortlich, Ihre Kopfzeilen in die Antwort einzufügen. header() funktioniert nur, wenn die Ausgabe an stdout gesendet und nicht in einen Socket geschrieben wird, so dass nach Beendigung eines PHP-CGI-Skripts die entsprechenden Header der Ausgabe vorangestellt werden können.

0voto

CAP Punkte 307

Ich weiß, ich werde dumm klingen, aber warum nicht einfach wamp oder lamp installieren? Es ist eine wirklich "unzip & run & voilà" Art von Lösung, die wirklich sparen Sie die Mühe.

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