DanielE: Progessbar beim Downlaoden von Dateien (Ajax)

Beitrag lesen

Aloha!! Und danke für die Antwort.

Das kann dann der Fall sein, wenn der Webserver so ausgelastet ist, dass er den zweiten Request gleich gar nicht berücksichtigen kann. Oder aber das zweite Script wird zwar gestartet, wartet aber freiwillig oder gezwungen auf die Freigabe der vom ersten Script belegten Ressource. Ebenfalls möglich ist, dass der Client sich blockiert hat weil er auf die Antwort des ersten Scripts wartet. Es ist eine gängige Einstellung in den Clients, die Anzahl der parallelen Requests zum gleichen Server einzuschränken.

Das wird wahrscheinlich der Fall sein, wobei es ja eigentlich nur eine Übertragung einer Datei per FTP ist. Das sollte eigentlich keine anderen PHP-Prozesse blokieren? Ausgelastet ist das System, wenn man sich die Prozessliste anschaut, nicht. Mit den Client halte ich eher für unwahrscheinlich, da andere Test von mir gezeigt haben, dass er die verarbeiten kann, nur der Webserver reicht nicht schnell genug Infos weiter.

Was genau muss man sich unter "kleines Webinterface installiert" vorstellen? Wenn es mehr ist als in einem herkömmlichen Browser angezeigtes HTML (evtl. gewürzt mit etwas Javascript) warum kann es dann nicht auf Ereignisse wie "wieder ein Stück Datei übertragen" reagieren und eine Fortschrittsanzeige bedienen?

Hier noch einmal ein paar detailiertere Infos zur Technik, die ich verwenden möchte bzw., wie ich mir das vorstelle. Also ich lade eine Datei per FTP mittels PHP von einem Server runter. D.h. das PHP auf dem Server, welches ich per Browser aufrufe, läuft etwa 3-4 min, bis die Datei fertig geladen hat. Das Problem ist, dass ein Benutzer, der davor sitzt, natürlich ungeduldig wird, da das ganze so lange dauert. Also war die Idee folgende:
Ich öffne per JavaScript und Dojo ein Dialogfenster. Das deaktiviert den Hintergrund der HTML-Seite. Nachdem das Fenster geöffnet ist, sende ich einen Ajax-HTTP-Request an den Webserver und rufe die Seite auf, die die Datei downloaded. Dieser Ajax-Http-Request dauert natürlich relativ lange (also die 3-4 min, die er zum download benötigt). Parallel dazu mache ich mit setInterval in regelmäßigen Abständen einen zweiten Ajax-HTTP-Request. Dieser soll einen Service auf dem Webserver ansprechen, welcher die Dateigröße einer Datei anzeigt, die gerade gedownlaoded wird. Deshalb brauche ich auch nicht auf den anderen Prozess zu warten, ich greife ganz einfach auf die Datei im Filesystem zu und die wird immer größer. Ist zwar nicht 100%ig die richtige Größe der Datei, aber so wichtig ist das auch nicht. Es stimmt halt so grob. Wenn jetzt der zweite Ajax-HTTP-Request antwortet. Habe ich die ungefähre Größe der Datei also, wie groß ist die Datei etwa. Daraufhin könnte man dann ausrechnen, wie groß ein Balken in einer Progessbar sein soll. Wenn der erste Ajax-HTTP-Request fertig ist, dann ist der Download beendet und ich kann den Javascript-Dialog schließen und clearInterval aufrufen, damit er nicht immer die Dateigröße pollt.

Der zweite Ajax-HTTP-Request, um die Dateigröße zu bekommen funktioniert allerdings nicht, wie der Apache bzw. PHP blockt und erst wieder antwortet, wenn die Datei gedownloaded ist... dumm oder! Ich bin mir nicht sicher, ob ich das vorher so verständlich formuliert habe. Hoffentlich ist es jetzt besser.

Ich habe übrigens eine andere Implementierung hinbekommen, die nicht ganz so schön ist. Also ich habe folgendes gemacht: Die Progessbar bewegt sich einfach nur hin und her. Ich frage also nicht ständig die Dateigröße ab und wenn die Datei gedownloaded ist - das weiß ich ja, wenn der Ajax-HTTP-Request antwortet, dann schließe ich den Javascript-Dialog. Funktioniert zwar und ist schon besser als einfach  nur das Skript laufen zu lassen und den Benutzer warten zu lassen, aber besser ist natürlich eine Anzeige, die genauer ist.

Gruß und nochmals Danke

Daniel