PHPのとあるライブラリ経由でJavaの処理を呼び出せる環境を整備した
こういう分野ってどうやって勉強したらいいですか?
ひとつひとつを調べるのに時間がかかりすぎてしまいました。
反省の意を込めた備忘録です。
環境構築
Javaをインストールする
# yum install java-1.8.0-openjdk
# yum install java-1.8.0-openjdk-devel
# yum install java-1.8.0-openjdk
# yum install java-1.8.0-openjdk-devel
java -version
や javac -version
でバージョンが返ってくればインストール完了。
参考
CentOS 7 に Java 8 (OpenJDK) を yum インストールする手順 | WEB ARCH LABO
Javaを環境変数に設定する
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
# source java.sh
printenv
で環境変数が設定されていることが確認できればOK。
参考
composerをインストールする
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php composer-setup.php
ll
で composer.phar
がダウンロードされていることが確認できればOK。
参考
Composer を CentOS にインストールする手順 | WEB ARCH LABO
問題解決
コマンドラインで実行した時には問題なかったのに、Apache経由でエラーが発生したため、追加で行った作業。
SELinuxにポリシーを登録する
/var/log/messages
に出力されているログで検索したところ、原因はSELinuxであることを突き止めました。
ところが、解決方法を調べると setenforce 0
の実行によるSELinuxの無効化ばかりです。
これはセキュリティが緩くなりすぎるため、さらに調べて見つけたSELinuxにポリシーを登録する方法で解決します。
ツールの導入も検討したのですが、あまり環境を汚したくなかったので、/var/log/audit/audit.log
を解析して自作しました。
module javalocal 1.0;
require {
type httpd_sys_script_t;
type proc_net_t;
class process { execmem };
class file { read open getattr };
}
allow httpd_sys_script_t self:process { execmem };
allow httpd_sys_script_t proc_net_t:file { read open getattr };
# make -f /usr/share/selinux/devel/Makefile
# semodule -i javalocal.pp
参考
selinux上のCGIでjavaを動かせるようにする方法 - muibrog
SELinuxのポリシー・モジュールを自作する - わんこいん
「SELinuxのせいで動かない」撲滅ガイド
理由がわかれば怖くない!SELinux とのつきあい方
ロケールを日本に設定する
さて、ようやくApache経由でも実行されるようになったのですが、日本語を含むと想定の結果が返ってきません。
これは調べたところ、原因はPHPの exec
や escapeshellcmd
によって日本語が切り捨てられたことでした。試しに実行コマンドを文字列として出力させたところ、日本語が抜け落ちていました。
この解決は有識者が行ったため、私は詳細を把握していないのですが、おそらくPHPとApacheで日本語を扱えるよう設定を変更したのだと思います。
参考
Author And Source
この問題について(PHPのとあるライブラリ経由でJavaの処理を呼び出せる環境を整備した), 我々は、より多くの情報をここで見つけました https://qiita.com/PET_HAL/items/83f12b35cadd9726ac42著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .