Announcement

Collapse
No announcement yet.

Statusanzeige f. Dateiupload

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Statusanzeige f. Dateiupload

    In einem online Shop (Druckerei) müssen teils sehr große Dateien hochgeladen werden. Um dem Benutzer zu zeigen, dass sich sein Browser noch nicht aufgehängt hat (IE hat keine Fortschrittsanzeige im Statusbar), gibt es verschiedene Möglichkeiten (ich bevorzuge B):

    A) Schlicht die Anzeige einer Animation. Einziges Problem ist der 'Stop'-Button des Browsers.
    Frage: wie kann ich herausbekommen, ob noch Daten zum Server übertragen werden? Kein Eventhandler in JavaScript signalisiert das Betätigen des 'Stop'-Buttons im Toolbar des Browsers.

    B) Um einen echten Fortschrittsbalken samt Uploadgeschwindigkeit und bereits übertragenem Datenvolumen zu steuern, schwebt mir ein Popup, oder besser ein versteckter Frame vor, der ein zweites Skript abfragt. Dieses zweite Skript beobachtet einfach die temporäre Datei, die der Apache bei Uploads erzeugt. Stopt der Benutzer den Upload, wird die tmp-Datei auf dem Server gelöscht.
    Frage: Wie werden die temporären Namen der Uploads auf dem Server erzeugt? Mein lokaler Apache erzeugt Dateien wie /tmp/phpFJAJ4B, wobei phpFJAJ4B nichts mit der PHPSESSID (war in diesem Fall bb6930927bd2eee989aa6f22d06e2ec0) zu tun hat.

    Und sagt nicht das ginge nicht:
    <a href='http://www.ix-print.de/kicker/index.php?active=poster/eigen'>www.ix-print.de</a>
    Zuletzt editiert von Sebastian Rose; 02.11.2007, 18:13.

  • #2
    Sorry, kaum hab ich's gepostet: Die temporären Namen werden nat. per tmpnam (3) erzeugt.

    Die Frage zu B) muss also wahrscheinlich heißen: wie komme ich an den temporären Namen, wenn ich in einem anderen Apache-Childprozess (Php-Childprozess?) laufe?

    Natürlich sind auch Lösugsansätze in Perl oder C willkommen

    Comment


    • #3
      Von einem anderen Childprozess kannst Du auf zwei Wegen an den Namen kommen. Im Script, welches die Datei empfängt hast Du in der globalen $_FILES['<i>inputfeldname_des_dateiuploads</i>']['tmp_name'] den temporären Namen der Datei verfügbar, nun hast Du zwei Möglichkeiten:
      Erzeuge auf demServer eine Datei mit der IP des Clients in der der temporäre Namen gespeichert ist, den das Statusscript ausliest.

      Nutze Ajax um das Ganze von der Clientseite aus zu lösen.

      Das wären zumindest meine spontanen Idden

      Comment


      • #4
        $_FILES['inputfeldname_des_dateiuploads']['tmp_name'] haben wir erst, wenn das empfangende Script vom Apache gestartet wird. Das macht es ja so tricky. Sprich, auch folgendes führt erst zu einer Ausgabe, wenn die Datei fertig hochgeladen ist:

        PHP Code:
        <?php
        if ( isset ($HTTP_POST_VARS['cart_id'] ) )
        {
          echo 
        "Der Versuch SOFORT zu antworten!";
          
        flush();
          exit;
        }
        ?>
        Zuletzt editiert von Sebastian Rose; 02.11.2007, 18:19.

        Comment

        Working...
        X