Hallo Rainer,
Ich habe ein PHP-Script, welches .jpg-Dateien aus einem .zip-Archiv entpackt, die entpackten Bilder verkleinert, Thumbnails erstellt und in einer Datenbank katalogisiert.
okay - es tut nichts zur Sache, aber warum packt jemand JPEG-Grafiken in ein zip-Archiv? Die Kompression, die damit noch zu erzielen ist, dürfte winzig sein.
Eben jene einzufügende Prozentzahl lasse ich mein PHP-Script errechnen.
Wie bekomme ich die PHP-Variable in das JavaScript?
Durch einen HTTP-Request, wer hätte das gedacht? ;-)
XMLHTTPRequest soll hier mein Freund sein.
Ja, das wird der eleganteste Ansatz sein.
Wie ich das verstanden habe kann ich diesen Request auf eine PHP-Variable gucken lassen und meine JavaScript-Funktion starten, sobald sich die PHP-Variable ändert.
Ja. Nur hast du vielleicht noch nicht erkannt, dass du es hier mit *zwei* PHP-Scripts zu tun hast. Eins werkelt vor sich hin und bearbeitet Bilder, ein zweites wird immer mal wieder hingeschickt um nachgucken, wie weit der Kollege mittlerweile ist, diese Information an den Client schicken und dann wieder nach Hause gehen.
Nun sind diese beiden Scripts aber im Arbeitsspeicher völlig getrennt voneinander. Script B (der Fortschrittsmelder) kann nicht einfach auf die Variablen von Script A (dem Image Worker) zugreifen. Du bräuchtest also noch einen Mechanismus, mit dem diese beiden Scripts miteinander kommunizieren können. Eventuell kann der Fortschrittsmelder auch einfach nachsehen, wieviele Dateien schon im Thumbnail-Verzeichnis liegen.
Und schon mal präventiv gefragt: Wird das mein Timeout-Problem lösen?
Nein. ;-)
Der Image Worker hat immer noch dasselbe Arbeitspensum zu bewältigen, das auch immer noch genauso lange dauert. Vielleicht sogar länger, wenn die Kommunikation der beiden ungünstig realisiert ist.
Wenn dein Hoster nicht den safe_mode für PHP verwendet, kann das Script aber mit set_time_limit() sein eigenes Zeitlimit hochsetzen; durch die Angabe von 0 als Argument sogar die Zeitüberwachung komplett abstellen (würde ich aber nicht tun).
So long,
Martin
Was du heute kannst besorgen,
das geht sicher auch noch morgen.