Exec() ohne auf ende warten

Hi

Wie ist es möglich eine Windows Batchdatei($batch) mit einem Parameter($_REQUEST[group]) aufzurufen ohne dass das php Script auf Beendigung dieser wartet?

folgendes habe ich bereits versucht:

Exec(„start /B $batch $_REQUEST[group] > bla.txt“);
Exec(„start $batch $_REQUEST[group] > bla.txt“);

define(‚RUNCMDPATH‘, „start_cmd.bat“);
function runCmd($cmd) {
$externalProcess = popen(RUNCMDPATH.’ ‚.$cmd, ‚r‘);
pclose($externalProcess);
}
runCmd($batch.‘ '.$_REQUEST[group]);

das Script hat keine Rückgabe also dürfte php nicht warten. ich verstehe es nicht. Google&CO fanden keine Lösung.

Währe für baldige Hilfe sehr dankbar.

Hi

Wie ist es möglich eine Windows Batchdatei($batch) mit einem
Parameter($_REQUEST[group]) aufzurufen ohne dass das php
Script auf Beendigung dieser wartet?

Meiner Meinung nach ist das nicht möglich, da PHP dafür multithreading-fähig sein müsste.

Toll paar minuten später nu hab ich die erläuchtung.
Für die die das gleiche prob haben es geht mit:

popen(„start /B $batch_datei $parameter“, ‚r‘);

Exec(„start /B $batch $_REQUEST[group] > bla.txt“);
Exec(„start $batch $_REQUEST[group] > bla.txt“);

schonmal überlegt, was passiert, wenn in $_REQUEST[group]
sowas wie „foo & format c:“ drinsteht?
niemals parameter von aussen ungefiltert ans sytem
schicken! in perl gibt es dafür den taint-modus, in
PHP gibt es wohl leider nicths vergleichbares.

Hallo

Wie ist es möglich eine Windows Batchdatei($batch) mit einem
Parameter($_REQUEST[group]) aufzurufen ohne dass das php
Script auf Beendigung dieser wartet?

Meiner Meinung nach ist das nicht möglich, da PHP dafür
multithreading-fähig sein müsste.

http://nl2.php.net/manual/de/function.pcntl-fork.php

Grüße

CMБ

Meiner Meinung nach ist das nicht möglich, da PHP dafür
multithreading-fähig sein müsste.

http://nl2.php.net/manual/de/function.pcntl-fork.php

Ok, stimmt, auch wenn da eigentlich direkt auf die OS-Funktionen zurückgegriffen wird.
Allerdings wird kaum jemand seine PHP Installation auf einem mit der Option --enable-pcntl kompilieren…

(vgl. auch http://nl2.php.net/manual/de/ref.pcntl.php)

Toll paar minuten später nu hab ich die erläuchtung.
Für die die das gleiche prob haben es geht mit:

popen(„start /B $batch_datei $parameter“, ‚r‘);

Schon wieder was gelernt.

Hast du auch das gelesen:

Care needs to be taken in the case of long running child processes. Say
you want to run tail -f /var/log/messages or in my case burn dvds. If
you have a busy wait, Apache2 can sit towards 100%cpu and steadily grow
memory. In my case I crashed the server after about an hour and 90% of
the dvd burned. During that time apache had consumed a gig of swap.

[von betchern0t auf http://nl2.php.net/manual/de/function.popen.php ]

Allerdings wird kaum jemand seine PHP Installation auf einem
mit der Option --enable-pcntl kompilieren…
(vgl. auch http://nl2.php.net/manual/de/ref.pcntl.php)

Stimmt auch wieder. Ich kompiliere zwar mein
Apache selber, aber mein PHP eher nicht :wink:

Grüße

CMБ

Ja klar das stimmt schon, werde ich auch noch einbauen.
Das ganze ist aber auch „nur“ für eine im intranet nutzbare seite.

der Apacheprozess kann mir dadurch nicht abstürzen da die Batch in einem eigenem Prozess gestartet wird. (Sieht man mit dem Process Explorer von Sysinternals)

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]