0

別のサーバーへのリモート呼び出しを必要とするスクリプトを開発しています。次を実行してスクリプトを呼び出します。

(host server) shell_exec("php /dir/script/script.php > /dev/null 2>/dev/null &");

次に実行するもの

(host server) ssh2_exec($con, "php /remote/server/dir/script.php");

私のスクリプト「script.php」は、標準出力バッファを使用してその値を返し(シェルコマンドを実行するときに)、標準出力をキャッチし、それを読み込んでから、データに対して何らかの作業を実行します。

私の問題は、script.php をリモート サーバーでローカルに実行すると、標準出力をキャッチできるため機能することですが、スクリプトをリモートで実行すると、出力が記録されないために失敗します。

リモート サーバー上のリモート スクリプトからの出力をキャプチャして、script.php を実行できるようにするにはどうすればよいですか。

助けてくれてありがとう!

編集:

ssh2_exec を実行する私のコードは次のとおりです。

$stream = ssh2_exec($con, "php /remote/server/dir/script.php" );
stream_set_blocking($stream, true);
$stream_out = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO);
echo stream_get_contents($stream_out);
4

2 に答える 2

0

stream_get_contents()コマンドの出力を取得するために使用します。

大規模な処理を行おうとしている場合は、代わりにメッセージング キュー (amqp、rabbitmq) や Gearman などを使用することをお勧めします。

于 2013-01-26T23:48:32.797 に答える
0

コードを見ないと、これは抽象的なように見えます。しかし、どちらのスクリプトも実際に値を返しているようには見えません。スニペットを使用しているので、これをお勧めします:

サーバー1:

<?php
    shell_exec("php /dir/script/script.php > /dev/null 2>/dev/null &");
?>

サーバー2:

<?php
    return shell_exec("php /dir/script/script.php");
?>

2 番目のスクリプトは値 & を返すことに注意してください。これ> /dev/null 2>/dev/null &は、進行中のインライン コマンドからの出力を妨げるだけなので、2 番目のスクリプトからも削除しました。

お役に立てれば。そうでない場合は、抽象度が低く、より具体的な例を使用して、何をしているのかを明確にしてください。

于 2013-01-26T23:36:16.833 に答える