1

这不是为了任何严肃的事情,更重要的是只是玩耍和试验。只是不确定我会从哪里开始。也没有绑定到 Node.js,只是认为它是最流行的服务器端 JS 工具。

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

我要问的是……</p>

$input = $js_string_built_via_php;

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

echo $output;
4

2 回答 2

6

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

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

或者,与使用节点类似,您可以安装Rhino(至少从 12.04 开始在 Ubuntu 存储库中提供)。或另一个命令行 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 代码。加载时可能也很慢。

于 2013-01-14T17:58:52.253 回答
0

3年后更好的解决方案?

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

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

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

于 2013-05-19T14:06:55.967 回答