我正在开发一个需要远程调用另一台服务器的脚本。我通过执行:
来调用我的脚本(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);
答案 0 :(得分: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");
?>
请注意,第二个脚本会返回一个值&amp;我还从第二个脚本中删除了> /dev/null 2>/dev/null &
,因为所有这些都阻止了来自内联命令的输出。
希望这会有所帮助。如果没有,请用较少抽象和更具体的例子来澄清你在做什么。
答案 1 :(得分:0)
使用stream_get_contents()
获取命令输出的内容。
如果你正在尝试做一些大型处理,你可能会想要使用像消息队列(amqp,rabbitmq)或者像gearman这样的东西。