PHP Kurs Logo  
 
Buttons PHP Kurs - Kapitel Trennlinie Downloads Trennlinie Was brauche ich ? Trennlinie Entwickler Jobs Trennlinie Kontakt Trennlinie Impressum Buttons
 
 
Menu
Allererste PHP Schritte
- Webserver Installation
- PHP Editor Installation

PHP Grundlagen
- PHP Grundwissen
- Mein erstes Programm
- Kommentare einfügen
- Variablen
- PHP+HTML mischen
- If Abfragen
- Rechenarten
- Arrays
- Schleifen
- Funktionen
- Klassen
- Includes
- Sessions und Cookies
- Login mit Sessions
- Login mit Datenbank
- Referer auslesen
- Wert aus Datenbank
- Variablen übergeben

MySQL Grundlagen
- Was ist das ?
- Erste Schritte
- Verbindung herstellen
- Einfache SQL Befehle
- SQL Injection

Häufig gefragt
- Was ist Adwords ?
- Interessante Links
- Wasserzeichen mod_rewrite
- Thumbnails erstellen
- PHP Gästebuch
- PHP Header
- Webseiten auslesen
- Socket Verbindungen
- E-Mail Adressen prüfen
- E-Mails versenden
- $_GET & $_POST
- Datenbank sichern
- Server DDOS Angriffe Abwehren
- Webhosting - Worauf ist zu achten ?
- Fachübersetzungen
- Anbieter finden

Interessante Artikel
- Soft-Skill-Zertifizierung
- Sicherheits Workshops
- ESDownload


PHP Header, PHP Redirect

Der header ist ein Teil, der bei jedem Seitenaufruf mit dem Browser mitgesendet wird. Der header ist normalerweise nicht sichtbar, es sei denn man benutzt extra Tools um ihn sichtbar zu machen. In ihm werden Informationen gespeichert und mitgesendet ; so zum Beispiel Daten die man aus Formularen per $_POST versendet.

Der Header wird immer zuerst gesendet, dann Seiteninhalte !


Den Header in php auslesen:

<?php
    $headers 
headers_list();
    foreach ( 
$headers as $header )
        {
        echo 
"<li>$header</li>";
        }
?>


