So hätte ich dir das jetzt auch gesagt. So löst es z.B. auch
www.photocase.de.
1. in dieser schleife die grösse, bzw. die noch zu ladenden bytes
in eine DB oder eine File schreiben. Wenn du die Lösung mit der
Datei nimmst, benenne die Datei z.B. nach einer eindeutigen ID,
Session-ID wird schon kritisch, weil es kann ja sein, das ein Benutzer
mehrere Dateien gleichzeitig uploaden will. IP fällt deshalb auch weg.
Also ordne jedem Upload eine eindeutige Upload-ID zu. Dann sieht
die Datei am besten so aus: 1234567890987654321.prg
Das selbe natürlich mit einer DB, da brauchst du dann halt n unique Feld
für die ID
2. ein zweites script liesst anhand der Unique-ID den Forschritt aus
und errechnet, wie viele Bytes noch geladen werden müssen. Du kannst
ja auch die Geschwindigkeit schätzen, in dem du in deine File/DB den
Timestamp (am genauesten mit Time::Hires) der letzten while-read
iteration schreibst und dann einfach die geschwindigkeit mit dem jetztigen
timestamp abgleichst.
Achja: Du kanns natürlich auch nur alle 5 iterationen von der read-schleife
die File/DB updaten, vielleicht verbraucht das dann weniger resourcen und
zeit.
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...