PHPでサーバーサイドJavaScriptを実現する。

はじめに

Rhino(MozillaによるJavaによるJavaScriptの実装)を利用してPHPでサーバーサイドJavaScriptを実現しようという試みです。適当にいじっていたら動いたので共有の為にメモっておきます。

キーテクノロジー

構築手順

今回はPHPの4.4.4(縁起悪ぃw)を利用しました。PHPJavaを連携させる必要があるのでまずそちらかの解説です。PHPJavaとの連携はイロイロと実績があるので他の環境で動くと思います。PHP4とApache(HTTPd)とRhinoが必要になります。

  • php.iniの編集
    • extension=php_java.dllを有効にする(;extension=php_java.dll。コロンがついているのでコロンを外します。)
    • [Java]のところを環境にあったもに合わせる。以下は僕の環境です。
    • java.class.pathのところにRhinoのjs.jarもついでに通しておきましょう。
  • C:\Windows\System32に以下のjvm.dllを放り投げる必要がある場合があります。client\jvm.dllとserver\jvm.dllがあるので注意願います。server\jvm.dllが必要です。
  • Apacheの再起動
[Java]
java.class.path = "C:\php4\extensions\php_java.jar;C:\rhino\js.jar";
java.home = C:\Java\jdk1.5.0
java.library = C:\Java\jdk1.5.0\jre\bin\server\jvm.dll
java.library.path = C:\php4\extensions

以上で環境構築はできたはずです...たぶん。

PHPJavaの連携

以下のスクリプトが動けばJavaPHPの連携がとれていると思います。以下のサンプルはPHPのマニュアルから借用いたしました。

$system = new Java('java.lang.System');
// プロパティへのアクセスのデモ
print 'Java version='.$system->getProperty('java.version').' <br>';

PHPでサーバーサイドJavaScript

実験に利用したPHPファイルです。

$javascript = "function f(x){return x+1} f(7)";

$rhino = new Java('org.mozilla.javascript.Context');

$cx = $rhino->enter();
$sc = $cx->initStandardObjects();
// 以下の<cmd>ってなんですか?
$result = $cx->evaluateString($sc, $javascript, "<cmd>", 1, null);

var_dump($cx->toString($result)); // 結果として8が表示されます。

$rhino->exit();

まとめ

PHPJavaを連携させてRhinoを実行してるだけです。基礎実験ということで勘弁下さい。(実務にはどうやって利用できるんでしょうか…(?-?))