2012-06-28 15 views
5

Ich benutze exec(), um Befehl auszuführen, entweder Linux oder Windows.PHP Befehl ausführen und Protokollausgabe ohne Warten

Wie führen Sie einen Befehl, Linux und Windows, und loggen Sie die Ausgabe ohne zu warten?

Ich weiß, für Linux, nicht zu warten, um für die Ausgabe: command* > /dev/null 2>/dev/null &

und Ausgang für Linux anmelden: command* > /path/to/log.txt 2>/path/to/error.txt

Wie würden Sie die Protokollierung gehen und es in dem Hintergrund in einem Befehl Einstellung? Wie würden Fenster aussehen?

+1

Sie können exec() einschließlich der Weiterleitung der Ausgabe in eine Datei, und lesen Sie die Datei später über PHP. – ametren

+1

Die '&' am Ende setzen die Dinge in den Hintergrund. Aber das funktioniert nicht in Windows, das ist Linux. – hakre

+0

In Windows glaube ich, dass Sie einfach 'start' verwenden – ametren

Antwort

12

Unter Linux können Sie tun:

exec('command* > /dev/null 2>/dev/null &'); 

Unter Windows können Sie tun:

pclose(popen('start /B cmd /C "command* >NUL 2>NUL"', 'r')); 

Beide Beispiele deaktivieren Ausgang und Fehler, gehen diejenigen /dev/null (Linux) oder NUL (Windows), die bedeutet, dass sie "nirgendwo" gespeichert sind.

Sie können diese durch gültige Pfade auf Ihrem System ersetzen.

Auf Linux, ein & am Ende platziert es in den Hintergrund. Unter Windows ist dies komplizierter und benötigt start, um den Prozess aufzurufen, und cmd, um die Umleitung der Streams zu ermöglichen.

+0

Ich möchte es auch protokollieren – user1105430

+2

Sie könnten die Ausgabe in eine Datei und dann fopen /! Feof die Protokolldatei –

+0

+1 genau, was ich dachte – ametren

Verwandte Themen