Mailinglisten-Archive |
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Thomas Am Mittwoch, 7. April 2004 10:16 schrieb Thomas Gigold: > Hallo. > > Ich habe folgendes Problem und suche nach einer guten Lösung: > Ich habe ein Script, das aus einer Tabelle A knapp 1500 > Einträge liest (werden stetig mehr). Innerhalb der > while-Schleife wird eine Datei gelesen, diese mit einem in > Tabelle B vorhandenen Eintrag gegengeprüft. Gibt es eine > Änderung wird der Inhalt der Datei in die Tabelle B geschrieben. > Schön und gut, die while-Schleife funktioniert. > Da das lesen, prüfen und schreiben so seine Zeit dauert > komme ich nicht in einem "Rutsch" durch die while-Schleife > durch, weil es natürlich in einem Time-Out endet. > Warum sparst Du Dir nicht das lesen der ganzen Dateien und prüfst mittels filemtime() ob die Dateien geändert wurden. Dazu benötigst Du in Tabelle A einen Timestamp der letzten Änderung. Wenn eine Datei geändert wurde [1](also Rückgabe ist TRUE), dann erst liest Du die Datei und updatest Du Tabelle B, sowie den Timestamp in Tabelle A. > Jetzt meine Frage: > Wie schaffe ich es am geschicktesten, dass es nicht in einem > Time-Out landet? Ich dachte ich lasse 50 Datensätze > durchlaufen, geb dann die ID des letzten bearbeiteten > Datensatzes per header-Weiterleitung an das gleiche Script > wieder weiter und fang dann bei meiner DB-Abfrage mit einer > id > $_GET['id'] an. > Dachte eigentlich das sei eine gute Idee; leider bringt es > auch nicht viel, da ich nach einer Weile wieder im Time-Out > lande. Das ist klar, weil der Script erst nach Ende des letzten Vorganges beendet wäre. Das könntest Du nur vermeiden indem Du jeweils Hintergrundprozesse erzeugst, die jeweils unter der Timout-Zeit abgearbeitet werden können. > > Wie handelt Ihr derlei Sachen? Ein Outbut muss dieses Script > nicht erzeugen; es soll per CronJob regelmäßig angestossen > werden und soll "vor sich hin werkeln". Ein Chronjob ist eine gute Idee. Dann wäre es aber auch besser ein kleines Shellscript zu verwenden, oder auf Perl, bzw C zurückzugreifen (wobei C hier wohl ein wenig zuviel des Guten wäre). Dort hast Du jeweils keinerlei Probleme mit Timeouts. [1] function aenderungsPruefung($datei, lastmodified){ var $datei // Name der Datei; var $lastmodified // Timestamp aus der Datenbank if (filemtime($datei) > $lastmodified) { return TRUE; }else{ return FALSE; } } Ich hoffe Dir irgendwie geholfen zu haben, oder zumindest eine kleine Anregung gegeben zu haben. > Grüße aus dem Süden Viele Grüße aus dem Norden Thorsten - -- Thorsten Körner |e-Commerce-Consulting |e-Commerce-Software Dannenkoppel 51 |http://www.123tk.com |Marketing-Software D-22391 Hamburg |Spezial-Hosting |Usability-Proof t.koerner at 123tk.com |CMS / Redaktionssysteme|Beratung & Schulung -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux) iD8DBQFAc9Egs5R35vLkl/cRAjp/AJsHfZHjowqmYmZiUcUFIFWZBGxHMQCgmSBg sR9w2r4sAVy/dsMCKrioQq4= =v2GB -----END PGP SIGNATURE-----
php::bar PHP Wiki - Listenarchive