繁体   English   中英

如何使用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;

这里有使用节点的几种选择。

您是否看到V8js PHP扩展 ,该扩展将V8引擎与PHP集成在一起? 我自己没有使用它的经验。

另外,类似于使用节点,您可以安装Rhino (至少在12.04版本起可以在Ubuntu仓库中使用)。 或另一个命令行javascript解释器。 然后,您可以从外壳执行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代码。 加载时也可能非常慢。

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

dnode-php将是您今天想要的更好的解决方案。

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

顾名思义,DNode是最初为Node.js编写的远程方法调用协议。 但是由于该协议本身非常简单,仅通过TCP连接发送以换行符结尾的JSON数据包,因此开始以其他语言弹出实现。 您可以使用Ruby,Perl,Python,Java和现在的PHP来谈论DNode。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM