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

这不是什么严肃的事情,更不是为了玩耍和试验。 只是不知道我会在哪里开始。 也没有绑定到Node.js,只是认为这是最stream行的服务器端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; 

这里有几个使用节点的替代方法。

你见过V8js PHP扩展 ,它将V8引擎与PHP集成在一起吗? 不过,我自己并没有使用它的经验。

另外,类似于使用节点,你可以安装犀牛 (在Ubuntu的回购,至less从12.04)。 或另一个命令行JavaScript解释器。 然后你可以从shell执行javascript:

 rhino -e '<javascript code>'; 

所以你应该可以做下面的事情。 你将不得不使用print来输出数据,然后以某种方式在php中parsing输出:

 <?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年后更好的解决scheme?

dnode-php会为你今天想要的更好的解决scheme。

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

DNode是最初为Node.js编写的远程方法调用协议,正如名称可能告诉的那样。 但是,由于协议本身非常简单,只需通过TCP连接发送换行符终止的JSON包,实现就会以其他语言出现。 你可以用Ruby,Perl,Python,Java和PHP来谈论DNode。