【PHP】execでpythonのスクリプトを実行するのに手こずった!
PHPのexecのコマンドを使ってpythonのスクリプトを実行しようとしたら、かなり手こずった・・。
pythonの環境は、下記の記事みたいに共用のディレクトリ「/usr/local/pyenv」の下にpythonをインストールしている。サーバーはAWS。
【pyenv】当該サーバ内の全ユーザに指定したPythonバージョンを適用させる - SEワンタンの独学備忘録
普通にexecでスクリプトを実行すると、pyenvの環境変数の関係でエラー出まくってなかなかコードが実行できない。
簡単なコードなら実行できるかもしれないけど、いろいろライブラリをインポートしてるとどこかで突っかかる。
それで、結論から言うと以下のようにsudoを付けてコマンドを実行することにした。
(rootユーザーにはpuenvで必要な環境を設定している)
セキュリティ上危ないかもしれないけど、管理画面からしか実行しない処理なのでこれでよしとした。
<?php $command = "sudo /usr/local/pyenv/shims/python /var/www/hogehoge/test.py 2>&1;"; exec($command,$output); print_r($output)
visudoの設定には、下記のようにapacheでpythonのコマンドを実行できるようにした。
## Allow root to run any commands anywhere root ALL=(ALL) ALL apache ALL=(ALL) NOPASSWD:/usr/local/pyenv/shims/python
なんだか無理やりなやり方だけど、うまくexecでpython実行する方法ないんだろうか・・。