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

ここでノードを使用する代わりにいくつかの方法があります。

V8エンジンをPHPと統合するV8jsPHP拡張機能を見たことがありますか?でも、自分で使った経験はありません。

または、ノードを使用する場合と同様に、Rhinoをインストールできます(少なくとも12.04からUbuntuリポジトリで利用可能)。または別のコマンドラインjavascriptインタープリター。次に、シェルからjavascriptを実行できます。

rhino -e '<javascript code>';

したがって、次のようなことができるはずです。印刷を使用してデータを出力してから、何らかの方法で出力を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は、今日必要なものに対してより良いソリューションになります。

ここにクールな紹介があります。著者のアンリ・ベルギウスが述べたように:

DNodeは、名前が示すように、もともとNode.js用に作成されたリモートメソッド呼び出しプロトコルです。しかし、プロトコル自体は非常に単純であり、TCP接続を介して改行で終了するJSONパケットを送信するだけなので、実装は他の言語でポップアップし始めています。DNodeは、Ruby、Perl、Python、Java、そして今ではPHPで話すことができます。

于 2013-05-19T14:06:55.967 に答える