http und ftp download - bei http wird ISO-Datei kaputtgemacht durch Größenänderung
Hi zusammen,
ich habe ein großes Problem, in einer Firma können User von einer (internen) website DVD-Images herunterladen. Das ist wie folgt realisiert:
Das funktioniert auch einwandfrei, dummerweise kann man so durch den Link schön das Passwort des FTP-Servers sehen (im Browser unten links als Link).
Meine Idee war nun folgende:
Die Zeile 5 durch diese zu ersetzen:
um eine weitere php-datei "dvddownload.php" aufzurufen. Die enthält:
Das funktioniert auch.
Problem: Das runtergeladene ISO-File hat eine (um ein paar Bytes) abweichende Dateigröße, was für MAC-Benutzer bedeutet, dass das Image nicht mehr erkannt wird weil Größe/2048 nicht mehr glatt ist. Bei der ftp-Version besteht das Problem NICHT!
Ich vermute dass hier mein Problem erklärt wird:
http://www.apfeltalk.de/forum/iso-datei-erkannt-t127516.html
Wie erreiche ich nun per http-download dass die Größe der Datei nicht mehr verändert wird, jemand eine Idee?
PS neuen eingeschränkten ftp-user einrichten fällt aus, da liegen pro Ordner sehr viele files und großzügig markieren und runterladen soll vermieden werden, nur durch die Weboberfläche mit vorheriger Berechtigungsprüfung darf man runterladen...
Grüße
Tobi
ich habe ein großes Problem, in einer Firma können User von einer (internen) website DVD-Images herunterladen. Das ist wie folgt realisiert:
...
aus einer Datenbank auslesen welche ID (= Filename) das Image-File hat...
...
$dvdimage=sprintf("ftp://user:password@10.10.10.10/opt/data2/DVD/%s.ISO",$dbobject->id);
printf("<a href=\"%s\" style=\"text-decoration: none;\" ><img src=DVD/dvd_download.gif border=0></a><br>\n",$dvdimage);
...
Das funktioniert auch einwandfrei, dummerweise kann man so durch den Link schön das Passwort des FTP-Servers sehen (im Browser unten links als Link).
Meine Idee war nun folgende:
Die Zeile 5 durch diese zu ersetzen:
printf("<a href=\"DVD/dvddownload.php?id=%s\" style=\"text-decoration: none;\" ><img src=DVD/dvd_download.gif border=0></a><br>\n",$dbobject->id);
um eine weitere php-datei "dvddownload.php" aufzurufen. Die enthält:
<?
$file=$id.".ISO";
$path="/opt/data2/DVD/".$id.".ISO";
header('Content-type: application/$iso');
header("Content-Disposition: attachment; filename=\"".$file."\";" );
readfile($path);
?>
Das funktioniert auch.
Problem: Das runtergeladene ISO-File hat eine (um ein paar Bytes) abweichende Dateigröße, was für MAC-Benutzer bedeutet, dass das Image nicht mehr erkannt wird weil Größe/2048 nicht mehr glatt ist. Bei der ftp-Version besteht das Problem NICHT!
Ich vermute dass hier mein Problem erklärt wird:
http://www.apfeltalk.de/forum/iso-datei-erkannt-t127516.html
Wie erreiche ich nun per http-download dass die Größe der Datei nicht mehr verändert wird, jemand eine Idee?
PS neuen eingeschränkten ftp-user einrichten fällt aus, da liegen pro Ordner sehr viele files und großzügig markieren und runterladen soll vermieden werden, nur durch die Weboberfläche mit vorheriger Berechtigungsprüfung darf man runterladen...
Grüße
Tobi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119708
Url: https://administrator.de/contentid/119708
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
6 Kommentare
Neuester Kommentar
Sollte Zeile 5 nicht eher heißen (also ohne das $ Zeichen)?
Ansonsten fällt mir als Fehlerursache nur ein daß die 32bit Versionen von PHP haben manchmal Probleme mit Dateien > 2GB (ich weiss ja nicht wie groß die ISOs sind) haben. Welcher Browser wird denn auf Mac-Clients zum Download verwendet?
Eventuell kann man sich mit einem geeigneten Tool die kompletten HTTP-Header ausgeben lassen und so dem Fehler auf die Schliche kommen.
header('Content-type: application/iso');
Ansonsten fällt mir als Fehlerursache nur ein daß die 32bit Versionen von PHP haben manchmal Probleme mit Dateien > 2GB (ich weiss ja nicht wie groß die ISOs sind) haben. Welcher Browser wird denn auf Mac-Clients zum Download verwendet?
Eventuell kann man sich mit einem geeigneten Tool die kompletten HTTP-Header ausgeben lassen und so dem Fehler auf die Schliche kommen.
Kann es sein daß du dein Script manchmal mit einem Editor abspeicherst, der bei UTF8-codierten Dateien den sogenannten "Byte Order Marker" schreibt? Das sind genau 3 Bytes, und unter Umständen werden diese dann vom Webserver mit ausgegeben, einige Browser können dies ignorieren, andere schreiben brav alles was vom Server herausgeschickt wird.
Besorge dir am besten mal ein Tool wie z.B. "Fiddler", damit kannst du genau sehen was zwischen Client (Browser) und Server hin und her geschickt wird.
Um ganz sicher zu gehen, solltest du nach dem readfile() direkt ein flush() und exit(); in dein Script schreiben, sonst kann es sein daß ein paar Leerzeilen nach dem schließendenen ?> in deinem Script ebenfalls noch ausgegeben werden.
Besorge dir am besten mal ein Tool wie z.B. "Fiddler", damit kannst du genau sehen was zwischen Client (Browser) und Server hin und her geschickt wird.
Um ganz sicher zu gehen, solltest du nach dem readfile() direkt ein flush() und exit(); in dein Script schreiben, sonst kann es sein daß ein paar Leerzeilen nach dem schließendenen ?> in deinem Script ebenfalls noch ausgegeben werden.