Aufruf eines PHP-Scriptes aus PHP führt zu Chaos

Bodo Kaelberer <[email protected]>
Newsgroups gmane.linux.suse.programming
Message-ID <[email protected]>
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.


-- 
Um die Liste abzubestellen, schicken Sie eine Mail an:
    [email protected]
Um eine Liste aller verfÃŒgbaren Kommandos zu bekommen, schicken
Sie eine Mail an: [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.