Apfelmännchen: HTML-Ausgabe vor FTP-Upload mit PHP

Servus!
Mit einem lokalen PHP-Script möchte ich eine Datei auf einen Web-Server hochladen. Vor dem Upload sollte aber noch eine Meldung auf dem Bildschirm ausgegeben werden. Der User soll den Upload nicht aktiv starten müssen, aber darüber informiert werden, dass der Upload im Gange ist (der User soll nicht nur den weissen Bildschirm sehen).
Wie mache ich das?

Danke und Grüsse
Apfelmännchen

  1. Hallo,

    Mit einem lokalen PHP-Script möchte ich eine Datei auf einen Web-Server hochladen.

    Bitte beschreibe das ganze etwas ausfuehrlicher.

    Ueblicherweise hat man
    1. Einen "Client"-Rechner.
       Hier muss der Benutzer _von_Hand_ im Browser
       (HTML-Formular) die Datei auswaehlen, die er
       hochladen will, und dann auf "Abschicken" klicken.
       Auf Client-Rechnern laeuft normalerweise
       kein Webserver und kein PHP
    2. Einen "Server"-Rechner - Webserver mit PHP.
       Das PHP-Skript nimmt die gesendeten Daten entgegen
       und speichert sie gegebenenfalls im Dateisystem
       des Webservers.

    Was zwischen dem Moment, wo der Benutzer auf "Absenden" klickt,
    bis zu dem Moment, wo die Datei fertig an den Webserver
    uebertragen ist, angezeigt wird, kann man mit PHP _nicht_
    beeinflussen.

    Siehe auch:
    http://www.dclp-faq.de/q/q-formular-status.html

    mfg, Thomas

    1. Hoi Thomas

      Auf Client-Rechnern laeuft normalerweise
         kein Webserver und kein PHP

      Normalerweise; in meinem Fall aber schon. Auf einem bestimmten Rechner wird ein PHP-Script ausgeführt, welches mit einer FTP-Funktion eine Datei hochlädt. Bevor das lokale PHP-Script jedoch mit dem Upload beginnt, soll es eine Ausgabe am Bildschirm erzeugen.

      Grüsse Apfelmännchen

      1. Hallo,

        Danke fuer die Erklaerung.

        Auf einem bestimmten Rechner wird ein PHP-Script ausgeführt, welches mit einer FTP-Funktion eine Datei hochlädt. Bevor das lokale PHP-Script jedoch mit dem Upload beginnt, soll es eine Ausgabe am Bildschirm erzeugen.

        Ich nehme mal an, dass Du, um das ganze zu starten,
        im Browser das Skript auf dem lokalen Server aufrufst:
        http://localhost/hochladeskript.php

        Das Skript kann also ein paar Zeilen PHP ausgeben,
        und sie mit flush() bereits an den Browser schicken,
        bevor es mit seinen FTP-Aktivitaeten startet:

        echo "<DOCTYPE ...>\n";
        echo "<title>Es wird hochgeladen...</title>";
        echo "<p>Bitte warten - die Datei xyz.txt wird hochgeladen...</p>";
        flush();
        /*
        FTP-Teil
        if (erfolgreich)
          echo"<hr><p>Upload war erfolgreich.<p><a href='index.html'>Weiter...</a>";
        else
          echo "<hr><p>Upload ging in die Hosen...";
        */

        Probier's mal aus - sonst melde Dich wieder und poste
        dann auch ein paar Zeilen relevanten Quellcode...

        Gruesse,

        Thomas

        --
        Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
        Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
        Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
        1. Hallo Thomas
          Vielen Dank für deine Hilfe. Leider funktionierts aber noch nicht so ganz. Ich habe das Problem mal vereinfacht:

          <!doctype html public "-//W3C//DTD HTML 4.0 //EN">
          <html>
          <head>
                 <title>Title</title>
          </head>
          <body>
          <?
          echo "<p>Ausgabe</p>";
          flush();
          sleep(5);
          ?>
          </body>
          </html>

          Bei mir erscheint die Ausgabe erst nach 5 Sekunden. Eigentlich müsste die Ausgabe aber sogleich angezeigt werden, oder?
          Ich verwende Apache als Webserver. Funktioniert bei dir dieses Script oder siehst du meinen Fehler?

          Besten Dank

          Apfelmännchen

          1. Hallo,

            echo "<p>Ausgabe</p>";
            flush();
            sleep(5);

            Bei mir erscheint die Ausgabe erst nach 5 Sekunden. Eigentlich müsste die Ausgabe aber sogleich angezeigt werden, oder?

            Nach meinem Verstaendnis: ja.
            flush() und das "sichtbare" Ergebnis sind AFAIK
            stark vom Browser abhaengig.
            Vielleicht z.T. auch vom Webserver.

            Ich verwende Apache als Webserver. Funktioniert bei dir dieses Script oder siehst du meinen Fehler?

            Ich habe das Skript auf einen entfernten Server
            (kommerzieller Webhost) hochgeladen.
            Server: Apache/1.3.29 mit PHP/4.3.4 unter Linux.
            Dann habe ich es mit Mozilla 1.5 (Linux) abgerufen.
            <title> und "Ausgabe" werden sofort angezeigt, dann
            zeigt der Browser oben rechts (drehendes Logo) noch
            waehrend ca. 5 Sekunden "Aktivitaet" an, dann ist fertig.

            Wenn ich das Skript noch um ein paar Zeilen erweitere,
            sehe ich die Ausgaben im 5-Sekunden-Takt:

            echo "<p>Ausgabe1</p>";
            flush();
            sleep(5);
            echo "<p>Ausgabe2</p>";
            flush();
            sleep(5);
            echo "<p>Ausgabe3</p>";

            Zu sehen (voruebergehend) hier:
            http://www.tiptom.ch/tests/fremdes/flush_sleep.php

            Nachdem Microsoft im Fruehjahr 2002 diverse (Schweizer)
            Webserver "gescannt" hatte, indem www.example.com/Default.aspx
            und andere, zufaellige "Dateien" vom Webserver verlangt wurden,
            richtete ich ein kleines Beleidigungs-Skriptlein ein, das ebenfalls
            sleep() und flush() verwendet:
            http://www.tiptom.ch/Default.aspx (absichtlich nicht verlinkt)
            (Achtung: Nicht jugendfreie Sprache! Beleidigende Ausdruecke!)

            Gruesse,

            Thomas

            --
            Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
            Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
            Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
            1. Hoi Thomas

              Nur ganz kurz, ich habe nicht viel Zeit.
              Ich glaube das ganze Problem ist stark abhängig vom verwendeten Browser. In der Schule habe ich dein Script mit Safari getestet, es funktioniert tadellos. Mit dem IE (5.2 für Macintosh) jedoch nicht.

              Danke und beste Grüsse
              Apfelmännchen

            2. Nach meinem Verstaendnis: ja.
              flush() und das "sichtbare" Ergebnis sind AFAIK
              stark vom Browser abhaengig.
              Vielleicht z.T. auch vom Webserver.

              Ja, vom Webserver hängt es ebenfalls ab. Dein Script (auf deinem Server ausgeführt)funktioniert, z. B. mit Opera 7. Bei mir lokal funktionierts allerdings nicht.

              Grüsse Apfelmännchen

              1. Hallo,

                flush()
                Ja, vom Webserver hängt es ebenfalls ab.

                Philipp Hasenfratz hat soeben ein paar weitere moegliche Punkte genannt:
                Posting [pref:t=72942&m=419992] im Thread:
                (PHP) Elemente während des Ladevorganges zeigen

                Gruesse,

                Thomas