Supportnet / Forum / Skripte(PHP,ASP,Perl...)
Download sicher über php zulassen
Frage
Hallo ich würde gerne Downloads anbieten
das problem ist das ich jedem user nicht "verraten" will wo die datei bei mir auf dem server liegt
dann kann ich gleichzeitig mitzählen wie oft eine datei runtergeladen wurde ( bzw wie oft jemand angefangen hat die runterzuladen )
kann mir da einer ein paar tips geben ?
danke
thomas
Antwort 1 von Nessus
Hi,
Du legst die Datei in ein Verzeichnis außerhalb des Dokument_roots. ein kleines Downloadscript kopiert es dann in ein öffentliches Verzeichnis (Befehl: system()). Vorher wird in einer Tabelle der Name eingetragen, bzw. in einem Textfile der Name Hinterlegt und der Zählerstnd um 1 erhöht.
Mit einem kleinen Eintrag in die Crontab kannst Du das kopierte File dann wieder löschen.
Es ist nur eine Möglichkeit, die Funktioniert allerdings. Allerdings, viele Wege führen nach Rom.
HTH
Nessus
Du legst die Datei in ein Verzeichnis außerhalb des Dokument_roots. ein kleines Downloadscript kopiert es dann in ein öffentliches Verzeichnis (Befehl: system()). Vorher wird in einer Tabelle der Name eingetragen, bzw. in einem Textfile der Name Hinterlegt und der Zählerstnd um 1 erhöht.
Mit einem kleinen Eintrag in die Crontab kannst Du das kopierte File dann wieder löschen.
Es ist nur eine Möglichkeit, die Funktioniert allerdings. Allerdings, viele Wege führen nach Rom.
HTH
Nessus
Antwort 2 von ThomasOOP
:-)
hab ich erwähnt das ich M$'s OS benutze :-)
ausserdem ist dein aufgeführter weg gerade der den ich nicht wollte
wann wurde das file komplett runtergeladen ? d.h. wann kann ichs löschen ? den zeitpunkt zu bestimmen übersteigt meinen skill
habe überlegt das ich das vieleicht über die access datei des apaches mache
man meldet sich an, hat zugriff auf ein Dir, kann runterladen, fertig
*grübel*
wenn sonst noch einer ne idee hat ?
dank dir aber nessus
hab ich erwähnt das ich M$'s OS benutze :-)
ausserdem ist dein aufgeführter weg gerade der den ich nicht wollte
wann wurde das file komplett runtergeladen ? d.h. wann kann ichs löschen ? den zeitpunkt zu bestimmen übersteigt meinen skill
habe überlegt das ich das vieleicht über die access datei des apaches mache
man meldet sich an, hat zugriff auf ein Dir, kann runterladen, fertig
*grübel*
wenn sonst noch einer ne idee hat ?
dank dir aber nessus
Antwort 3 von Nessus
Hi,
ein Schutz über die .htaccess ist ein Verzeichnisschutz, kein Fileschutz.
Du kannst auch hingehen und beim Aufruf des Directorys den Timestamp der vorhandenen Datei auszulesen und wenn ein Verfallszeit von beispielsweise 60min aufgetreten ist, diese einfach vor dem Verzeichnislisting löschen.
Dadurch ist definitiv beim Aufruf der DAtei immer nur genau die benötigte Datei vorhanden.
Wie es unter Windows mit der .htaccess aussieht, kann ich leider nicht sagen, da ich das noch nicht verbrochen habe.
Nessus
ein Schutz über die .htaccess ist ein Verzeichnisschutz, kein Fileschutz.
Du kannst auch hingehen und beim Aufruf des Directorys den Timestamp der vorhandenen Datei auszulesen und wenn ein Verfallszeit von beispielsweise 60min aufgetreten ist, diese einfach vor dem Verzeichnislisting löschen.
Dadurch ist definitiv beim Aufruf der DAtei immer nur genau die benötigte Datei vorhanden.
Wie es unter Windows mit der .htaccess aussieht, kann ich leider nicht sagen, da ich das noch nicht verbrochen habe.
Nessus
Antwort 4 von semi
.htaccess funktioniert unter Windows auch gut.
Du kannst die Dateien in einem Unterverzeichnis speichern und dort eine htaccess Datei mit folgendem Inhalt ablegen
Den Zugriff auf die Dateien erlaubst Du dann nur über ein PHP-Skript.
Jede Datei bekommt dabei irgendeine ID.
z.B.
http://....../download.php?id=dl0001
Die Id's, die dazugehörigen Dateinamen und Downloadzähler kannst Du in einer Datenbanktabelle speichern.
Das Skript könnte ungefähr so aussehen:
Gruß,
Michael
Du kannst die Dateien in einem Unterverzeichnis speichern und dort eine htaccess Datei mit folgendem Inhalt ablegen
<Limit GET POST>
order deny,allow
deny from all
</Limit>
Den Zugriff auf die Dateien erlaubst Du dann nur über ein PHP-Skript.
Jede Datei bekommt dabei irgendeine ID.
z.B.
http://....../download.php?id=dl0001
Die Id's, die dazugehörigen Dateinamen und Downloadzähler kannst Du in einer Datenbanktabelle speichern.
Das Skript könnte ungefähr so aussehen:
<?php
function id2filename($id)
{
// TODO: Statt des Arrays hier ein DB-Zugriff
$files = array (
"dl001" => "prg_v1.zip",
"dl002" => "prg_v2.zip",
"dl003" => "prg_v3.zip"
);
return (isset($files[$id]))?$files[$id]:false;
}
function zaehlerInkrementieren($id)
{
// TODO: Zähler in der DB inkrementieren
}
if(!isset($id) || !($file=id2filename($id)))
{
Header("Status: 404 Not Found");
exit();
}
$dir = "./files";
Header('Content-Type: application/force-download');
Header("Content-Transfer-Encoding: binary");
Header("File-Length: " . filesize("$dir/$file"));
Header("Content-Disposition: attachment;filename=$file");
Header("Cache-Control: no-store, no-cache, must-revalidate");
Header("Pragma: no-cache\n");
readfile("$dir/$file");
?>Gruß,
Michael
Antwort 5 von Nessus
Hi,
schaue Dir das mal an:
http://www.tutorials.de/tutorials25850.html
Nessus
schaue Dir das mal an:
http://www.tutorials.de/tutorials25850.html
Nessus
Antwort 6 von ThomasOOP
Danke ihr beiden, wirklich sehr gute Tips/Anregungen.
Werds direkt mal testen.
Werds direkt mal testen.

