PHP=>Fortschrittsanzeige beim Upload

Huhu :slight_smile:

sagt mal ich möchte eine Fortschrittsanzeige für mein Uploadskript und habe nach einem Tutorial gesucht und das hier gefunden: ultramegatech.com/blog/2008/ … bar-php/5/

So die Demo bei den: ultramegatech.com/blog/examp … d_form.php

und die dateien bei mir: upload.spandauer007.xe.cx/1

Bei mir wird nur der Balken angezeigt mehr nicht. Warum auch immer?! APC ist installiert und aktiviert.

Habt ihr eine Ahnung?

Grüße

Moin,

eine Uploadanzeige mit reinem PHP ist de facto gar nicht möglich. Soll heissen, es wird wohl an den AJAX/JavaScript-Teil von dem Script liegen.

Eventuell stimmen bei dir schlichtweg die Bezeichnungen nicht. Am besten ist es eh, wenn du uns deinen Quelltext zeigst, damit wir dir effektiver helfen können.

Aufs Blaue hineinraten könnte nur helfen, wenn ich eine Glaskugel hätte und Hellseher wäre :wink:

MfG

ich dachte ihr habt so ne schöne glaskugel :ps: :ps:

schreib ich mir für dich auf fürs nächste geburtstagsgeschenk hihi

den quelltext findet ihr unter
ultramegatech.com/blog/2008/ … php/all/1/

Da woThe Finished Product fängt der quelltext von 3 dateien an: upload_form.php, upload.php & getprogress.php

grüße und danke

Dann zeig uns doch mal, was du probiert hast. Der Link upload.spandauer007.xe.cx/1 funktioniert nämlich nicht.

jetzt schon xD

ihr müsst upload_form.php öffnen

[quote=“myPages”]Moin,

eine Uploadanzeige mit reinem PHP ist de facto gar nicht möglich. Soll heissen, es wird wohl an den AJAX/JavaScript-Teil von dem Script liegen.
[/quote]

Genau so isses, da ist Ajax im Spiel. zunächst wird nach einer Sekunde nachgefragt, danach alle 1/10 sek.

Das ist der Code hier:

[...]
<script type="text/javascript">
var HttpRequestObject = false;
if(window.XMLHttpRequest) {
   HttpRequestObject = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
   HttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function startProgress(uid) {
   document.getElementById('upload').style.display = 'none';
   document.getElementById('pb_outer').style.display = 'block';
   setTimeout('getProgress("' + uid + '")', 1000);
}
function getProgress(uid) {
   if(HttpRequestObject) {
      HttpRequestObject.open('GET', 'getprogress.php?uid=' + uid, true);
      HttpRequestObject.onreadystatechange = function() {
         if(HttpRequestObject.readyState == 4 && HttpRequestObject.status == 200) {
            var progress = HttpRequestObject.responseText;
            document.getElementById('pb_inner').style.width = progress + '%';
            document.getElementById('pb_inner').innerHTML = progress + '%';
            if(progress < 100) {
               setTimeout('getProgress("' + uid + '")', 100);
            }
            else {
               document.getElementById('pb_inner').innerHTML = 'Upload Complete!';
            }
         }
      }
      HttpRequestObject.send(null);
   }
}
</script>
[...]

Wenn du nun als else ergänzt, wie in dem nachfolgenden Code, bekommst du zumindest schonmal einen alert, wenn das Ajax fehlschlägt. Vllt hilft es ja, den Fehler einzugrenzen:

<script type="text/javascript">
var HttpRequestObject = false;
if(window.XMLHttpRequest) {
   HttpRequestObject = new XMLHttpRequest();
}
else if(window.ActiveXObject) {
   HttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}
function startProgress(uid) {
   document.getElementById('upload').style.display = 'none';
   document.getElementById('pb_outer').style.display = 'block';
   setTimeout('getProgress("' + uid + '")', 1000);
}
function getProgress(uid) {
   if(HttpRequestObject) {
      HttpRequestObject.open('GET', 'getprogress.php?uid=' + uid, true);
      HttpRequestObject.onreadystatechange = function() {
         if(HttpRequestObject.readyState == 4 && HttpRequestObject.status == 200) {
            var progress = HttpRequestObject.responseText;
            document.getElementById('pb_inner').style.width = progress + '%';
            document.getElementById('pb_inner').innerHTML = progress + '%';
            if(progress < 100) {
               setTimeout('getProgress("' + uid + '")', 100);
            }
            else {
               document.getElementById('pb_inner').innerHTML = 'Upload Complete!';
            }
         }
      }
      HttpRequestObject.send(null);
   }else
      alert('XMLHTTP fehlgeschlagen');
}
</script>

huhu,

hm hilft mir leider auch nicht :frowning:

hat keiner mehr ne ahnung?

grüße und danke für eure bisherigen antworten und weitere antworten

Hab grad mal mit firebug geguckt. Ergebniss des ajax requests ist:<br /> <b>Warning</b>: Division by zero in <b>/var/www/virtual/spandauer007.xe.cx/upload/htdocs/1/getprogress .php</b> on line <b>7</b><br /> 0

Aja, da sieht man mal wieder, wie wichtig es ist, die Rückgabe erstnochmal zu prüfen, und gegebenenfalls einen Fehler auszugeben… !haue :ps:

Hostest du das Script bei bplaced.net ? :ps: :stress: :stress: o.0

dann wär ich schon gesperrt xd

Hat noch jemand ne Idee?

PHPinfo:

Spandauer007.xe.cx/php

Das liegt wohl daran, dass der apc nicht mit dem Zend Optimizer kompatibel ist.

Als Alternative kannst du auch die extension php_uploadprogress nutzen.

Hier ne kleine Demo, wie ich sie nutze

Huhu,

bei mir tut die nicht.

Kannst du mir sagen woran das liegt?

Oder mir evt. dein Skript geben :wink: das wär nett

Grüße

Laut phpinfo() scheint die extension ja geladen zu sein.
Was hast du bisher versucht?
Funktioniert das Beispiel, das in dem Archiv war?

Huhu,

genau das haben wir hochgelanden. Leider hat es nichts gemacht.

der Link:
upload.spandauer007.xe.cx/pro/Ne … rzeichnis/

grüße

Füge das mal in die php.ini ein, falls es noch nicht drin steht.

Vorhin gab es ne Fehlermeldung, dass ich das machen sollte. Habs schon gemacht.

Hi,
hab grade nochmal in meine php.ini geschaut.

uploadprogress.file.filename_template="/tmp/upload_status_%s" uploadprogress.file.contents_template="/tmp/upload_contents_%s" uploadprogress.get_contents=1
vielleicht funktionierts dann damit.