Hallo Systemumgebung: PHP: 4.3.10, safe_mode aus. Wahrscheinlich als Modul. Apache: Apache/1.3.29 (Unix) OS: Irgendein Linux (dedicated Server bei Schlund) Aufgaben: Ich will aus einem PHP-Script A heraus mittels exec() ein PHP-Script B aufrufen, welches im Hintergrund eine längere Aufgabe durchführt. Problem: Was unter Windows funktioniert, geht unter Linux (mit entsprechend angepaßter Anweisung) gänzlich daneben: Dort wird nicht B aufgerufen, sondern es wird wieder und wieder, offenbar endlos, A aufgerufen. Ich habe mal den Code aufs nötigste reduziert. Dann sehen die Scripte folgendermassen aus: =========== Script test_caller.php (=A) ========================= <? $fileOutput = time().'.txt'; $command = "/usr/local/bin/php test_called.php > $fileOutput &"; exec( $command ); ?> ================================================================= =========== Script test_called.php (=B) ========================= <? print "Bin da."; ?> ================================================================= Wird Sript A ausgeführt, dann sollte eigentlich eine Datei mit irgendeiner hohen Zahl im Namen und der Endung .txt erzeugt werden und diese sollte als Inhalt den Text "Bin da." enthalten. So passiert es auch, wenn ich A in einer SSH-Shell (Bash) ausführe. Wird A aber übers Netz durch einen Browser aufgerufen, so passiert etwas ganz anderes: Es werden endlos entsprechende <ZEIT>.txt-Dateien erzeugt, die als Inhalt alle die Aushabe von Script A haben. Da passieren also gleich zwei Dinge, die nicht passieren sollten: 1. Enthält die Ziel-Datei nicht die Ausgabe von B, sondern die von A. 2. Wird A aus irgendeinem Grund endlos neu aufgerufen und erzeugt dabei endlos neue Dateien. Ein bisschen so, als würde jemand im Browser ganz schnell reload drücken (mal abgesehen von Punkt 1.), aber im Browser passiert nichts und es läuft auch noch weiter, wenn ich ihn beende. Es macht ganz den Eindruck, als würde durch exec() nicht Script B aufgerufen werden, sondern erneut A und dann wieder und wieder... bis ich das Script lösche. Einen Fehler im Code schliesse ich aus, da es in der Shell funktioniert. Ohne Umleitung der Ausgabe in eine Datei oder ohne & passiert tritt übrigens dasselbe Problem aus. Ich habe auch schon versucht, aus A heraus nicht B direkt aufzurufen, sondern ein Batch-Programm (sagt man das unter Linux?), welches wiederum B aufruft. Das Problem bleibt unverändert erhalten. Rufe ich statt des Scripts B aus A heraus ein Systemkommando auf,, z.B. ls, passiert nichts unerwartetes. Ich denke also, dass hat etwas mit der Umgebung, also Linux, Apache oder PHP zu tun. Es ist sogar so, dass Script A auch beim x-ten Aufruf noch die Daten hat, die es beim Aufruf vom Browser bekommen hat, z.B. den Referer. Also irgendein Nebeneffekt der ausführenden Shell scheint es auch nicht zu sein. Kann mir jemand einen Tipp geben oder mal nachprüfen, ob das Problem so auch mit anderen Systemen auftritt - mir steht kein anderes Linux zur Verfügung. Tschüssi -- 1 Bodo Kaelberer 123 http://www.webkind.de/ http://www.kaelberer-aio.de/ 3 Seelig sind die, die da arm an Geist sind, denn sie werden 4 sich Christlich Soziale Union nennen.