2017-10-04 83 views
0

我必須使用依賴於Gem的Ruby腳本。當腳本執行時,返回一個JSON對象。PHP執行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

你應該使用'exec'而不是'system'。 'system'只返回執行命令的最後一行,你的情況可能是空的。使用'exec'並獲取數組中的所有輸出。 – Panther

+0

也意識到我沒有被返回一個JSON數組,而是一個Ruby哈希!在Ruby端快速'.to_json'對它進行排序。 –

回答

1

我的問題是,這直接打印到屏幕上,並沒有捕獲變量$ res。

最有可能將其輸出到stderr代替stdout,所以你需要流自己重定向這樣的:

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

這裏更多的流重定向:http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html

或者,使用exec()而不是system()

0

system只返回公司的最後一行命令輸出。在你的情況下,我會使用exec。你的代碼如下所示

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