从 PHP 脚本调用节点


Calling node from a PHP script

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

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

节点脚本.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"。不知何故,我在函数内没有收到任何控制台输出。我做错了什么?

首先,你不能直接获取exec命令的输出。您需要像在文档中一样定义第二个参数。

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

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

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

我知道2>&1允许脚本将错误和调试输出传递给标准输出,因为它们会通过错误输出。 我必须这样做来调试我的脚本,最后一行再次出现。

PHP 5.6 与 phpdbg 交互式调试器捆绑在一起。但是,文档 URL 目前指向一个过期的域,所以,是的。

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