PHPでexec()でPythonを実行させた時、英語の文字は返って来るのですが、日本語だと「Notice: Undefined offset: 0 」とエラーが出ます。2時間かかって問題を解決したので、同じように困っている人がいるのであれば参考にしてください。
Pythonの勉強を今更ながらに始めました
学がないのにプログラミングはキツイ!
ちょっと作りたいものがあってちょっと始めてみました。で、一番最初にやることと言ったら「Hello World」を表示されることですよね〜」。
早速やってみました。
PHPとPythonのファイルの構成について
構成としては「test.py」というPythonファイルを作り、「test.php」で実行させ表示するといった感じです。
test.py
print("Hello World")
test.php
<?php
$command="python /フルパス/test.py ";
exec($command,$output);
print "$output[0]";
?>
これでサーバーにファイルをアップしてテストしてみました。
出力結果1
成功です。表示されました。嬉しい。
プリントする文字を日本語に変えてテストしてみます
「test.py」を日本語に書き換えます。
test.py
print("ハローワールド")
書き換えたのでサーバーにアップロードして再テストしてみます。
出力結果2
エラーになりました( ; ; )
このエラーの「Undefined offset」の意味を調べると、空の配列に対して要素の取得した時のエラーということでした。
調べたところ、Pythonは普通に日本語を表示できないそうでした。
いろんなサイトに対処法があったので「test.php」に次の命令文を加えてみました。文字コードを変換するそうです。
test.php
<?php
$command="export LANG=ja_JP.UTF-8; python /フルパス/test.py ";
exec($command,$output);
print "$output[0]";
?>
それでは期待してアップロードして再テスト・・・
出力結果3
・・・エラーです
何が原因なのかわからないまま1時間ネットで調べた結果ついに解決方法発見!
ファイルを同じ文字コードにするとかもあったのですが、それもダメでした。検索ワードをうまく思いつかなく、彷徨うこと約1時間ついに解決方法が判明しました。
# coding=utf8
「test.py」の先頭にこのワードを書き込むだけです。
test.py
# coding=utf8
print("ハローワールド")
このように記述するだけです。これを記述し、サーバーにアップロード。そして再読み込みしてみた結果・・・
出力結果4
ついにただの「ハローワールド」という文字列を表示することができました!
まとめ
たったこれだけのことで約1時間も費やしてしまいました。
これから先が思いやられますね。果たして思い描くものを作ることができるのか?それとも挫折してしまうのか?
今は出来ることを思って少しずつスキルアップしていきたいなと考えてます。
私が馬鹿すぎるので、今回の問題で躓いている人がいるかどうかはわかりません。
もし同じように困っている人がいたら是非参考にしてください。
そして一緒にスキルアップしていきましょう!
おっさんの私は、みんなと同じ歩幅で行けないと思いますがw
コメント