如何使用Node.js从PHP运行JS并返回值


How could one use Node.js to run JS from PHP and return a value back?

这不是为了任何严肃的事情,更多的是为了玩和实验。只是不知道该从哪里开始。也没有绑定到Node.js,只是发现它是最流行的服务器端JS工具。

如果有一些主要的技术原因,为什么一个人不应该在一个真实的网站上做这样的事情,请随意把它们扔在那里。

我想问的是……

$input = $js_string_built_via_php;
if ($run_on_server)
     $output = node.js($input);
else
     $output = '<script type="text/javascript">'.$input.'</script>';
echo $output;

这里有几种使用node的替代方法。

你见过V8js PHP扩展吗?它集成了V8引擎和PHP。但是我自己没有使用它的任何经验。

或者,与使用node类似,您可以安装Rhino(至少从12.04开始,在Ubuntu repos中可以获得)。或者另一个命令行javascript解释器。然后你可以从shell执行javascript:

rhino -e '<javascript code>';

因此,您应该能够执行如下操作。您必须使用print来输出数据,然后在php中解析输出:

<?php
function execute_js($script) {
    return shell_exec('rhino -e '.escapeshellarg($script));
}
$javascript = "
    function add(a,b) {
        return a+b;
    }
    print(add(5,6));
";
$result = execute_js($javascript);
print $result;

我怀疑这在生产应用程序中是不是一个好主意,而且看起来它可能很容易受到更大的攻击面。客户端可以注入javascript代码,这些代码实际上会在服务器上执行。加载时可能也很慢

3年后有更好的解决方案吗?

dnode-php是一个更好的解决方案。

这里有一个很酷的介绍。正如作者Henri Bergius所提到的:

DNode是一个远程方法调用协议Node.js,顾名思义。但正如协议本身一样非常简单,只需通过TCP发送以换行符结束的JSON数据包连接,实现已经开始在其他语言。您可以使用Ruby、Perl、Python、Java以及现在的语言来讨论DNodePHP .