2012-02-15 28 views
0

私はサーバー上でプログラムを起動するPHPスクリプトを書いています。PHP exec()が返さない

私はそうする:このコード行は、「作品」

exec('myAppName'); 

それは実際にプログラムを実行している中で、しかし、私はこのラインから(過去の継続)、それは返すように取得することはできません。

オープンされたプログラムを手動で閉じるか、max_execution_timeを超過するまで、ただ停止します。

明らかなものがありませんか?コマンドの結果から、最後の行:

+0

'fork'してから' exec'したかったですか?'exec'は何らかの形でプロセスを"バックグラウンド "することにはなっていないからです。 – Borealid

+1

暗いところで撮影しますが、 'exec()'の代わりに['passthru()'](http://php.net/passthru)を使ってみてください。プログラムの出力が何かを明らかにするかもしれない。 –

+0

同様の結果を得たパススルー()も試しました。 –

答えて

0

バックグラウンドPHPで処理するには、このような何かをする必要があります。あなたが結果を待っているスクリプトを持たずにバックグラウンドでコマンドを実行したい場合は、次の操作を行うことができます

(&を忘れないでください!)

1

manual for execは、終了する起動されたプログラムを待っているの問題について完全には明らかではないが、戻り値は

戻り値であることを述べています。

つまり、最後の行出力を返すために、起動したプログラムが終了するまでexecが返されません。

0

私は信じているPHPの残りの部分を続けるためには、バックグラウンドが必要です。

Unix/Linuxでは、 "&"文字を使用してください。 ..

おはよう、そういうシステムなんだけど、今は覚えていない - マニュアルをもう一度読んで行くよ。

function spawnBackgroundProcess($sProcessLine) 
{ 
    $aPipes = array(); 

    $rProcess = proc_open($sProcessLine, array(), $aPipes); 
    proc_close($rProcess); 
} 

は本当にそれがproc_ *家族を虐待していますが、それは悲しいことに最善の方法です:

+0

私は元の投稿に述べたはずですが、私はWindows Server上です。 –

0

あり
<?php 
passthru("/usr/bin/php /path/to/script.php ".$argv_parameter." >> /path/to/log_file.log  2>&1 &"); 
?> 

ここで重要なことはいくつかあります。

まず、phpバイナリへのフルパスを入れてください。このコマンドはapacheユーザで実行されるため、そのユーザにはphpのようなコマンドエイリアスが設定されていない可能性があります。

Seccond:「2> & 1」と「&」というコマンド文字列の最後に注意してください。 '2> & 1'は、エラーを標準IOにリダイレクトするためのものです。最も重要なのはコマンド文字列の末尾に '&'です。これは、端末が応答を待たないように指示します。

第三:あなたは

をお楽しみください 'log_file.log' ファイルに777回のアクセス権を持っていることを確認してください!

関連する問題