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”使用标准输出缓冲区来返回其值(当它执行 shell 命令时),然后它捕获标准输出,将其读回,然后对数据执行一些工作。

我的问题是,当我在远程服务器上本地运行 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

没有看到代码,这似乎很抽象。但似乎这两个脚本实际上都没有返回一个值。所以你使用你的片段我可以推荐这个:

服务器1:

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

服务器2:

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

请注意,第二个脚本返回一个值 & 我也> /dev/null 2>/dev/null &从第二个脚本中删除了它,因为所做的只是阻止正在进行的内联命令的输出。

希望这可以帮助。如果不是,请用不那么抽象——更具体——的例子来说明你在做什么。

于 2013-01-26T23:36:16.833 回答
0

用于stream_get_contents()获取命令输出的内容。

如果您尝试进行一些大型处理,您可能想要使用消息队列(amqp、rabbitmq)或类似 gearman 的东西。

于 2013-01-26T23:48:32.797 回答