0

PHP経由で(WindowsとLinuxの両方で)コマンドを実行しようとしています。私の目標は、コマンドの複数のインスタンスを同時に実行することです(したがってバックグラウンド)が、それぞれの出力も取得する必要があります。

出力を取得できないため、これは機能しません。

function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
        pclose(popen("start /B ". $cmd, "r"));  
    } 
    else { 
        exec($cmd . " > /dev/null &");   
    } 
}

フォークは私を助けますか?& を使用してバックグラウンドで PHP exec が動作していないのを見ましたが、出力を取得する場所はどこですか?

どんなアイデアも素晴らしいでしょう!

編集: PHP v5.2 を使用しています。他の PHP バージョンは使用できません!

4

3 に答える 3

2

Linux と Windows の両方の環境と互換性を持たせるには、 Symfony2 Process componentを使用できます。出力を簡単に取得しながら、コード バックグラウンドを実行できます。

use Symfony\Component\Process\Process;

$process = new Process($cmd);
$process->start(function ($type, $buffer) {
    if ('err' === $type) {
        // Do something with error $buffer
    } else {
        // Do something with normal $input
    }
});

// Do something else

// Wait until the process completes
$process->wait();

バックグラウンド実行を許可する$process->start()代わりにを使用する必要があることに注意してください。$process->run()

その他のリンク:

于 2013-01-23T08:16:53.927 に答える
1

& を使用してコマンドを実行し、ファイルに出力します。

exec($cmd . " > output".$NumberOfInstance.".txt &"); 

その後、完了したら内容を読むことができます。

exec($cmd . " > output".$NumberOfInstance.".txt ; php phpscriptwhereyouchecktheoutputfilewithaverylongname.php&"); 

;を使用して、最初のコマンドが終了した後に PHP スクリプトを実行するには、これを試してください。指示の間。

于 2013-01-23T08:04:47.950 に答える
1

「Windows PowerShell」または run>cmd を使用してコマンドを実行すると、出力を簡単に取得できます。すぐに結果が返されます。出力を取得して処理したい場合は、良い解決策ではありません。テストに使用するだけです。結果

ウィンドウとLinuxでコマンドを実行する別のケース:

if (getenv('OS')=='Windows_NT'){
        exec($pathToFileExecute.$command);
    }
    else {
        exec($command);
    }

$pathToFileExcute は Linux の
例では必要ありません: $pathToFileExecute = 'E:^\Setup^\wamp^\bin^\mysql^\mysql5.5.20^\bin^\';

于 2013-01-23T08:19:15.430 に答える