Holger: eine statusanzeige für den upload grösserer dateien per php

Also ich habe folgendes script auf der formular seite:

<script language="Javascript">
<!--

var countdown = 100; // 100 KB vorgegeben für die dateigrösse
function doCount() {

if (countdown > 0)
 {
  document.forms[0].status.value ="Download dauert noch " + Math.floor(countdown/16)+ " Sekunden";
      countdown= countdown - 16;
  setTimeout('doCount()',1000);
 }

else
           document.location.href = "index.php";

}

//-->
</script>

Das funktioniert, solange ich statische dateigrössen hab, sprich is nicht besonders nützlich..
Das dumme ist, dass ich die information über die dateigrösse, erst in der php datei kriege, an die ich das formular schicke, nur dann lädt er zuerst die datei hoch und danach wird das javascript erst ausgeführt.
d.h. ich bräuchte irgendeine möglichkeit, an die dateigrösse ranzukommen, um je nach grösse die zeit runterzuzählen wie lang das uploaden noch dauert.

P.S. dass der user per hand die dateigrösse in ein formular feld eintippt fände ich nicht sehr sinnvoll

  1. <script language="Javascript">

    Da fehlt das Type attribut: type="text/javascript"

    <!--

    var countdown = 100; // 100 KB vorgegeben für die dateigrösse

    Was hat diese Zahl mit der Dateigröße zu tun?

    function doCount() {

    if (countdown > 0)
    {
      document.forms[0].status.value ="Download dauert noch " + Math.floor(countdown/16)+ " Sekunden";
          countdown= countdown - 16;
      setTimeout('doCount()',1000);
    }

    Das einizge was du hier tust ist 100/16 sekunden zu warten, bevor du versucht eine neue Seite zu laden.

    else
               document.location.href = "index.php";

    location ist ein Unterobjekt von window, nicht document.

    Das funktioniert, solange ich statische dateigrössen hab, sprich is nicht besonders nützlich..

    Es ist auch so nicht nützlich, da der Browser keine Information darüber preis gibt wieviel er bereits erfolgreich verschicken konnte.

    Das dumme ist, dass ich die information über die dateigrösse, erst in der php datei kriege, an die ich das formular schicke, nur dann lädt er zuerst die datei hoch und danach wird das javascript erst ausgeführt.

    Das CGI ist die erste Instanz, die weiss wie gross die Datei ist.

    d.h. ich bräuchte irgendeine möglichkeit, an die dateigrösse ranzukommen, um je nach grösse die zeit runterzuzählen wie lang das uploaden noch dauert.

    Das uploaden dauert immer unterschiedlich, auch wenn die Datei immer gleich gross ist. Das was du da veruschst ist ziemlich sinnfrei und soweit ich das jetzt überblicke, kann es sogar dazu führen das dein Skript gar nicht funktioniert, da du den upload höchst wahrschienlich sogar abbrichst durch deinen Versuch eine neue seite zu laden.

    Den CGI upload kannst du auf der Clientseite nicht steuern und du hast keinerlei Möglichkeiten rauszufinden wie lange es dauert. Aber da das bei allen Upload Formularen so ist, brauchst du dir keine Sorge machen der User ist entweder daran gewohnt odr er muss sich daran gewöhnen.

    Struppi.

    1. <script language="Javascript">

      Da fehlt das Type attribut: type="text/javascript"

      <!--

      var countdown = 100; // 100 KB vorgegeben für die dateigrösse

      Was hat diese Zahl mit der Dateigröße zu tun?

      function doCount() {

      if (countdown > 0)
      {
        document.forms[0].status.value ="Download dauert noch " + Math.floor(countdown/16)+ " Sekunden";
            countdown= countdown - 16;
        setTimeout('doCount()',1000);
      }

      Das einizge was du hier tust ist 100/16 sekunden zu warten, bevor du versucht eine neue Seite zu laden.

      else
                 document.location.href = "index.php";

      location ist ein Unterobjekt von window, nicht document.

      Das funktioniert, solange ich statische dateigrössen hab, sprich is nicht besonders nützlich..

      Es ist auch so nicht nützlich, da der Browser keine Information darüber preis gibt wieviel er bereits erfolgreich verschicken konnte.

      Das dumme ist, dass ich die information über die dateigrösse, erst in der php datei kriege, an die ich das formular schicke, nur dann lädt er zuerst die datei hoch und danach wird das javascript erst ausgeführt.

      Das CGI ist die erste Instanz, die weiss wie gross die Datei ist.

      d.h. ich bräuchte irgendeine möglichkeit, an die dateigrösse ranzukommen, um je nach grösse die zeit runterzuzählen wie lang das uploaden noch dauert.

      Das uploaden dauert immer unterschiedlich, auch wenn die Datei immer gleich gross ist. Das was du da veruschst ist ziemlich sinnfrei und soweit ich das jetzt überblicke, kann es sogar dazu führen das dein Skript gar nicht funktioniert, da du den upload höchst wahrschienlich sogar abbrichst durch deinen Versuch eine neue seite zu laden.

      Den CGI upload kannst du auf der Clientseite nicht steuern und du hast keinerlei Möglichkeiten rauszufinden wie lange es dauert. Aber da das bei allen Upload Formularen so ist, brauchst du dir keine Sorge machen der User ist entweder daran gewohnt odr er muss sich daran gewöhnen.

      Struppi.

      Also das script funktioniert schon so wie es soll: Ich suche ein 100 kb grosses bild aus, klicke auf absenden und während das php script die datei uploadet(zu sehen am blauen fortschrittsbalken unten im ie), zählt der countdown von 6 sekunden aus abwärts und wenn er bei 0 ist wird die neue seite geladen.

      Die unterschiedliche uploadgeschwindigkeit, bedingt durch unterschiedliche verbindungen wäre ein weiteres problem, an das ich aber noch gar nicht gedacht hab wie ich es löse (evtl einfach nen mittelwert zwischen modem und dsl)

      Dass clientseitig kein upload geht und dass ein serverseitiges script zuerst ausgeführt wird, weiss ich, aber evtl hat ja irgendeiner ne idee für nen workaround, wenn nicht blend ich einfach mit onsubmit zb nen layer ein wo steht: datei wird hochgeladen, bitte warten

      1. Also das script funktioniert schon so wie es soll: Ich suche ein 100 kb grosses bild aus, klicke auf absenden und während das php script die datei uploadet(zu sehen am blauen fortschrittsbalken unten im ie), zählt der countdown von 6 sekunden aus abwärts und wenn er bei 0 ist wird die neue seite geladen.

        wie gesagt das kann zufall sein, das es bei dir funktioniert, woher weißt du denn das der Upload 6 Sekunden dauert?

        Die unterschiedliche uploadgeschwindigkeit, bedingt durch unterschiedliche verbindungen wäre ein weiteres problem, an das ich aber noch gar nicht gedacht hab wie ich es löse (evtl einfach nen mittelwert zwischen modem und dsl)

        Das spilet keine Rolle, es gibt keinen Mittlewert zwischen irgendwelchen Werten, wenn die Verbindung hakt kann der übertragene Datenmenge bei DSL geringer als bei einem Modem sein.

        Dass clientseitig kein upload geht und dass ein serverseitiges script zuerst ausgeführt wird, weiss ich, aber evtl hat ja irgendeiner ne idee für nen workaround, wenn nicht blend ich einfach mit onsubmit zb nen layer ein wo steht: datei wird hochgeladen, bitte warten

        Das ist die einzige funktionierende Lösung.

        Struppi.

        1. Also das script funktioniert schon so wie es soll: Ich suche ein 100 kb grosses bild aus, klicke auf absenden und während das php script die datei uploadet(zu sehen am blauen fortschrittsbalken unten im ie), zählt der countdown von 6 sekunden aus abwärts und wenn er bei 0 ist wird die neue seite geladen.

          wie gesagt das kann zufall sein, das es bei dir funktioniert, woher weißt du denn das der Upload 6 Sekunden dauert?

          Die unterschiedliche uploadgeschwindigkeit, bedingt durch unterschiedliche verbindungen wäre ein weiteres problem, an das ich aber noch gar nicht gedacht hab wie ich es löse (evtl einfach nen mittelwert zwischen modem und dsl)

          Das spilet keine Rolle, es gibt keinen Mittlewert zwischen irgendwelchen Werten, wenn die Verbindung hakt kann der übertragene Datenmenge bei DSL geringer als bei einem Modem sein.

          Dass clientseitig kein upload geht und dass ein serverseitiges script zuerst ausgeführt wird, weiss ich, aber evtl hat ja irgendeiner ne idee für nen workaround, wenn nicht blend ich einfach mit onsubmit zb nen layer ein wo steht: datei wird hochgeladen, bitte warten

          Das ist die einzige funktionierende Lösung.

          Struppi.

          hi struppi,

          6 sekunden ergibt sehr grob: 100kb / 16 kb upload geschwindigkeit (im absoluten idealfall).
          Aber ich werde mich jetzt mal mit der lösung mit nem layer begnügen