FTP- readfile() Download kaputter Datein
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
datei
datum
dokument
fehler
file
format
ftp
header
http
kodierung
mime
nutzer
problem
server
test
text
transfer
type
url
-
Tach,
Ich habe ein Problem mit meinem Code. Ich möchte gerne eine Datei von einem FTP-Server per PHP über den Befehl readfile() anbieten. Der Download klappt auch und Bilder, sowie Musik können angeguckt bzw. gehört werden. Allerdings ist ein öffnen von Filmen, PDF’s oder Word-Dokumenten unmöglich. Ich habe mal eine Test *.txt-Datei hochgeladen und sie dann mit der Originalen verglichen. Anscheinend werden bestimmte Zeichen einfach durch etwas anderes ersetzt. Hier mal ein Vergleich:
Original Inhalt:
Dies ist ein Testfile:
TESTTEST
testtest
0123456789
!"§$%&/()=?`\}][{³²~@
*'#+-_.:,;<>|
Ausgabe von PHP readfile():
Dies ist ein Testfile:
TESTTEST
testtest
0123456789
!"�$%&/()=?`\}][{��~@
*'#+-_.:,;<>|
Der Code ist einfach gestrickt. Er übergibt ein paar Header-Daten und per readfile(link zum ftp) wird dann der Download gestartet.
Hier ein Auszug:
filepath = 'ftp://'.$ftp_username.':'.$ftp_pass.'@'.$ftp_connection.':'.$ftp_port.'/'.''.$filepath_ftp; $filename = str_replace(' ', '_', $filename); header('Content-Description:File Transfer'); header('Content-Type:'.$mime_type); header('Content-Disposition: attachment;filename='.$filename); header('Content-Transfer-Encoding:binary'); header('Expires:0'); header("Cache-Control:must-revalidate,post-check=0,pre-check=0"); header('Pragma:public'); header('Content-Length:'.$filesize); readfile($filepath); exit;
Wie geschrieben mein Problem ist, das die Daten kaputt ankommen.
mfg namebeilimacity
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das scheint ein Problem mit der Kodierung zu sein. Irgendwo, auf dem Weg wird sie offenbar beschädigt. Versuche doch mal die txt Datei mit dem PHP Script auf dem Webspace zu speichern und sie per FTP runterzuladen. Dann weißt du zumindest, an welcher Stelle des Downloads der Fehler Auftritt.
Außerdem solltest du deine Quell und Downloaddatei mal im Editor öffnen und dir die Kodierung ansehen. Ich vermute, dass die beim FTP Download Flöten geht. -
Danke für deine Antwort. Dass es ein Problem mit der Kodierung ist habe ich mir auch schon gedacht. Ich habe auch schon versucht die Datei so, ohne sie auf einem FTP-Server zu haben mit readfile() vom Webspace zum download zu bringen, allerdings treten hier dieselben Fehler auf. Ich will ja nicht nur txt Datein zum Download anbieten, sondern auch kurze Clips. Allerdings scheint hier der Fehler in der Kodierung so schlimm zu sein das der Film nicht mehr wiedergegeben werden kann. Die Datein, wird also nicht von mir selbst erzeugt, sonder "Nutzer" laden ihre Daten hoch.
Ich lasse dieses Script momentan nur unter Xampp auf meinen Rechner laufen und benutze den Lima-City Webspace dafür noch gar nicht.
Der Download nur so vom FTP-Server aus geht perfekt. Auch der Download per PHP auf den Webspace und von da aus als Link funktioniert. Das heißt der Fehler muss im Header- oder readfile()-Sektor auftreten (so schätze ich das zumindest ein). Allerdings kann ich den Fehler beim besten Willen nicht finden. Und ich möchte nicht dass eine Datei per Link downloadbar ist. Wenn ich die Datei zuerst Temporär auf dem Temp-Ordner des Webspaces hochlade und dann per readfile() zum download anbiete, bedeutet das eine doppelte Belastung, den ich brauch dann den Speicher gleich zweimal.
Bei meinem Versuch die Datei zuerst auf den Webspace und per readfile() zum download anzubieten tritt derselbe Fehler auf.
mfg namebeilimacity
-
Alles ausprobiert, da liegt der Fehler auch nicht, die Mime Types stimmen zu 100% überein.
-
namebeilimacity schrieb:
Alles ausprobiert, da liegt der Fehler auch nicht, die Mime Types stimmen zu 100% überein.
Windows ? hmmmmm
leg das test file ma als UTF-8 ohne Bom an
un füge mal umlaute bei
sollten diese auch die "rombe" haben liegt es am encoding
EDIT:
Info zu php mp4 Stream
http://stackoverflow.com/questions/14482470/streaming-mp4s-with-php
Beitrag zuletzt geändert: 7.6.2013 22:59:30 von n0tiert -
namebeilimacity schrieb:
Wenn ich das Test File ohne Bom im UTF-8 Format anlege wird der Text richtig dargestellt. Allerdings, wie soll ich das jetzt für die Dateien vom Nutzer machen. Der lädt später ja nicht nur Daten im UTF-8 Format ohne Bom hoch sondern auch z.B. Word Dokumente oder einen Clip.
adde das mal in deine .htaccess respektive php.ini
mb_internal_encoding("UTF-8");
und dann mal mit deinem alten "test" file und dem neuen (UTF-8 ohne BOM)
deine website sollte aber auch im format UTF-8 ohne bom gespeichert werden
beim konvertieren kann es zu probs kommen also src´s nachsehen
Edit:
Zum debuggen kannste das hier nehmen der sagt dir genau was passiert
http://fiddler2.com/home
Beitrag zuletzt geändert: 7.6.2013 23:24:46 von n0tiert -
Auch das hat nicht den gewünschten Erfolg gebracht. In meiner htaccess habe ich bereits folgende Zeile:
nun habe ich in den PHP-Code auch nochAddDefaultCharset utf8
den intrigiert. Bringen tu das aber alles nichts. Auch in der PHP -ini ist UTF-8 Standard.mb_internal_encoding("UTF-8");
edit: Auch das debuggen mit fidder2 hat keine Auffälligkeiten gezeigt. Alles ist wie bei normalen Dingen auch, die Header werden richtig übergeben und auch die Mime-Types. das UTF-8 encoding der PHP-Dateien war nicht notwendig, da ich standardmäßig alle so speichere.
edit²: Wenn ich mit echo in das Script schreibe kommen die Sonderzeichen unverändert mit in die Datei hinein. Vllt. hilft das ja bei der Lösung weiter.
Beitrag zuletzt geändert: 7.6.2013 23:53:07 von namebeilimacity -
Versuche mal
anstatt
mitheader('Content-Type:'.$mime_type);
zu ersetzen.header('Content-Type: application/octet-stream');
-
das hier solltest du mal verinnerlichen ;)
-
Vielen Dank für die ganzen Antworten. Es lag natürlich am encoding. Ich habe die Speicherorte, Größen, Dateinamen etc. aus einer Datenbank ausgelesen. Die inkludierte Datei die die Zugangsdaten für die Datenbank hatte war im UTF-8 Format mit BOM gespeichert. Jetzt hab ich sie ohne BOM gespeichert und siehe da alles geht perfekt.
Ich hack' dann mal das Thema als geschlossen ab. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage