PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

HTTP Header mit PHP verändern

11 Mai, 2009 (09:09) | Code-Schnipsel, Grundlagen, Server, Tipps und Tricks | Von: PHP Maniac

Wie wir bereits beim Erstellen von HTTP GET Requests mit PHP gesehen haben, sieht das HTTP Protokoll verschiedene Header-Informationen vor, die die Kommunikation zwischen Server und Client regeln. Mit Hilfe der PHP Funktion header() lassen sich die HTTP Header verändern oder überschreiben, was ein sehr mächtiges Instrument bei der Entwicklung mit PHP darstellt.

Die header() Funktion von PHP ermöglicht also die Anpassung der vom Server an den Client gesendeten HTTP Headern. Der Aufruf der Funktion gestaltet sich sehr einfach, das volle Potential erschließt sich einem jedoch erst, wenn man sich einige der vielfältigen Möglichkeiten, die HTTP Header bieten, anschaut.

header($header_string);

Die header() Funktion bietet außerdem noch zwei weitere Parameter, die ich an dieser Stelle aber zunächst ignorieren möchte, da sie nicht von Blang für die Beispiele sind.

Probleme beim Einsatz der Header() Funktion

Bei der Arbeit mit HTTP Headern ist besonders darauf zu achten, dass die Header nur ganz zu Anfang eines Skripts gesetzt werden können. So bald das erste Zeichen vom Server an den Client gesendet wurde, ist eine Änderung der Header nicht mehr möglich und erzeugt eine PHP Fehlermeldung. Um dies zu vermeiden existieren seitens PHP zwei Möglichkeiten: Zunächst kann im Skript geprüft werden, ob bereits Daten an den Client gesendet wurden. Dies kann mit der headers_send() Funktion überprüft werden, die Informationen darüber liefert, ob und wo bereits Daten ausgegeben wurden. Ist der Rückgabewert false, so kann der Header ohne Probleme direkt geändert werden. Alternativ kann mit Hilfe des Output Bufferings jegliche Ausgabe des PHP Skripts so verzögert werden, dass an jeder beliebigen Stelle im Skript Änderungen am Header erfolgen können.

Weiterleitung mit HTTP Headern

Eine einfache Weiterleitung lässt sich mit nur einer Zeile erstellen:

header("Location: http://www.domain.de/seite.php");

301 Weiterleitung mit HTTP Headern

Gerade im Berreich der Suchmaschinenoptimierung sind 301-Weiterleitungen ja eine wichtige Komponente, da Google bei 301-Weiterleitungen die neue Seite an Stelle der alten indexiert. Der folgende Programmcode realisiert eine solche 301-Weiterleitung:

header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.neue-url.de/index.php");
die();

Datei-Download mit HTTP Headern

Gerade wenn nur bestimmte User Zugriff auf Downloads einer Webseite haben, empfielt es sich nicht die direkten Links auf eine Datei preiszugeben, sondern die Daten über ein PHP Skript zur Verfügung zu stellen. Dieses Skript kann dann auch direkt die Berechtigung des Benutzers prüfen und den Download gegebenenfalls verweigern. Um eine Datei mittels PHP als Download an einen Browser zu senden, kann folgender Programmcode zum Einsatz kommen:

set_time_limit(0);
$datei = 'dokument.pdf';

header('Content-type: application/pdf');
header('Content-Length: '.filesize($datei));
header('Content-Disposition: attachment; filename="'.$datei.'"');
readfile($datei);
die();

Dies waren nur einige, ausgewählte, Beispiele was sich mit HTTP Headern alles anstellen lässt. Es gibt viele Möglichkeiten die header() Funktion sinnvoll einzusetzen. Es sollte jedoch darauf geachtet werden, dass es bei HTTP Header Weiterleitungen eventuell zu Problemen mit PHP Sessions kommen kann.

Be Sociable, Share!

Kommentare

Pingback von Dynamische Bilder mit PHP erzeugen – PHP Maniac – Das PHP Blog
Datum 14. Mai 2009 um 13:59 Uhr

[…] ins Bild eingefügt haben, können wir uns um die Ausgabe kümmern. Hierzu gaukeln wir dem Browser mit Hilfe der header() Funktion vor, dass es sich bei der aktuellen Datei um ein GIF Bild handeln würde: […]

Schreibe einen Kommentar