![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Erfahrener Benutzer
Registriert seit: 19.03.2005
Ort: S-H | Flensburg
Beiträge: 432
|
Download-Skript, Downloads mit download.php?id=x
1. Worum geht es hier und wozu das Ganze? Bisher sahen die Links zu deinen Downloads sicherlich etwa so aus: Code:
http://www.example.com/downloads/datei.ext Code:
http://www.example.com/download.php?id=x
2. Wie das ganze funktioniert Es wird eine Datei "download.php", nennen wir sie mal "Download-Skript" angelegt. Diese Datei enthält in einem Array alle Dateinamen, der Dateien, die zum Download bereitgestellt werden sollen. Jedem Dateinamen wird eine eigene ID zugewiesen. Wenn nun ein Download verlinkt werden soll sieht der Link wie folgt aus: Code:
http://www.example.com/download.php?id=x 3. Der Grundbau des Download-Skripts Hier nun der Grundbau des Download-Skripts, welchen wir nach und nach erweitern werden: PHP-Code:
Code:
"id" => "dateiname.ext", PHP-Code:
Zusätzlich habe ich noch einige header()-Befehle verwendet: Code:
header("Content-Type: x-type/subtype");
Code:
header("Content-Length: ".filesize($file));
Code:
header("Content-Disposition: attachment; filename=".$files[$_GET['id']]);
4. Prüfen, ob die Datei, die heruntergeladen werden soll existiert/erreichbar ist Um zu überprüfen, ob die zu herunterladende Datei überhaupt existiert bzw. erreichbar ist, reichen vier Zeilen Code aus, diese schreiben wir vor die header()-Befehle: PHP-Code:
Erweitern wird das Download-Skript nun so, dass man beliebig vielen Seiten das Verlinken von Downloads verbieten kann. Dazu legen wir zuerst ein Array an, in dem die URLs der Seiten gespeichert werden: PHP-Code:
Nun brauchen wir noch eine Funktion, die die Prüfung durchführt: PHP-Code:
Damit die Funktion die gewünschten Ergebnisse leifert, muss die Variable $referer natürlich noch zugewiesen werden, die folgenden Zeilen müsst du vor die header()-Befehle und vor die gleich kommende if-Abfrage schreiben: PHP-Code:
Zum Beispiel wird aus http://www.seite.tld/einordner/datei.ext einfach http://www.seite.tld. Das ganze könnte man natürlich auch mit preg_replace() machen, die Variante mit explode() ist aber schneller. So und jetzt brauchen wir noch die Abfrage, die die Funktion test_banned() aufruft und anschließend von dem Rückgabewert abhängige Anweisungen ausführt: PHP-Code:
6. Nur bestimmten Seiten das verlinken von Downloads erlauben Das Download-Skript jetzt so zu erweitern, dass man nur bestimmten Seiten das Verlinken von Downloads erlauben kann (und allen anderen verbieten) ist nun auch kein großer Sprung mehr, da das genauso wie im vorigen Abschnitt funktioniert, nur mit dem Unterschied, dass nun geprüft wird, ob die Seite, von der der Benutzer kommt, den Download verlinken durfte (und nicht, ob sie es nicht durfte). Du musst lediglich die if-Abfrage aus dem vorigen Kapitel erweitern: PHP-Code:
Achtung! In letzterem Fall nicht vergessen, deine eigene Seite in $site einzutragen. 7. Abschließende Überlegungen Das Download-Skript ist jetzt natürlich noch recht undynamisch, wenn man sehr oft neue Downloads zur Verfügung stellen und eventuell auch alte löschen will ist es sehr nervig, ständig die Datei download.php bearbeiten zu müssen. Viel komfortabler wäre es natürlich, die Dateinamen/Pfade in einer Datenbank zu speichern. Das solltest du aber selbst entscheiden, ob sich diese Funktion für dich lohnt, es wird hier auch nicht weiter darauf eingegangen, da das hier ein Tutorial für ein Download-Skript und nicht eines für das Arbeiten mit irgendeiner Datenbank ist. Noch eine kleine Anmerkung: Da hier mit readfile() gearbeitet wird, können nur Dateien verwendet werden, die das, in der php.ini festgelegte, Speicherlimit nicht überschreiten. Die Einstellung in der php.ini heißt memory_limit und ist standardmäßig auf 8M (7,8125KB) gestellt. 8. Verwendete Funktionen/Befehle Und hier gibt's ein Tutorial zu Kontrollstrukturen: Tutorial zu Kontrollstrukturen. Geändert von Jann Hendrik (27.06.2007 um 11:21 Uhr). Grund: intern-tag-Fehler manuell angepasst |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Wie erfolgreiche Downloads zählen? | chgozdz | PHP-Programmierung | 11 | 20.07.2007 16:15 |