概要
phpのexec関数でコマンドを実行できるという話を聞いて、
pythonでテキストマイニングのプログラムを書き、
その結果をphpに返すということをしてみたんですが、、、
まぁめっちゃ苦戦したよね。
返り値として日本語をphpに渡すことを考えてる人の一助になればと思います。
exec関数の使用例
実行したいコマンドと返り値を受け取る変数を指定する場合の例。
# ここには実行したいコマンドを指定(この例では.pyを指定)
$command=" ./test.py ";
# 実行結果が$outputにリスト形式で格納される。
# 格納されるのは標準出力の内容
exec($command,$output);
# 結果の確認
print_r($output);
前提条件
さて、ざっくりexec関数の使い方を見たところで本題のexec関数の返り値として日本語を受け取る方法を見ていく。前提としては、以下2つ。
・ブラウザ上でphpを動かした際に日本語が表示できる
・実行させたいプログラムをブラウザ上で動かした際に結果を日本語で表示できる
(各動作で日本語表示できない場合は、exec関数で値を受け渡す以前の問題である可能性が高い)
exec()関数で日本語返り値の受け取り方
$command に export LANG=ja_JP.UTF-8; っていう設定を渡すことで日本語を返り値として受け取れる。
# ここには実行したいコマンドを指定(この例では.pyを指定)
$command="export LANG=ja_JP.UTF-8; ./test.py ";
# 実行結果が$outputにリスト形式で格納される。
# 格納されるのは標準出力の内容
exec($command,$output);
# 結果の確認
print_r($output);
ちなみに、
export LANG=ja_JP.UTF-8; はサーバーの設定によっては export LANG="en_US.UTF-8" になったりもする。サーバーの設定に合わせる必要があるけど、どんな設定になってるかを調べるには、正常に動いているphpでこれを実行すると確認できる。
php -r "echo shell_exec('echo $LANG');"#LANG設定が確認できるよ
最後に
こうゆうおまじない的な設定は知ってるとすぐ対応出来るけど、知らないとめちゃくちゃ時間かかるよね。。。解決しても達成感ないし、、、なんなんだよほんとに!ってことで最後までお付き合いいただきありがとうございました。今後ともよろしくお願いします。