PHP で JavaScript を実行したい。裏で node.js を動かすと云ふ方法がある。毎回 node
command を走らせてるとバカだから、裏で node.js の server を立ち上げておいて、其所と socket なり HTTP なりで通信する。めんどい。
其所でPHPから直接V8を呼び出す事ができる。試しにやってみる。
cf. PECL :: Package :: v8js http://pecl.php.net/package/v8js
cf. PHP: V8js - Manual http://www.php.net/manual/en/book.v8js.php
Install
Debian 7.5 に入れる。
cf. Running JavaScript inside PHP code | Web Builder Zone http://css.dzone.com/articles/running-javascript-inside-php
sudo apt-get install php5 php-pear php5-dev libv8-dev libv8-dbg build-essential sudo pecl install v8js-0.1.3 sudo vi /etc/php5/cli/php.ini
php5 は PHP 本体です。
php-pear は pear
command と pecl
command をinstallします。
php5-dev は PHP extention の build に必要です。
libv8-dev は libv8 (V8 JavaScript Engine) を読み込む software の build に必要な header file です。
libv8-dbg は libv8 の debug 用 symbol で、libv8 が一緒に入ります。libv8-3.8.9.20 が入りました。
build-essential は、gcc とか make とかの、標準的な build に必要な tool 一式です。
PECL で V8js module を install するのですが、V8js module には stable 版が無く、beta 迄しか無いので、 v8js-beta をinstall する必要があります。又、最新の beta (0.1.5) と 0.1.4 は libv8 の 3.17.11 に依存するので、 v8js-0.1.3 を入れてゐます。
cf. PHP: 共有 PECL 拡張モジュールを、pecl コマンドを用いてコンパイルする - Manual http://www.php.net/manual/ja/install.pecl.pear.php
最後に php.ini を開き、末尾に
extension=v8js.so
を追記しました。
php -m | grep v8js
追加されてゐます。install に成功したやうです。php -i
で phpinfo();
を見ると、
$ php -i ... v8js V8 Javascript Engine => enabled V8 Engine Compiled Version => 3.8.9.20 V8 Engine Linked Version => 3.8.9.20 Version => 0.1.3 Directive => Local Value => Master Value v8js.flags => no value => no value v8js.max_disposed_contexts => 25 => 25 ...
v8jsの節が追加されてゐます。成功です。
PHPからJavaScriptを実行する
毎回 V8Js を new して負荷を掛ける。
<?php function callJs() { $v8 = new V8Js; $js = <<< 'JS' var ans = 2 * 3 * 7; print(ans + '\n'); 'RETURNS ' + ans; JS; try { var_dump($v8->executeString($js)); } catch (V8JsException $e) { var_dump($e); } } for ($i = 0; $i < 100; ++$i) { callJs(); }
簡単だ。速度も問題ない(〃l _ l)b☆