Tomcat で PHP を動かす方法って知ってますか?Java の Servlet を動かす環境で PHP も動かすということです。
先日ちょっと調べる必要があったのでメモ代わりに書いておきます。
ここに書かれていることを設定すればよいのですが、、php のコンパイルは Apache のためでなく Tomcat のためにコンパイルするということを知っておかないとちょっとスタックしてしまうと思います。
どういうことかというと、Tomcat で php を動かすというのは Tomcat で php をサーブレットとして動かすということだからです。では設定方法を。
1. configure スクリプトの修正
configure スクリプト内でサーブレットのクラスパスを設定する部分があるのですが、これは Tomcat のバージョンによって異なります。具体的には…
if test -f $withval/lib/servlet.jar; then
SERVLET_CLASSPATH=$withval/lib/servlet.jar
fi
…という部分があるので自分が使っている Tomcat の設定を追加します。例えば…
if test -f $withval/common/lib/servlet-api.jar; then
SERVLET_CLASSPATH=$withval/common/lib/servlet-api.jar
fi
…というような行を追加します。
2. ビルド
./configure に –with-servlet=$TOMCAT_HOME –with-java=$JAVA_HOME を追加します。$TOMCAT_HOME と $JAVA_HOME は Tomcat と Java のディレクトリですので設定してあることを確認して下さい。
このとき Apache 用の –with-apx とか –with-apx2 を指定してはいけません。あとは Apache 用の php をビルドしたときと同じパラメータを指定すればよいと思います。
もちろん make だけで make install はしちゃだめですよ。
3. 設定
出来上がった sapi/servlet/phpsrvlet.jar を $TOMCAT_HOME/common/lib (バージョンごとに適宜読み替え) にコピーします。
次に sapi/servlet/web.xml を webapp の WEB-INF にコピーします。
最後に libphp4.so の場所の設定です。これは LD_LIBRARY_PATH に設定するか、元々 Java が探しに行くパスにコピーするかのどちらかです。
LD_LIBRARY_PATH=$PHP_HOME/libs
export LD_LIBRARY_PATH
…とするか…
cp $PHP_HOME/libs/libphp4.so $JAVA_HOME/jre/lib/i386
…のどちらか好きな方を選んでください。
これで後は Tomcat を起動したら php が動くはずです。
この php を Tomcat 用にコンパイルするということに気付かないと、Tomcat を起動して…
Undefined symbols: ap_block_alarms
…というようなエラーメッセージに悩まされることになります。