Das Beispiel nutzt die Funktion readfile, die eine Datei komplett ausliest und so wie sie gelesen wurde an den Browser des Besuchers (Client) schickt. Zuvor kann an dieser Stelle beispielsweise ein Download-Counter eingefügt werden, der die Anzahl der Downloads der Datei zählt – etwa eine auf einzelne Files bezogene Abwandlung des Counters aus dem letzten Beispiel. Im Beispiel wird die Datei direkt aus dem Dateisystem entnommen. Dies stellt die einfachste Version des Downloads dar. Denkbar ist statt des Einsatzes von readfile auch das Auslesen einer Datei, die in einer Datenbank – etwa einer MySQL-Datenbank – gespeichert ist. Hierzu werden die Daten nicht aus einer Datei, sondern aus einer Tabelle der Datenbank – einer Spalte vom Typ Blob (binary large object) – entnommen.
<?php // Wurde der Name und Pfad der herunterzuladenden Datei in den GET-Parametern // angegeben? if (isset ($_GET['filename'])) { // Pfad und Name der Datei, die heruntergeladen werden soll, aus den // Parametern (GET) entnehmen. $filename = $_GET['filename']; // Die angeforderte Datei muss existieren, ... if (file_exists ($_SERVER['DOCUMENT_ROOT'] . $filename) && // eine Datei ... is_file ($_SERVER['DOCUMENT_ROOT'] . $filename) && // und lesbar sein! is_readable ($_SERVER['DOCUMENT_ROOT'] . $filename)) { // Aufteilung von Filename in Pfad, Dateiname und Dateiendung $fileinfo = pathinfo ($filename); // Mime-Type der Datei ermitteln // Wenn die Funktion mime_content_type unterstützt wird, dann übernimmt // diese das Ermitteln des Mime-Types if (function_exists ('mime_content_type')) $mimetype = mime_content_type ($filename); // Ansonsten wird der Mime-Type aufgrund der Dateiendung festgelegt else { // Mime-Typen der jeweiligen Dateiendung zuordnen // Hier werden nur ZIP-Archive, PDFs, JPG und GIF-Bilder erkannt. // Eine Erweiterung um weitere Dateitypen kann durch // weitere Fallunterscheidungen erfolgen. switch (strtolower ($fileinfo['extension'])) { // Gepackte Archivdateien case 'tgz': case 'gz': case 'zip': $mimetype = 'application/x-gzip'; break; // PDF-Files case 'pdf': $mimetype = 'application/pdf'; break; // GIF-Dateien case 'gif': $mimetype = 'image/gif'; break; // JPG-Dateien case 'jpg': $mimetype = 'image/jpg'; break; // Alle anderen Dateien bekommen einen Standard Mime-Type default: $mimetype = 'text/html'; } } // Header mit dem ermittelten Mime-Type senden header ("content-type: $mimetype"); // Dateiname der Datei per Header an den Client senden header ("content-disposition: attachment; filename=" . $fileinfo['basename']); // Datei an den Client verschicken readfile ($_SERVER['DOCUMENT_ROOT'] . $filename); } else { // Download der Datei konnte nicht durchgeführt werden // Deshalb erfolgt hier die Ausgabe einer Fehlerseite, die den // Benutzer auf den Fehler hinweist. // HTTP-Status für Dokument nicht gefunden an den Client senden header ("HTTP/1.0 404 Not Found"); ?> <html> <head> <title>Beim Download ist ein Fehler aufgetreten</title> </head> <body> <h1>Fehler beim Download aufgetreten!</h1> <p> Die angeforderte Datei wurde nicht gefunden oder ist nicht lesbar! </p> </body> </html> <?php } } else { // Fehlerseite anzeigen (Parameter für den Download wurden nicht angegeben) // Entsprechender HTTP-Status wird über den Header an den Client geschickt header ("HTTP/1.0 400 Bad Request"); ?> <html> <head> <title>Fehler beim Download aufgetreten</title> </head> <body> <h1>Fehler beim Download</h1> <p> Dem Script wurde keine Angabe zur herunterzuladenden Datei angegeben! </p> </body> </html> <?php } ?>
Hallo Zusammen, Am 20./21. Mai findet in Hamburg die erste Developer Conference 2011 statt. Wie der Name bereits verrät, handelt die Konferenz rund ... » mehr
von devcon-hamburg am Dienstag, 12. April 2011 16:50 in PHP - noch nicht beantwortetHallo zusammen, ich habe ein kleines Problem: Ich brauche bei der Entwicklung eines Kontaktformulares für eine Website eine bedingte Weiterleitung ... » mehr
von scatha am Donnerstag, 10. März 2011 01:12 in PHP - noch nicht beantwortetMein vorhaben ist recht simpel aber ich bin php noob (hoffe das entschuldigt es nen bissl xD) und hab kp wie ichs anfangen soll. Und zwar möchte ich ... » mehr
von HeathenMan am Dienstag, 1. Februar 2011 22:57 in PHP - bisher 1 AntwortHallo,
am einfachsten und kompaktesten kann man das mit einem regulären Ausdruck machen. Einfach mal nach der Funktion preg_match_all suchen und den ... » mehr
Hallo, die Bildergalerie mit php und js ist super, jedoch möchte ich gern zu meinen Bildern verschiedene Bemerkungen machen und zwar untereinander, ... » mehr
von Sylma am Mittwoch, 26. Januar 2011 01:13 in PHP - bisher 1 AntwortHallo,
ich nehme an, dass \n im Beschreibungstext nicht funktioniert aber versuchen kann man es. Ansonsten: Schon mal mit einer UTF-Sequenz ... » mehr
Hallo alle miteinander, ich hoffe, dass mit hier jemand helfen kann. Ich habe mir hier von der Seite die Bildergalerie mit JS und PHP ... » mehr
von Saga am Dienstag, 28. Dezember 2010 09:57 in PHP - bisher 6 AntwortenHallo Alex,
die Warnung ist zwar jetzt durch das isset weg, aber die Daten werden immer noch nicht übergeben. (Nachdem ich durch das isset die ... » mehr
¬ Menu
¬ Gratis Download
¬ Tutorials
¬ Seminare
¬ Yoga
¬ Insolvenzrecht
¬ News
15.08.2008Schleifen in PHP: Die While-Schleife » mehr 13.08.2008Nutzung von Variablen unter PHP: Definition, Sichtbarkeit und vordefinierte Variablen » mehr 11.08.2008Ausgabe von Datum und Zeit mit PHP nach Konvertierung in ein String » mehr Eine vollständige News-Liste ist auf der News-Seite zugänglich.
¬ Foren
¬ Buchtipp

PHP kurz & gut
Weitere PHP Bücher finden Sie unter PHP Literatur