kostenloser Webspace werbefrei: lima-city


FTP- readfile() Download kaputter Datein

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    namebeilimacity

    namebeilimacity hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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.
  4. Autor dieses Themas

    namebeilimacity

    namebeilimacity hat kostenlosen Webspace.

    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
  5. header('Content-Type:'.$mime_type); <--- da liegt aus meiner sicht der hund begraben

    lass dir mal je file den out geben

    Vorgaben :

    https://en.wikipedia.org/wiki/Internet_media_type

    RFC´s werden nicht ohne Grund erstellt :)



    Beitrag zuletzt geändert: 7.6.2013 22:24:19 von n0tiert
  6. Autor dieses Themas

    namebeilimacity

    namebeilimacity hat kostenlosen Webspace.

    Alles ausprobiert, da liegt der Fehler auch nicht, die Mime Types stimmen zu 100% überein.
  7. 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
  8. Autor dieses Themas

    namebeilimacity

    namebeilimacity hat kostenlosen Webspace.

    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.
  9. 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
  10. Autor dieses Themas

    namebeilimacity

    namebeilimacity hat kostenlosen Webspace.

    Auch das hat nicht den gewünschten Erfolg gebracht. In meiner htaccess habe ich bereits folgende Zeile:
    AddDefaultCharset utf8
    nun habe ich in den PHP-Code auch noch
    mb_internal_encoding("UTF-8");
    den intrigiert. Bringen tu das aber alles nichts. Auch in der PHP -ini ist UTF-8 Standard.

    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
  11. Versuche mal
    anstatt
    header('Content-Type:'.$mime_type);
    mit
    header('Content-Type: application/octet-stream');
    zu ersetzen.
  12. das hier solltest du mal verinnerlichen ;)
  13. Autor dieses Themas

    namebeilimacity

    namebeilimacity hat kostenlosen Webspace.

    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.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!