从PHP脚本调用节点

时间:2016-01-20 19:15:15

标签: javascript php node.js

我尝试使用exec从PHP脚本调用节点脚本:

$output = exec("/usr/bin/node /home/user/nodescript.js");

nodescript.js是:

var Scraper = require('google-images-scraper');

var keywords = process.argv[2];

var scraper = new Scraper({
    keyword: keywords,
    rlimit: 10, // 10 p second
});
console.log("foo");
scraper.list(10).then(function (res) {
    console.log("bar");
    console.log(res);
});
setTimeout(function () {
    process.exit(1);
}, 20000)

但我收到的是字符串" foo",而不是" bar"。如果我从命令行运行节点脚本,我会得到" foo" &" bar"。不知怎的,我在功能中没有收到任何控制台输出。我做错了什么?

3 个答案:

答案 0 :(得分:0)

首先,你无法直接获得exec命令的输出。您需要在文档中定义第二个参数。

exec("node yourfile.js", $output); 
echo implode("\n", $output);

答案 1 :(得分:0)

我在执行python脚本时遇到过这个问题。由于某种原因,最后一行消失了。尝试将2>&1添加到您的脚本中,并将exec更改为shell_exec,这将返回包含错误输出的字符串。看看是否有帮助。

$output = shell_exec("/usr/bin/node /home/user/nodescript.js 2>&1");

我知道2>&1允许脚本将错误和调试输出传递给标准输出,因为它们经历了错误输出。我不得不这样做来调试我的脚本并重新出现最后一行。

答案 2 :(得分:0)

PHP 5.6与phpdbg交互式调试器捆绑在一起。 但是,documentation URL指向过期的域名,此刻,是的,是的。

来源:https://stackoverflow.com/a/36131176/370786