今回、あるシステムで以下のようにしてPHPからjavaを呼び出しMariaDBと連携、ということをしていた。
$cmd = "java -classpath .:/usr/java/default/jre/lib:/usr/java/default/lib:/usr/java/default/lib/tools.jar:/home/hogehoge/mariadb-java-client-1.1.7.jar sort"; exec($cmd, $mag, $res);
さすがにPHPからの実行コマンドにclasspathを直書きするのはよろしくないと思ったので、mariadb-java-client-1.1.7.jarを/usr/share/javaに移動してパスを通した。
で、実行コマンドを以下のようにスッキリさせた。
$cmd = "java sort"; exec($cmd, $mag, $res);
ここまでは良かったのだが、ここからが長かった。これまで、exec()で呼び出しているsort.javaの標準出力の値をphpで受け取って、その後の処理を続けていたのだが、クラスパスを設定した後はなぜか処理が続かない。
色々とググりつつ、ソースを見直しつつ、数時間が経過した。最終的に、webサーバー(Apache)をrestartしたらちゃんと動作した。長かった。。。。
# /etc/rc.d/init.d/httpd restart
もし他に悩んでいる方がいらっしゃったら、参考までに。
(2014/07/27:追記)
パスの通し方をメモしておく。
/usr/share/java/にmariadb-java-client-1.1.7.jarを配置したので、bashrcにパスを追記。
# vim ~/.bashrc 以下を追加 export CLASSPATH=".:/usr/share/java/mariadb-java-client-1.1.7.jar"
その後以下のように設定
# source ~/.bashrc
以下のコマンドで、パスが通っているかを確認できるそう。自分の場合、パスが通っていない時は何も表示されませんでした。
# env | grep CL CLASSPATH=.:/usr/share/java/mariadb-java-client-1.1.7.jar
設定したパスが表示されたので、無事に設定終了。
コメント