Christian Wermelinger: Probleme beim Upload grosser Files via http

Hallo

Ich habe ein Script in PHP geschrieben, dass dem User ermöglichen soll grosse Dateien (bis 100 Mb) auf einen FTP-Server zu laden. Ich habe mich der FTP-Funktionen von PHP bedient.
Nun sind aber etliche Probleme aufgetaucht. Gewisse Dateien lassen sich mal hochladen, mal nicht. Zudem gibt es immer Probleme wenn ich grosse Datenmengen transferieren will. Dies obwohl ich in der php.ini die max_upload_filesize sowie den die max_execution_time massiv erhöht habe. Irgendwie macht die ganze Lösung auf mich einen sehr instabilen Eindruck. Wohl nicht zuletzt deswegen, weil ich während des Uploadvorgangs Scriptseitig keine Kontrolle ausüben kann. So ist es z.B. auch nicht möglich den Fortschritt des Uploads anzuzeigen.

Ich habe mir diverse andere Datei-Upload-Scripts in PHP angeschaut, aber keine wirklich brauchbare Alternative gefunden. Ist PHP vielleicht der falsche Ansatz für ein solches Vorhaben? Gibt es brauchbar Alternativen? Wenn ja welche?

Folgende Anforderungen müssten erfüllt sein:

  • einfache Bedienung (Upload via Formular oder ne Drag and Drop Lösung
  • Upload grosser Dateien bis ca. 100 Mb
  • wenn möglich Anzeige des Upload-Fortschrittes

Danke für jeden Tipp!

Gruss Chris

  1. Hallo Christian,

    Ich habe ein Script in PHP geschrieben, dass dem User ermöglichen soll grosse Dateien (bis 100 Mb) auf einen FTP-Server zu laden.

    warum gleich 100MB? ist das nicht etwas viel?

    Ich habe mich der FTP-Funktionen von PHP bedient.

    der ftp-Funktionen für eine http-Upload? Oder wie machst du das überhaupt?

    Gewisse Dateien lassen sich mal hochladen, mal nicht. Zudem gibt es immer Probleme wenn ich grosse Datenmengen transferieren will.

    welche?

    Dies obwohl ich in der php.ini die max_upload_filesize sowie den die max_execution_time massiv erhöht habe.

    post_max_size könnte noch zu klein sein, das steht Standardmäßig auf 8MB.

    Gibt es brauchbar Alternativen?

    einen direkten ftp-Zugang?

    • wenn möglich Anzeige des Upload-Fortschrittes

    das geht bei einem http-Upload nicht (höchstens die Statusanzeige im Browser, wobei die vom IE da nicht viel hilft).

    Grüße aus Nürnberg
    Tobias

    --
    Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
    1. Ein direkter FTP-Zugang würde eigentlich auch existieren. Nur kapieren viele Kunden nicht auf anhieb wie das funktioniert, Dateien von der eigenen Festplatte via Copy Paste bzw. Drag and Drop in den Browser (FTP-Ordner) zu ziehen und somit einen FTP-Upload zu starten. Der Upload sollte von einer Webseite aus gemacht werden können. Habe auch schon an eine Lösung mit zwei I-Frames gedacht, wobei das eine Frame den Inhalt des FTP-Ordners und das ander Frame den Inhalt der Festplatte des Users enthalten sollte und man dann die Dateien einfach rüberziehen kann. Doch soviel ich weiss liegt das Problem darin, dass man nich einfach so Zugriff auf die Festplatte des Clients hat oder? Wie könnte man so was realisieren? Sind da Java Applets unumgänglich?

      1. Hello,

        das Problem liegt bei Browsern neuer als IE 3.1 eher darin, dass sich das Input Feld vom Typ File nur über den Tastaturkanal beschreiben lässt und nicht über JavaScript.

        Drag & Drop kann man also nicht in DHTML aufbauen.

        Vielleicht geht ein JAVA-Applet? Aber JAVA haben auch nicht alle eingeschaltet, weil da eben solche Sachen möglich sein könnten.

        Bleibt für mich mal wieder ein Frage zum Schluss: Wann wird das Script auf dem Server eigentlich angestoßen? Nach den Upload oder bereits am Beginn?

        Wie könnte man das nun testen?

        Grüße

        Tom

        1. Das Script wird erst nach dem Upload angestossen. Anscheinend wird das bei einem Submit eines Formulars dass Felder vom Typ file enthält automatisch das File ins Temp-Verzeichnis upgeloaded, bevor das Script ausgeführt wird, welches im Form-Tag unter action definiert wurde. Stimmt das so? Lässt sich das irgendwie umgehen?

          Das Script könnt ihr ruhig testen unter:
          http://www.onlinedesign.ch/clients/woche-pass/ftp/

          Gruss Chris

          PS: Ich muss so grosse Dateien uploaden können, da Kunden Daten für die Druckvorstufe per Internet übermitteln können müssen. Diese Files sind z.T. bekanntlich sehr gross.

          1. Hello,

            Das Script wird erst nach dem Upload angestossen. Anscheinend wird das bei einem Submit eines Formulars dass Felder vom Typ file enthält automatisch das File ins Temp-Verzeichnis upgeloaded, bevor das Script ausgeführt wird, welches im Form-Tag unter action definiert wurde. Stimmt das so? Lässt sich das irgendwie umgehen?

            Eigentlich ist das ja ganz sinnvoll, dass das Script erst nach dem Transfer angestoßen wird. Sonst würde ja die max_execution_time schon ablaufen. Die soll sich aber nur auf die reine Rechenzeit des Scriptes beziehen.

            Über HTTP sehe ich da keine Chance. Müsstest Du ggf. ein proprietäres Programm erstellen und verbreiten. Es wird ja nicht jeder uploaden dürfen.

            Bleibt noch die Frage, woher die sporadischen Probleme kommen.
            Ich bin mir nicht sicher, aber ich denke, dass HTTP uploads in  base64 umgerechnet werden und dann vom HTTPd wieder zurückgerechnet werden müssen. Könnte das die Ursache sein? Die Anzahl der übertragenen Bytes ist viel höher als die der Nutzbytes.

            Grüße

            Tom

      2. Hi,

        Ein direkter FTP-Zugang würde eigentlich auch existieren. Nur kapieren viele Kunden nicht auf anhieb wie das funktioniert, Dateien von der eigenen Festplatte via Copy Paste bzw. Drag and Drop in den Browser (FTP-Ordner) zu ziehen und somit einen FTP-Upload zu starten.

        Also wer das nicht schafft ist wahrscheinlich auch zu blöd den PC anzuschalten. Ein kleiner Hilfetext wäre nicht möglich?

        Gruß,
        small-step