heinetz: File Upload und Sicherheit

Beitrag lesen

hello,

In meinem Fall ist der "Prozess" ja nicht damit abgeschlossen, wenn die Files vollständig auf den Server geladen wurden. Was darauf folgt, ist zuerst die Validierung durch PHP und danach der Upload aus dem upload_tmp_dir auf einen FTP-Server. Von daher stellt sich die Frage, ob ich auch den Teil mit einem Prozessbalken darstellen kann.

Das passiert ja direkt im Anschluss, wenn der Ajax-Request die Datei fertig hochgeladen hat. Der wartet dann auf die Antwort vom Server. Du müsstest aber statt einer Response mehrere Fortschrittsinformationen senden. Und nun musst du mal schauen, was das XMLHttpRequest für Möglichkeiten hat. Um es vorwegzunehmen: nicht viele. Es gibt da das onreadystatechanged-Event und dazu die Werte, die readystate annehmen kann. State loading (=3) sieht noch am vielversprechendsten aus. Die Frage ist nur, wie oft das gefeuert wird, bevor done (=4) kommt. Da musst du mal schauen, wie sich das verhält, wenn du am Server ein paar Mal flush() und sleep() und eine Ausgabe machst.

Ja, ich werde mal damit herumprobieren. Einen anderen Ansatz, den ich mehrfach gefunden habe ist folgender:

Ein XMLHttpRequest ruft ein PHP-Skript auf, dass für die Verarbeitung der Daten zuständig ist. Dieses PHP-Skript schreibt während der Verarbeitung den Status der Verarbeitung irgendwo (z.b. Session) hin. Ein anderer XMLHttpRequest ruft ein anderes PHP-Skript auf, dass den Status der Verarbeitung ausliesst und zurückgibt. Dieser XMLHttpRequest wird per Intervall wiederholt aufgerufen.

Die Schwierigkeit sehe ich nur darin, dass die Verarbeitung nach dem Upload zum grössten Teil (= wird die meiste Zeit in Anspruch nehmen) darin bestehen dürfte, (das) hochgeladene File(s) mit PHP per FTP auf einen anderen Server zu übertragen. Die PHP-Funktion ftp_put() wird also aufgerufen, um eine Datei zu übertragen und wenn sie damit fertig ist, gibt sie TRUE zurück. Was sie aber tun müsste, damit ich daraus irgendwie meinen Prozessbalken konstruieren kann, wäre zwischendurch mal Bescheid zu geben, wie weit sie ist und was sie denkt, wie lange es noch dauern wird.

Man könnte (jetzt gehen deie Pferde mit mir durch;) vielleicht eine weitere Funktion dazu nutzen, regelmässig zu überprüfen, welche Dateigrösse der bereits übertragene Teil der Datei hat um diesen mit der Grösse des gesamten Files zu vergleichen. Ich habe aber das Gefühl, den Gedanken sollte ich verwerfen ;)

gruss, heinetz