「PHP」Java と連携する
PHP と Java の連携について調べてみたので、その時のメモ。
調べてみると、PHP の拡張に Java と連携できる機能があるみたい。
・PHP: Java - Manual
http://www.php.net/manual/ja/book.java.php
ただ、PHP 4 系までしか、この拡張モジュールは用意されてないみたいです。
ひとまず、今回は PHP 4 系で↑拡張モジュール使って Java と連携させてみました。
※ PHP 5 系等では、"Zend Server"、"PHP/Java Bridge" を使えってありますね。これについては今度やってみよう。
まず、PHP 4 系をインストールする。
※ Apache のインストールディレクトリは "/usr/local/apache2" を想定してます。
ドキュメントは以下になる。
・PHP: Apache 2.x (Unixシステム用) - Manual
http://www.php.net/manual/ja/install.unix.apache2.php
以下の Web ページからソースコードをダウンロードしてくる。
・PHP: Releases
http://www.php.net/releases/
※ "php-4.4.9.tar.gz" をダウンロードしてきました。
適当なディレクトリにおいて展開する。
tar zxvf php-4.4.9.tar.gz
configure を実行する
./configure --prefix=/usr/local/php/4.4.9 --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-config-file-path=/usr/local/php/4.4.9 --with-java
※ インストールディレクトリは "/usr/local/php/4.4.9" とした。
※ php.ini の配置ディレクトリも "/usr/local/php/4.4.9" とした。
※ flex、bison が無いと怒られるので、無い場合は yum 等でインストールしておく。
※ Java の拡張モジュールを使用したい場合は "--with-java" の指定がいるようです。
・PHP: インストール手順 - Manual
http://www.php.net/manual/ja/java.installation.php
make、make install する。
make make install
ひとまず、無事完了したっぽい。
cd /usr/local/php/4.4.9/bin ./php -v PHP 4.4.9 (cgi) (built: Aug 8 2013 22:48:29) Copyright (c) 1997-2008 The PHP Group Zend Engine v1.3.0, Copyright (c) 1998-2004 Zend Technologies
php.ini をコピーする
cp php.ini-recommended /usr/local/php/4.4.9/ cd /usr/local/php/4.4.9/ mv php.ini-recommended php.ini
httpd.conf に LoadModule の設定が追加されていることを確認する。
この際に、ついでに AddType の設定を行なっておく。
LoadModule php4_module modules/libphp4.so ( 略 ) AddType application/x-httpd-php .php
以上でインストールは完了。
動作確認するために、"/usr/local/apache2/htdocs" 配下に test.php として、以下を作成する。
<?php phpinfo() ?>
Apache を起動して、Web ブラウザから "http://XXX.XXX.XXX.XXX/test.php" にアクセスして phpinfo の画面が表示されたら OK かと思います。
ようやく Java との連携に・・・ ( 長かった )
※ Java のインストールディレクトリは "/usr/local/java/jdk1.6.0_34" を想定してます。
まずは、サンプルソースコードを作成します。ドキュメントにあるものをそのままコピペで。
・PHP: 基本的な使用法 - Manual
http://www.php.net/manual/ja/java.examples-basic.php
<?php $system = new Java('java.lang.System'); echo 'Java version=' . $system->getProperty('java.version') . '<br />'; echo 'Java vendor=' . $system->getProperty('java.vendor') . '<br />'; echo 'OS=' . $system->getProperty('os.name') . ' ' . $system->getProperty('os.version') . ' on ' . $system->getProperty('os.arch') . ' <br />'; $formatter = new Java('java.text.SimpleDateFormat', "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz"); echo $formatter->format(new Java('java.util.Date')); ?>
php.ini にも設定が必要なようなので、"/usr/local/src/php-4.4.9/ext/java/README" を確認してみる。以下のような記述がある。
php.ini: [java] java.class.path=/home/rubys/php4/lib/php_java.jar extension_dir=/home/rubys/php4/modules extension=java.so
ただ、↑の設定しても動いてくれない・・・以下のようなエラーが発生しちゃう。
[Fri Aug 09 00:55:22 2013] [error] [client 192.168.1.3] PHP Fatal error: Cannot instantiate non-existent class: java in /usr/local/apache2/htdocs/php/javaSample.php on line 2
ちょっと Web を調べてみると、以下のような情報あったので、参考に php.ini を設定し直す。
・RADKRAFT: PHP: Java extension
http://www.geocities.jp/misurano/oswa/phpjava.html
[java] java.class.path=/usr/local/php/4.4.9/lib/php/php_java.jar java.home = /usr/local/java/jdk1.6.0_34 java.library = /usr/local/java/jdk1.6.0_34/jre/lib/i386/server/libjvm.so java.library.path = /usr/local/php/4.4.9/lib/php/extensions extension_dir = /usr/local/php/4.4.9/lib/php/extensions/ extension = libphp_java.so
また、"/usr/local/php/4.4.9/lib/php/extensions/no-debug-non-zts-20020429" にある "java.so" をひとつ上のディレクトリにコピーしておく。そして、"java.so" に対して "libphp_java.so" といった名前でシンボリックリンク貼っておく。
cp java.so ../ ln -s java.so libphp_java.so
以下のような出力が得られて、無事動きました ( 情報の提供者様、ありがとうございます )。
Java version=1.6.0_34 Java vendor=Sun Microsystems Inc. OS=Linux 2.6.32-220.el6.i686 on i386 金曜日, 8月 09, 2013 at 12:58:52 午前 GMT+09:00
長くなりましたが、以上です。