PHP执行Ruby脚本并捕获JSON结果

时间:2017-10-04 13:57:02

标签: php json

我必须使用依赖于Gem的Ruby脚本。执行脚本时,将返回JSON对象。

我使用以下代码成功执行脚本。

<?php

$ruby = 'ruby ruby/teams.rb';

$res = system($ruby);

var_dump(json_decode($res, true));

以下是来自ruby/teams.rb

的示例回复
{"status"=>"active", "teamId"=>"XPLFKS59PK" }

我的问题是它直接打印到屏幕上,而不是在变量$res中捕获。使用var_dump(json_decode($res, true))时,我会null

我希望能够在$res变量中捕获JSON响应,这样我就可以转换为数组并且值得使用数据。

如果有可能,有什么想法吗?

2 个答案:

答案 0 :(得分:1)

  

我的问题是,它直接打印到屏幕上,而不是在变量$ res中捕获。

最有可能将其输出发送到stderr而不是stdout,因此您需要自己重定向流,如下所示:

$ruby = 'ruby ruby/teams.rb 2>&1';

有关流重定向的更多信息:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

或者,使用exec()代替system()

答案 1 :(得分:0)

system仅返回命令输出的最后一行。在你的情况下,我会使用exec。您的代码看起来像下面的

$ruby = 'ruby ruby/teams.rb';
exec($ruby, $res);
var_dump(json_decode(implode("", $res), true));