壊れたメガネ

ホッチキスの達人の意識の高いブログ。

Ruby で PHP を使ってみる。 - gem install php_embed

Php in ruby - SlideShare
http://www.slideshare.net/do_aki/php-in-ruby
php_embed | RubyGems.org
https://rubygems.org/gems/php_embed

やっとこさ Ruby を勉強し始めたNOOBです。
PHPer脳な僕がまず最初に考えたことは、「 RubyPHP って使えたりするの?」という事でした。
それで調べてみたら上記 gem がありました。やった!
という事で早速使ってみました。

基本的に gem install php_embed でインストールできるんですが、 sapi/embed が無いと動きません。
sapi/embed は PHP SAPI(Server API) を備えた動的あるいは静的なライブラリで、 php_embed のビルドに必要なものです。
つまり php_embed を使うためには、

  1. sapi/embed のビルド・インストール
  2. gem install php_embed

という手順を踏む必要があります。

sapi/embed のビルド・インストール

$ git clone git://github.com/php/php-src.git
$ cd php-src
$ ./buildconf
$ ./configure \
>    --prefix=/usr/local \   # インストールするルートディレクトリ。(deafult /usr/local)
>    --enable-embed=shared \ # sapi/embed は欲しいけど、
>    --disable-cli \         # sapi/cli と、
>    --disable-cgi \         # sapi/cgi は要らない。
>    --without-pear          # pear も要らない。
$ make
$ sudo make install

という感じでサクッとビルド・インストールできます。というのは嘘で、 https://github.com/php/php-src/blob/64bd4551b4cf7820c2327312d3b335f9a89e8764/INSTALL#L144 に示されている Requirements を確認しながらビルドする必要があります。

php_embed のインストール

次のコマンドで php_embed をインストールします。

$ gem install php_embed

以下のコードで php_embed を試してみます。
php_embed_testing.rb

$ ruby php_embed_testing.rb
{"foo":"FOO","bar":["h","e","l","l","o"]}
$ php -r 'var_dump(json_decode(`ruby php_embed_testing.rb`));'
object(stdClass)#1 (2) {
  ["foo"]=>
  string(3) "FOO"
  ["bar"]=>
  array(5) {
    [0]=>
    string(1) "h"
    [1]=>
    string(1) "e"
    [2]=>
    string(1) "l"
    [3]=>
    string(1) "l"
    [4]=>
    string(1) "o"
  }
}

やった! PHP の関数使えたよ!という風になります。

蛇足

個人的に関数名を文字列として渡して関数を呼ぶのが手間(クォートとか)だと思ったので、 こういうふうに関数呼べたらいいなーって想いを gem にしてみました。

php_embed_interface | RubyGems.org
https://rubygems.org/gems/php_embed_interface

同じ結果を得るにしてもこうやって呼べたらいいなーと思いました。

PHPEI.php_func_name(args)

って感じで、 PHP の関数を色々呼べます。

$ gem install php_embed_interface 

でインストールできます。 php_embed 依存なので、 gem install php_embed_interface とすれば php_embed も一緒に入ってきます。 こちらも良ければ使ってみて下さい。