Blaubart: Upload großer Dateien

'Nabend.

Ich möchte gerne eine Bildergalerie in ein bestehendes CMS (geschrieben in PHP) integrieren. Damit der Benutzer die Bilder nicht selber vorher auf angemessene Größe zurechtschneiden muß, soll das Skript dies übernehmen.

Zu erwarten sind meist unbearbeitete Bilder von Digitalkameras in hoher Auflösung und dementsprechend große Bilddateien. Falls die vom Provider festgelegte upload_max_filesize (welche ich in den meisten Fällen wohl nicht selber hochsetzen kann) darunter liegt, ist ein Upload per POST keine brauchbare Option. Alternativ könnte der Benutzer die entprechende Datei mit einem FTP-Programm seines geringsten Mißtrauens selber in ein festgelegtes Verzeichnis hochladen. Mir wäre es allerdings lieber, den Upload im Sinne des Komforts durch das Skript zu automatisieren, so daß der Nutzer keine anderen Verrenkungen machen muß.

Momentan sehe ich daher nur PHPs FTP-Funktionen als brauchbare Lösung. Spricht aus eurer Sicht etwas dagegen, das so zu handhaben? Gibt es vielleicht noch andere Vorschläge, wie ich es regeln könnte?

Ein Problem sehe ich z.B. darin, daß der Nutzer mit der PHP-Lösung -- im Gegensatz zu den gängigen FTP-Programmen -- keine Informationen über den Fortschritt _während_ des Uploads erhält. "Dieser Vorgang kann einige Zeit in Anspruch nehmen. Bitte warten Sie, bis der Upload abgeschlossen ist." Und dann Stille. Bei größeren Dateien und ungeduldigen Nutzern bestimmt ein Riesenspaß... :(

  1. Hallo Blaubart,

    Momentan sehe ich daher nur PHPs FTP-Funktionen als brauchbare Lösung. Spricht aus eurer Sicht etwas dagegen, das so zu handhaben?

    Ja: Die FTP-Funktionen von PHP können AFAIK nur als FTP-Client agieren. Was nützt dir das im Zusammenhang mit dem Upload, der durch einen ahnungslosen User erfolgen soll?

    Gibt es vielleicht noch andere Vorschläge, wie ich es regeln könnte?

    Ich hasse Java (aus Benutzersicht) und habe keine Ahnung davon (aus Programmierersicht). Aber das ist so ein gaaanz seltener Fall, wo ich sagen würde: Vielleicht alternativ mit einem Java-Applet.

    Ein Problem sehe ich z.B. darin, daß der Nutzer mit der PHP-Lösung -- im Gegensatz zu den gängigen FTP-Programmen -- keine Informationen über den Fortschritt _während_ des Uploads erhält.

    Nein, das viel größere Problem ist, dass er die Datei trotz allem erst mal per HTTP an das PHP-Script hochladen muss (was ja schon das Problem ist), das dann seinerseits die Datei auf einen FTP-Server schieben könnte - aber wozu?

    So long,
     Martin

    --
    Alleine sind wir stark...
    gemeinsam sind wir unausstehlich!
    1. 'Nabend Martin.

      Die FTP-Funktionen von PHP können AFAIK nur als FTP-Client agieren. Was nützt dir das im Zusammenhang mit dem Upload, der durch einen ahnungslosen User erfolgen soll?

      Das mußt du mir nochmal genauer erklären. Oder meinst du damit auch das "viel größere Problem" (siehe unten)?

      Ich hasse Java (aus Benutzersicht) und habe keine Ahnung davon (aus Programmierersicht). Aber das ist so ein gaaanz seltener Fall, wo ich sagen würde: Vielleicht alternativ mit einem Java-Applet.

      Das müßte ich mir erstmal genauer anschauen. Der Vorteil wäre -- wenn ich das richtig sehe --, daß solche Applets direkt im Browser des Nutzers laufen und nicht den Umweg über ein Skript auf dem Server nehmen. Richtig?

      Nein, das viel größere Problem ist, dass er die Datei trotz allem erst mal per HTTP an das PHP-Script hochladen muss (was ja schon das Problem ist), das dann seinerseits die Datei auf einen FTP-Server schieben könnte - aber wozu?

      Hm, ja... Ich hab mich auch schon gefragt, ob die upload_max_filesize an dieser Stelle auch greift. Gefunden hab ich dazu allerdings nichts.

      1. Hallo,

        Die FTP-Funktionen von PHP können AFAIK nur als FTP-Client agieren. Was nützt dir das im Zusammenhang mit dem Upload, der durch einen ahnungslosen User erfolgen soll?
        Das mußt du mir nochmal genauer erklären. Oder meinst du damit auch das "viel größere Problem" (siehe unten)?

        ja, eigentlich schon: Dein PHP-Script bekommt die Daten grundsätzlich nur durch einen HTTP-Upload. Erst dann könnte es sich einem anderen Server gegenüber als FTP-Client ausgeben und die Dateien dorthin schieben.

        Ich hasse Java (aus Benutzersicht) und habe keine Ahnung davon (aus Programmierersicht). Aber das ist so ein gaaanz seltener Fall, wo ich sagen würde: Vielleicht alternativ mit einem Java-Applet.
        Das müßte ich mir erstmal genauer anschauen. Der Vorteil wäre -- wenn ich das richtig sehe --, daß solche Applets direkt im Browser des Nutzers laufen und nicht den Umweg über ein Skript auf dem Server nehmen. Richtig?

        Richtig. :-)
        Und so ein Applet könnte dann auch vom Browser des Nutzers aus direkt mit einem FTP-Server Verbindung aufnehmen.

        Hm, ja... Ich hab mich auch schon gefragt, ob die upload_max_filesize an dieser Stelle auch greift. Gefunden hab ich dazu allerdings nichts.

        Diese Beschränkung greift tatsächlich schon bei der temporären Speicherung der Datei durch PHP, nicht erst beim endgültigen Speichern.

        Ciao,
         Martin

        --
        Nicht jeder, der aus dem Rahmen fällt, war vorher im Bilde.
        1. 'Nabend Martin.

          Dein PHP-Script bekommt die Daten grundsätzlich nur durch einen HTTP-Upload. Erst dann könnte es sich einem anderen Server gegenüber als FTP-Client ausgeben und die Dateien dorthin schieben.

          Dann ist vorerst wohl das Java-Applet der heißeste Kandidat. :)
          Vielleicht hat ja jemand anders in der Zwischenzeit noch eine andere Idee.

          Vielen Dank erstmal und gute Nacht.

  2. Hallo Martin,

    Ein Problem sehe ich z.B. darin, daß der Nutzer mit der PHP-Lösung -- im Gegensatz zu den gängigen FTP-Programmen -- keine Informationen über den Fortschritt _während_ des Uploads erhält. "Dieser Vorgang kann einige Zeit in Anspruch nehmen. Bitte warten Sie, bis der Upload abgeschlossen ist." Und dann Stille. Bei größeren Dateien und ungeduldigen Nutzern bestimmt ein Riesenspaß... :(

    schau dir mal http://www.raditha.com/megaupload/ an
    ist bei mir für Kunden-uploads im Einsatz mit echter Fortschrittsanzeige

    Gruß Udo