PHPから、pythonを呼び出した時、返値を取得できない。

この記事は約3分で読めます。

php から、execコマンドを使って、pythonを実行し、pythonの実行結果を、phpで取得したい。
しかし、pythonの結果が返ってこない!

phpからexecコマンド

phpから、外部実行ファイルを呼び出す場合、

と実行をすると、「$ret_array」の配列に、「/tmp/」以下のファイルが格納されます。

phpから、pythonを実行すると・・・

と指定すると、同じように、pythonの結果が、「$ret_array」に入るはずです。

しかし、入らない!(涙)

調べると、python から、標準出力した、「日本語」を取得できない!

試行錯誤:pythonの中で、utf-8で設定

と記述すると、うまくいくという記述があったが・・・

結果、うまくいかいない。

ターミナルウィンドウでは、上記の、utf-8の設定をしなくても、日本語が表示される。

しかしながら、PHPから、pythonを呼ぶ、CGIではうまくいかない。

の記述は、python 実行のCGIでは関係ないようである・・・

結論:exec実行時に、LANGの設定を

teratailに解決策があった・・・

と、python実行前に、LANGの環境変数を指定しなければいけないようである。
これで、日本語が取得できました!

参考URL
teratail:PHPのshell_execでpythonを実行した時に、日本語が返ってこない

検証:nginx実行時の環境変数に・・・

nginx実行時のユーザの環境変数を設定すればいいのかと、
nginxのCGI実行ユーザの、.bash_profile
にて、

と記述して、試してみます。

として、nginx実行ユーザになり・・・

(「-」をつけると、そのユーザの環境変数を読み込んでくれる)

とチェックすると、きちんと、UTF-8になっており、
「これで、python から、日本語が取得できるのか」
と思っていましたが・・・
実際に、CGIを実行しても、うまく表示されない(涙)

本番稼働のサーバーでは、セキュリティ対応として、nginx実行ユーザは、ログイン出来ないようにしていますので、この結果が、うまくいっても、.bash_profileに記述して、解決をすることはしないでしょう・・・

【世界で5万人が受講】実践 Python データサイエンス・オンライン講座

タイトルとURLをコピーしました