Xサーバーにて、PHPからPythonファイルを呼び出す方法をまとめます。実装したのはXサーバーですが、他のレンタルサーバーでも同様にできるはずです。
Webアプリ作成のための備忘録です。
結論から。
1 2 3 4 5 |
<?php $fullPath = "/usr/bin/python3.6 ./cgi-bin/test.py abcd"; exec( $fullPath, $output); var_dump($output[0]); ?> |
1 2 3 4 |
import sys if __name__=='__main__': print ('parameter1 is ' + sys.argv[1]) |
cgi-binフォルダ(test.phpと同階層) > test.pyを入れる
サーバー内public_htmlフォルダ内に入れた場合は、http://ドメイン名/test.phpにアクセス。サブドメインの場合はhttp://サブドメイン名.ドメイン名/test.php。
コード解説(test.php)
1 2 |
//$fullPath = "Pythonコマンドパス 呼び出したいPythonファイル 引数"; $fullPath = "/usr/bin/python3.6 ./cgi-bin/test.py abcd"; |
.pyファイルをPythonで動かすためのコマンド。
Pythonコマンドパスの部分は、各レンタルサーバーの公式HPにて確認できる。自分の利用しているレンタルサーバーのコマンドパスを入力してください。
Xサーバーのコマンドパス一覧
1 2 |
//exec(string型コマンド, 返り値); exec( $fullPath, $output); |
指定されたコマンドを実行する。コマンドの書き方はコンソールに書き込むのと同じ。注意点として、コンソール内でPythonを実行する際は、「Python test.py」等で動かせるが、レンタルサーバー内でPythonを動かすためには、「Python」の部分にフルパスを指定する。
exec()の詳しい解説
1 |
var_dump($output[0]); |
変数に関する情報をダンプ(表示)する。
var_dump()の詳しい解説
動かすまでにしたこと
とりあえず記事上部のコードをコピペして動かしてみてください。ダメだったら以下のポイント確認すべし。
Pythonファイルのパーミッション(アクセス権限)を705か755に設定
アクセス権限がないとPythonファイルを動かせない場合があるみたい。
FTPクライアントソフト等を使用し、サーバー内にてPythonファイルの「属性」を変更する。
※FFFTPの場合
1. Pythonファイルを右クリック
2. 属性の変更
3. 属性 705 or 755になるように設定。
test.phpがある階層に「cgi-bin」フォルダを作成しtest.pyを入れる
1 2 3 |
階層構造 test.php cgi-bin > test.py |
コマンドパスをフルパスで書く
コンソール上では「python ファイル.py」のようにかくところを、「python」部をフルパスで書く。コマンドパスは各レンタルサーバーHPを確認すればあるはず。
参考までに、有名どころのサーバーのコマンドパス。調べてみたらほぼ
/usr/local/bin/python |
こう書けばいいみたい。
https://www.xserver.ne.jp/manual/man_program_soft.php
・ロリポップコマンドパス
https://lolipop.jp/manual/hp/cgi/
PHPからPythonを呼び出す際に学んだこと【メモ】
・今回使ったのは、PHPから.pyファイルを呼び出して使う方法。このほかに拡張子を.py → .cgi に変更し、Pythonファイル自身を直接実行する方法もある。ただし、.cgiファイルは、重いライブラリ(opencv等)を読み込むと、500エラーが生じる可能性がある。今回の方法の方がこのエラーを回避しやすいっぽい。
・.cgiファイルを実行する際は、コード先頭に「!/user/local/bin/python」のように宣言する必要がある。記事内で解説しているコマンドのフルパスと似ているが違うから注意。.cgiファイルはPerlで書く必要があるからとのこと。
・PHPからの呼び出しする.pyファイルに「!/user/local/bin/python3.6」のように書くのは間違い。ここで躓いた。違いを理解すれば簡単。
参考サイト(シンプルだけど全部つまってる。ありがとうございます。)
PHPからPythonを実行する方法 – ハックノート
PHPからPythonを実行する方法 | クロジカphpファイル ``` ``` pythonファイル ``` # file name: call_from_p
これからWebアプリをつくるって方は、ロリポップが安いのでおすすめです。趣味向けのライトプランはドメイン料含め月額300円ほど。
以前使用していましたがFTPソフト等ストレスなく使えます。
お役に立てたら幸いです。最後まで読んでいただきありがとうございました。