Suche Downloadscript
M.C. Donald
- php
Hallo,
ich bin auf der Suche nach einem Downloadscript in PHP. Ich habe bis jetzt nur Scripte gefunden, die beim Aufrufen dem Browser die "echte" URL des Downloads mitteilen, praktisch also nur eine Weiterleitung.
Ich suche jedoch ein Script, das die Datei, die heruntergeladen werden soll, auf dem Server öffnet und an den Browser sendet.
Bis jetzt läuft bei mir ein Perl-Script, das ich aber nicht mehr lange verwenden kann, da ein Providerwechsel ansteht.
So in etwa sieht das Perl-Script aus:
my($file) = @_;
open(FIL, "$file") or die "Can't open $file: $!\n";
print "Content-Type: application/unknown\n";
print 'Content-Disposition: attachment; filename=' . basename($file) . "\n";
print 'Content-Length: ' . (stat($file))[7] . "\n";
print "\n";
while (<FIL>) { print; }
close(FIL);
Lässt sich das evtl. in PHP umschreiben? Wichtig ist natürlich, dass die Dateien absolut unverändert gesendet werden.
Ich kenne mich leider noch nicht besonders gut mit PHP aus.
Im Voraus schon mal danke für alle Tipps!
mfG
Quick and dirty:
mit file als Parameter ,GET oder POST, by register globals off musst du den aus dem entsprechenden $_POST oder $_GET-Array auslesen, $path ist der Pfad zu deinen Dateien
<?php
$path="../../files/";
header("Content-Disposition:attachment; filename=$file) ;
header("Content-Type: application/octet-stream");
header("Content-Lenght: ".filesize("$path/$file"));
header("Pragma: no-cache");
header("Expires:0");
$fp = fopen("$path/$file","r");
print fread($fp, filesize("$path/$file"));
fclose($fp);
exit;
?>
Hi,
$fp = fopen("$path/$file","r");
print fread($fp, filesize("$path/$file"));
fclose($fp);
ersetzen durch:
readfile ($filename);
cu,
Andreas
Ich habe es jetzt so geschrieben:
<?PHP
$path="/home/htdocs/download/";
$filename=$path . $file;
Header("Content-Disposition: attachement; filename=$file");
Header("Content-Type: application/octet-stream");
Header("Content-Length: ".filesize($filename));
Header("Pragma: no-cache");
Header("Expires: 0");
readfile($filename);
exit;
?>
Die Variable $file wird dabei über die Adresszeile des Browsers übergeben.
Ich weiß nicht, ob ich heute noch dazu komme, das Script zu testen. Falls jemand Fehler entdeckt, bitte ich um Mitteilung.
Danke!
mfG
OK, ich hab's jetzt mal kurz ausprobiert.
Funktioniert wunderbar, EXE-Dateien sind ausführbar, Downloadmanager funktionieren, Dateien werden unter korrektem Namen und unverändert gespeichert.
Thx!
Hallo,
ich bin auf der Suche nach einem Downloadscript in PHP.
Bis jetzt läuft bei mir ein Perl-Script
open(FIL, "$file") or die "Can't open $file: $!\n";
print "Content-Type: application/unknown\n";
print 'Content-Disposition: attachment; filename=' . basename($file) . "\n";
print 'Content-Length: ' . (stat($file))[7] . "\n";
print "\n";while (<FIL>) { print; }
close(FIL);
Der Content-type wäre denke ich mal besser application/octet-stream gewesen. Außerdem fehlt da irgendwie ein binmode, du sagst ja selbst, dass die Datei nicht verändert werden soll.
Wenn du ein PHP Script möchtest, dann portiere doch einfach deine Perl Lösung. Schwer ist das ja nicht.
Aber ehrlich, was soll der Quatsch? Damit hältst du blos Leute davon ab einen abgebrochenen Download wieder aufzunehmen.
Viele Grüße,
Stefan
"Damit hältst du blos Leute davon ab einen abgebrochenen Download wieder aufzunehmen."
Ich benutze aus bestimmten Gründen ein DL-Script. Ich hatte mal Probleme mit Deep-Links, die extrem viel Traffic verursachten. Deshalb habe ich irgendwann ein Download-script eingesetzt, um dies zu verhindern. Da das Script allein die Dateien senden konnte und ein direkter Zugriff auf die Downloads via .htaccess verboten wurde, ließen sich leicht Mechanismen einbauen, die sicherstellen, dass Downloads nur von meiner Page aus möglich sind. Eine Referer-Überprüfung würde viele Benutzer aussperren, deshalb habe ich mich für eine Lösung entschieden, die nur auf dem Server abläuft.
Dass Downloads nicht wiederaufgenommen werden können, wusste ich nicht. Da ich aber auch stark frequentierte Downloads anbiete, kann ich auf das Script nicht verzichten.
Danke für deine Hilfe!
Danke für alle Tipps!
Ich werde gleich versuchen, das zum Laufen zu bringen.