So sieht Dein aktueller Header aus:

  • X-Powered-By: PHP/5.6.30
  • Set-Cookie: PHPSESSID=f2bu8ea0gjncigcsdu5tr03645; path=/
  • Expires: Thu, 19 Nov 1981 08:52:00 GMT
  • Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
  • Pragma: no-cache
  • Content-Type: text/html; charset=ISO-8859-1


  • Es gibt nun Möglichkeiten die Informationen in diesem Header zu beeinflussen, dies muss allerdings geschehen bevor auch nur ein Zeichen gesendet wurde. Hat man nur ein Zeichen gesendet, ist es nicht mehr möglich den bereits gesendeten(!) Header zu beeinflussen. Eine beliebte Fehlerquelle ist hierbei, dass wenn man den Code in php mit <?php einleitet, dass man vor der eckigen Klammer ausversehen ein Leerzeichen macht. Wenn der PHP Code beendet wird, und es steht nach dem ?> noch ein Leerzeichen wird man auch Fehlermeldungen bekommen, da bereits Zeichen gesendet wurden, bevor wir in PHP den Header beeinflussen konnten.

    PHP Redirect

    Eine beliebte und häufige Art mit dem Header zu arbeiten, ist es den Status eines Seitenaufrufes zurück zu schicken, oder den User einfach weiter zu leiten.

    Ein php Weiterleitungsbeispiel:

    <?php
        header
    ("Location: http://www.google.de");
        exit;
    ?>


    Hiermit leiten wir den Surfer auf die Seite von Google weiter. Danach quittieren wir die weitere Abarbeitung des PHP Programmes mit exit;, weil sonst noch weitere Programmteile abgearbeitet werden würden.

    Header Status 404, 301, 302 und andere


    <?php
        header
    ("HTTP/1.0 404 Not Found");
    ?>


    Hiermit teilen wir dem Surfer mit, dass es die angeforderte Seite nicht gibt (404). Dies kann wichtig sein, wenn man zum Beispiel mit mod_rewrite arbeitet und sämtliche aufgerufene Adressen auf die index.php umleitet. Jeder Seitenaufruf wäre gültig, da die Internetadresse immer an die index.php weitergegeben würde, wir aber nicht unbedingt zu jeder Adresse auch Inhalt liefern können/wollen. Suchmaschinen wie google machen auch Spamtests und rufen willkürliche Internetadressen auf den Seiten auf, um zu gucken ob der Webmaster rumspammt und sich davon eine bessere Suchmaschinenpositionierung erhofft.

    Es gibt nun verschiedene Nummern die man für die Statusangabe verwenden kann. Die häufigsten sind folgende:

    # 200 OK
    # 301 Moved Permanently
    # 302 Found
    # 304 Not Modified
    # 307 Temporary Redirect
    # 400 Bad Request
    # 401 Unauthorized
    # 403 Forbidden
    # 404 Not Found
    # 500 Internal Server Error
    # 501 Not Implemented

    Generell leitet man am besten direkt über die .htaccess Datei den User weiter, sofern dies möglich ist. Suchmaschinen reagieren je nach Weiterleitungsnummer unterschiedlich. Hier finden Sie ein paar Informationen dazu. Eine genaue Übersicht über die Statuscodes erhalten Sie auf Wikipedia. Aussagekräftig ist immer die erste Zahl einer Nummer:

    1xx = Informationen
    2xx = Erfolgreiche Operation
    3xx = Umleitung
    4xx = Client Fehler
    5xx = Server Fehler

    Sollte man Wert auf Suchmaschinenoptimierung legen, sollte man sich die unzähligen Beiträge dazu durchlesen, mit welcher Nummer man weiterleiten sollte. Andernfalls kann es passieren, dass man unerwünschte Ergebnisse produziert die einen in den Suchergebnissen zurück oder ganz raus werfen.

    Download einer Datei

    Sie können auch auf eine URL weiterleiten und der User bekommt von Ihrem PHP Skript eine Datei zum Download angeboten, anstelle von visuellen Inhalten im Browser. Diese Lösung habe ich mal dazu benutzt, um den Downloadspeed der einzelnen User variabel regeln zu können. So kann auch geprüft werden, ob der einzelne User berechtigt ist diese Datei downloaden zu dürfen.

    Jeder kennt Seiten wie Fileplanet, Gamershell u.a. Man ist in einer Download Warteschlange und bekommt dann das File zum Download. Jenachdem ob man bezahlender Kunde ist, kann es sein dass einem der Downloadspeed gedrosselt wird. Meist haben die Downloaddateien noch sehr lange nicht lesbare Namen. Wenn Sie sich dafür interessieren Dateinamen zu erstellen, die gar nicht existieren sondern nur eine kurze Zeit verfügbar sind, dann suchen Sie mal nach Softlinks. Diese können auch in PHP erstellt werden.

    Nach Aufruf der Datei können Sie als erstes prüfen, ob genau der User der diese Adresse aufruft auch dazu berechtigt ist diese Datei downzuloaden. Er könnte die Adresse ja auch weitergegeben haben. Dann schicken Sie ihm zum Beispiel eine PDF Datei:

    <?php
    // Wir werden eine PDF Datei ausgeben
    header('Content-type: application/pdf');

    // Es wird downloaded.pdf benannt
    header('Content-Disposition: attachment; filename="downloaded.pdf"');

    // Die originale PDF Datei heißt original.pdf
    readfile('original.pdf');
    ?>

    Wir haben festgelegt, dass es sich um application/pdf handelt. Über die Content-Disposition haben wir den Anhang bestimmt. Readfile übernimmt dann den Rest und sendet die Datei an den Surfer. In diesem Fall bekommt er allerdings die Datei mit vollem Downloadspeed.

    Ein weiteres Beispiel für den Download einer Datei:

    <?php
        $_file 
    'original.zip';

        
    header("Content-Type: application/zip; ");
        
    header('Content-Disposition: attachment; filename="anders.zip"');
        
    header("Content-Transfer-Encoding: binary");
        
    header("Content-Length: " filesize($_file) ."; ");
        
    header("filename=\"".$_file."\"; ");

        
    readfile($_file);
    ?>

    Das Originalfile heisst original.zip, während es beim User als anders.zip ankommt. Hier im Header geben wir gleich die Größe des Files mit an.

    Downloadgeschwindigkeit begrenzen

    Will man den Downloadspeed begrenzen müsste man mit einer Schleife arbeiten. In diese schreibt man sleep(1);, und schickt Ihm nicht gleich die gesamte Datei sondern nur häppchen. Man kann die gewünschte Datei über fopen(); öffnen und mit fread nur das lesen, was er gerade bekommen soll, bis er alles hat.

    Content-Type

    Anstelle von pdf können wir auch andere Dateitypen bestimmen, damit der Downloader auch immer richtig auf die angegebene Datei reagiert.

    Weitere Content-Typen:

    pdf = application/pdf
    exe = application/octet-stream
    zip = application/zip
    doc = application/msword
    xls = application/vnd.ms-excel
    ppt = application/vnd.ms-excel
    gif = image/gif
    png = image/png
    jpg = image/jpg
    mp3 = audio/mpeg
    wav = audio/x-wav
    mpg = video/mpeg
    mov = video/quicktime
    avi = video/x-msvideo


    Cachen von Seiten verhindern

    Wenn man verhindern will, dass die aufgerufene Seite gecached wird, kann man dies auch über den Header mitteilen. Genauso kann man auch bestimmen bis wann die Seite gecached (gespeichert) werden soll - so wird die Seite nicht erneut vom Server abgerufen, sondern dem Surfer erneut bis zu dem angegebenen Datum angezeigt solange sie gültig ist.

    <?php
        header
    ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
        
    header("Cache-Control: no-cache");
        
    header("Pragma: no-cache");
    ?>

    In diesem Fall wurde das Datum in die Vergangenheit gesetzt und no-cache angegeben. So verhindert man, dass der Browser eine Gültigkeit der Seite für die Zukunft vermutet und sie erneut abruft, falls der User nochmal auf die Seite klickt. Andererseits könnte man auch auf cache stellen und das Datum in die Zukunft setzen. So wäre die Seite noch für eine gewisse Zeit gültig und würde bei erneutem Klick nicht erneut vom Server abgerufen werden, da der User diese Version der Seite ja bereits hat.





    <<<< zurück Kapitelauswahl vorwärts >>>>




    Kommentare: (absteigend sortiert)

    Hier stehen noch alte Kommentare, die direkt über die Webseite gemacht wurden. Es kann dort nicht weiter kommentiert werden. Bitte nutzt dafür die Facebook Kommentare.

    .:: 08.02.14 - 11:39 Uhr :: Name: Uwe ::.
    Sehr gut gemacht und sehr aufschlussreich

    .:: 12.12.13 - 15:43 Uhr :: Name: Mirko Meichsner ::.
    Das Senden von Binärdaten kann nicht mit Echo oder Ähnlichem gemacht werden.

    Mach es mal so wie hier beschrieben:
    http://hk1.php.net/readfile

    Gruß Mirko...

    .:: 17.10.13 - 13:42 Uhr :: Name: Stefan ::.
    Hallo zusammen!

    Ich würde den obigen Code gern zum Download einer .exe-File nutzen. Es wird mir auch eine zum Download angeboten. Leider hat diese aber, verglichen mit der Originaldatei, nur einen Bruchteil der Größe und kann daher auch nicht ausgeführt werden (239 Byte statt 4,42 MB).

    Kann mir jemand was dazu sagen?

    Vielen Dank schon mal im Voraus und beste Grüße,

    Stefan









    Content
     
      Bottom Design  

    DigitaleHeimat

    PepperTools.de Software Download | Software Shop
    www.imilkowski.eu - Software Programmierung und Webdesign


     


    Persönliche Empfehlung
    Mit Wix.com eine kostenlose Homepage erstellen ? Einfach, schnell und ohne Vorkenntnisse.