yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

HTTP-Header senden



Sofortige Weiterleitung
PHP-Datei:
1
2
3
<?php
header
("location: seite.php");
?>

Nach location: folgt die Adresse.


Weiterleitung nach bestimmter Zeit
Es geht natürlich auch, dass die Weiterleitung erst nach ein paar Sekunden erfolgt.
PHP-Datei:
1
2
3
<?php
header
("refresh:3;url=seite.php");
?>

In diesem Beispiel kommt man nach 3 Sekunden auf die Seite seite.php.
Im Gegensatz zur HTML-Entsprechung
Code:
<meta http-equiv="refresh" content="3; URL=seite.php">
ist der Code nicht im HTML-Quelltext sichtbar. So kann man zum Beispiel die Besucher seiner Seite auffordern, erst auf ein paar Banner zu klicken, bis diese dann nach 20 Sekunden auf die gewünschte Seite gelangen. Die Weiterleitungen funktionieren nicht, wenn der Besucher automatische Weiterleitungen im Browser deaktiviert hat!


Cache deaktivieren
Durch diese Zeilen lässt sich verhindern, dass die Datei gecacht wird.
PHP-Datei:
1
2
3
4
5
<?php
header
("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0"false);
header("Pragma: no-cache");
?>



Content-Type definieren
Standardmäßig sendet der Server für PHP-Dateien den Content-Typ text/php oder text/html.
Dies kann man natürlich auch ändern:
PHP-Datei:
1
2
3
<?php
header
("Content-Type: typ/typ");
?>

Bei Bildern, die man mittels PHP erstellt, sollte man je nach Typ image/jpeg, image/png oder image/gif nehmen, bei online generierten PDFs application/pdf.


Jeden Dateityp zu Download anbieten
Manche Browser sind sehr eigenwillig. Der M$ IE spielt beim Linksklick auf Musik- und Filmdateien diese in einem kleinen Fenster ab, anstatt sie herunterzuladen.
Man kann mit ein paar Zeilen aber auch diesen Browser zwingen, alles herunterzuladen.
download.php:
1
2
3
4
5
6
7
8
<?php
$orig_file 
"datei.ext";
$save_file "blabla.exe";
header("Content-Type: x-type/octtype");
header("Content-Length: ".filesize($orig_file));
header("Content-Disposition: attachment; filename=".$save_file);
readfile($orig_file);
?>

In den ersten beiden Zeilen werden die Datei ($orig_file) und der Dateiname, unter dem die Datei gespeichert werden soll ($save_file), definiert.
In der dritten Zeile wird wieder der Content-Type bestimmt.
Mit Content-Length: wird die Dateigröße in Bytes gesendet und in der letzten Zeile wird der Dateiname bestimmt. Content-Disposition: attachment; bringt jeden Browser dazu, die Datei herunterzuladen.
Auf diese Weise kann man Texte, Bilder, im Prinzip alles zum Download anbieten. Erlaubt der Webspace z.B. keine Dateiendungen wie zip, ist die Methode, Downloads anzubieten, sehr praktisch.


Bei mir kommt eine Fehlermeldung wie:
Fehlermeldung:
Warning: Cannot add header information -
headers already sent by (output started at bla.php:3) in bla.php on line 13

Beachte, dass vor den header()-Funktionen kein HTML-Code stehen darf. Werden andere Dateien includiert, sollte die include() nach den header-Funktionen stehen. Am sichersten geht man, wenn man die header-Funktion zuallererst im PHP-Code schreibt.

Geschrieben von dasepp am 12.08.2004 (20263x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren

M.E. muß ein Locationheader die komplette URL enthalten, siehe: http://renephoenix.de/index.php?cmd=newkomm&bid=485 - das 6. Posting

zu den Weiterleitungen bin ich kein Freund - das ist z.B. bei yubb.de der Fall. Woher weiß Phil, daß ich meinen Beitrag mir wieder ansehen will?

Sinnvoller wäre es dagegen mir mögliche Alternativen anzubieten - nächster Beitrag, diesen Beitrag - Startseite

beim Cache würde mich interessieren, ob das nur für die html-Seite, oder auch für die integrierten Grafiken gilt - letzteres wäre i.d.R. ein ungewollter Nebeneffekt
Geschrieben von René
@René: ich hatte bisher noch nirgends Probleme erlebt, wenn man bei header("Location: "); eine relative URL angibt... ^^

@Tutorial: vgl. mit http://www.yubb.de/artikel452.html und man wird feststellen, dass es auch noch möglich ist im weiteren Verlauf eines Scriptes Header-Informationen zu senden bzw. Cookeis zu setzen, usw.
Geschrieben von michi
ich möche mich nur bedanken!!
nach stundenlanger suche habe ich gefunden was ich wollte!

den browser zwingen beliebige datei downzuloaden (va bei bilder)

DANKE
Geschrieben von oggi
Es gibt Situationen, in denen man vor dem Senden des Headers schon Text ausgegeben hat und es sehr kompliziert wird, das ganze Skript umzuschreiben. Dazu kann man die Ausgabe zuerst cachen und dann am Ende alles auf einmal ausgeben, siehe http://de2.php.net/manual/de/function.ob-start.php
Damit ist es egal, wann der Header gesendet wird.
Geschrieben von Matthias