0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

phpのexec() 関数で日本語戻り値の受け取り方

Last updated at Posted at 2021-07-01

概要

phpのexec関数でコマンドを実行できるという話を聞いて、
pythonでテキストマイニングのプログラムを書き、
その結果をphpに返すということをしてみたんですが、、、
まぁめっちゃ苦戦したよね。
返り値として日本語をphpに渡すことを考えてる人の一助になればと思います。

exec関数の使用例

実行したいコマンドと返り値を受け取る変数を指定する場合の例。

sample.php
# ここには実行したいコマンドを指定(この例では.pyを指定)
$command=" ./test.py ";

# 実行結果が$outputにリスト形式で格納される。
# 格納されるのは標準出力の内容
exec($command,$output);
# 結果の確認
print_r($output);

前提条件

さて、ざっくりexec関数の使い方を見たところで本題のexec関数の返り値として日本語を受け取る方法を見ていく。前提としては、以下2つ。
・ブラウザ上でphpを動かした際に日本語が表示できる
・実行させたいプログラムをブラウザ上で動かした際に結果を日本語で表示できる
(各動作で日本語表示できない場合は、exec関数で値を受け渡す以前の問題である可能性が高い)

exec()関数で日本語返り値の受け取り方

$command に export LANG=ja_JP.UTF-8; っていう設定を渡すことで日本語を返り値として受け取れる。

sample.php
# ここには実行したいコマンドを指定(この例では.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でこれを実行すると確認できる。

LANG.php
php -r "echo shell_exec('echo $LANG');"#LANG設定が確認できるよ

最後に

こうゆうおまじない的な設定は知ってるとすぐ対応出来るけど、知らないとめちゃくちゃ時間かかるよね。。。解決しても達成感ないし、、、なんなんだよほんとに!ってことで最後までお付き合いいただきありがとうございました。今後ともよろしくお願いします。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?