Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

http und ftp download - bei http wird ISO-Datei kaputtgemacht durch Größenänderung

Frage Entwicklung PHP

Mitglied: bufferm44

bufferm44 (Level 1) - Jetzt verbinden

03.07.2009, aktualisiert 19:53 Uhr, 5063 Aufrufe, 6 Kommentare

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:

01.
... 
02.
aus einer Datenbank auslesen welche ID (= Filename) das Image-File hat... 
03.
... 
04.
$dvdimage=sprintf("ftp://user:password@10.10.10.10/opt/data2/DVD/%s.ISO",$dbobject->id); 
05.
printf("<a href=\"%s\" style=\"text-decoration: none;\" ><img src=DVD/dvd_download.gif border=0></a><br>\n",$dvdimage); 
06.
...	
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:

01.
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:

01.
<? 
02.
$file=$id.".ISO"
03.
$path="/opt/data2/DVD/".$id.".ISO"
04.
 
05.
header('Content-type: application/$iso'); 
06.
header("Content-Disposition: attachment; filename=\"".$file."\";" ); 
07.
 
08.
readfile($path); 
09.
?>
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
Mitglied: Supermax
04.07.2009 um 08:48 Uhr
Sollte Zeile 5 nicht eher heißen
01.
header('Content-type: application/iso');
(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.
Bitte warten ..
Mitglied: bufferm44
04.07.2009 um 13:14 Uhr
Hi Supermax,

ja klar, ohne $, das ist wohl irgendwie beim Kopieren da mit reingerutscht...

Ich habe meinen Fehler mittlerweile gefunden, ich habe gestern anscheinend den Wald vor lauter Bäumen nicht mehr gesehen, nachdem ich irgendwann im Laufe des Tages die "header("Content-Length: $laenge");" Angabe getestet hatte, sie aber anscheinend keinen Wert zurück gab (Pfad falsch? Keine Ahnung), hatte ich diese Zeile wieder auskommentiert. Bei funktionierender Zuweisung von $laenge und dem zurückkegebenem Wert scheinen die Dateigrößen nun nach dem Runterladen wieder exakt zu stimmen.

01.
  
02.
$file=$id.".ISO"
03.
$path= "/opt/data2/DVD/".$id.".ISO"
04.
 
05.
$laenge = filesize($path) ; 
06.
header("Content-Type: application/force-download");  
07.
header("Content-Length: $laenge");  // -----!!!!!------  
08.
header("Content-Disposition: attachment; filename=\"".$file."\";" ); 
09.
readfile($path);
Hatte nur die Möglichkeit das an einem Mac via VPN und VNC zu testen aber dort lief es (habe nur VPN Secure Client für Windows). Zum Testen habe ich nur Images mit <200MB getestet, werd Montag mal ein großes testen...

Auf den Macs kommen übrigens Firefox und Safari zum Einsatz.

LG Tobias
Bitte warten ..
Mitglied: bufferm44
09.07.2009 um 17:32 Uhr
Hm,

bei den meisten Files klappt es jetzt, eben habe ich eins gehabt das war auf dem Server:

2.225.936.384 Byte

und nach dem Download

2.225.936.387 Byte

3 Bytes !!! Wo kommen die nur her?

Tobias
Bitte warten ..
Mitglied: Supermax
09.07.2009 um 17:44 Uhr
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.
Bitte warten ..
Mitglied: bufferm44
10.07.2009 um 02:04 Uhr
Also $leerzeilen= true, sogar 4 Stück, schäm...

das mit dem flush und exit probiere ich morgen mal,

ich benutze PSPad und der Byte Order Marker ist aus, ich denke mal das ist der Punkt "Ident.Bytes bei UTF-8", kein Haken gesetzt...

Tobias
Bitte warten ..
Mitglied: bufferm44
13.07.2009 um 21:23 Uhr
So, das scheint zu laufen, vielen Dank für die guten Tipps. Hast Du noch einen Tipp, warum die zu downloadende Datei NUR BEIM MAC beim runterladen mit "Größe unbekannt" läuft bis sie fertig runtergeladen wurde? Beim PC wird die Größe korrekt ausgegeben die Prozenzanzeige läuft astrein...

LG
Tobias
Bitte warten ..
Ähnliche Inhalte
Netzwerkmanagement
Dateien für einmaligen Download auf einen FTP Server ermöglichen (6)

Frage von staybb zum Thema Netzwerkmanagement ...

Batch & Shell
Mit ISO Datei CMD Befehle ausführen (15)

Frage von Alexsus zum Thema Batch & Shell ...

Windows Systemdateien
Bootable iso Datei mit eigenen Datein erzeugen (10)

Frage von lord-icon zum Thema Windows Systemdateien ...

Windows Installation
gelöst Win10 Build einer Installations-ISO ermitteln (9)

Frage von chiefteddy zum Thema Windows Installation ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

Windows 7
Bluesreens unternehmensweit (19)

Frage von SYS64738 zum Thema Windows 7 ...

LAN, WAN, Wireless
IP Adressen - Modem - Switch - Accesspoint (17)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

Windows 10
Programm Installation bei Win 10 Fehlerhaft (13)

Frage von Keineahnungvonnix zum Thema Windows 10 ...