upload-status...
bense
- php
0 Henryk Plötz0 bense
Morgen!
Ich weiss, das ganze war schon ein paar mal Thema hier, und es ist immer wieder gesagt worden, dass es eigentlich nicht möglich ist.
Wie kann ich den Upload-Status anzeigen? Wenn ein User ein 2 MB File hochlädt könnte das sehr praktisch sein.
Ich hab das ganze bei www2ftp.de gesehen, da funktioniert das. Es wird einfach ein META-Refresh gemacht. Aber wie sieht das serverseitig und vor allem, mit PHP, aus?
Gruss + Danke
Moin,
Ich hab das ganze bei www2ftp.de gesehen, da funktioniert das. Es wird einfach ein META-Refresh gemacht. Aber wie sieht das serverseitig und vor allem, mit PHP, aus?
Mit PHP allein ist das schwierig bis unmöglich, da dein PHP-Skript erst aufgerufen wird, wenn die Datei vollständig empfangen wurde. Es gibt allerdings ein paar Methoden der Kategorie "Von Hinten durch die Brust ins Auge".
Am einfachsten: Du kannst ein Perlskript nehmen, welches letztendlich die POST-Anfrage entgegennimmt. Das kann die Daten die es auf STDIN entgegenkommt in eine Datei schreiben und den Fortschritt in eine andere Datei. Dann kannst du wie von dir erwähnt ein PHP-Skript nehmen welches sich selbst ständig neu lädt und den Fortschritt anzeigt. Das benötigt wenigstens Sessions (oder irgendwas womit du sonst einen 'Treffpunkt' für das PHP- und Perlskript einrichten kannst), ein Frameset und ein bisschen JavaScript um beide Anfragen (senden und empfangen) gleichzeitig zu starten. Und natürlich einen Webserver und einen Browser die mehrere Verbindungen gleichezeitig unterstützen.
Eventuell klappt das auch, wenn du ein PHP-Skript mit der CLI-SAPI (nicht CGI!) nimmst. Das würde sich dann genauso wie ein Perlskript verhalten und alles auf der Standardeingabe kriegen.
Noch eine andere (abstrusere) Methode wäre, einen eigenen kleinen Web-Server mit PHP zu schreiben: Ein PHP-Skript lauscht mit Hilfe der Socket-API auf einem Port und wartet auf eine einkommende HTTP-Verbindung. Die Daten die da kommen kann es dann zeichenweise einlesen und ist so über den Fortschritt informiert. Du brauchst dann noch ein Frameset und ein bisschen JavaScript welches die Sache koordiniert.
In jedem Fall musst du anschließend die angekommenen Formulardaten im multipart-Format parsen, was durchaus anspruchsvoll ist. Ausserdem ist die Wahrscheinlichkeit, dass du dabei gegen das memory-limit von PHP läufst, nicht grade gering.
Das ganze scheint ja ziemlich unmöglich zu sein. Vor allem weil ich eher in PHP bewandert bin als in CGI. Aber ich denke, der Aufwand lohnt sich sowieso nicht.
Aber irgendwie schade, dass der Browser keine Daten hierfür zur Verfügung stellt. Das wäre doch das einfachste. Also, IE-, Netscape-, Opera- und Mozilla-Macher nehmt euch das zu Herzen!
Danke trotzdem und Gruss aus der Schweiz!
Eine unprofesionelle Lösung wäre es, die Dateigröße auszulesen, die Verbindungsgeschwindigkeit des Users zu ermitteln und danach den theoretischen Wert für den Upload zu errechnen. Den kann man dann ja mit JS einfach runterzählen lassen ;)
^^ Wie gesagt: Scheisslösung, aber vielleicht einfach, als sich einen Webserver (lol) zu programmieren.