「phpの値をサーバーにあるPythonに送り,Pythonで計算した結果をphpに戻す方法」を紹介します.
今回は,phpが”Hello”という値を持っているとき,Pythonに渡すことで”world”を追加して”Hello world”にし,phpに戻すということをやってみます.
ちなみに,入力フォームの値をphpに渡す方法は以下の記事で解説しています.
記事:WordPressの入力フォームの値をphpに渡しました
準備
サーバーにPythonをインストール
サーバーがPythonファイルを実行できるように,Pythonをインストールしておく必要があります.
すでにインストールされている場合もあります.サーバーのターミナルで
python
と入力して
>>>
みたいな感じになればインストールされてます.
筆者の場合はmixhostサーバーを使っており,mixhostサーバーにPythonをインストールする方法は以下の記事で解説しています.
Pythonファイルをサーバーに保存
サーバーのファイルが置いてあるところにアクセスし,適当な場所に以下のPythonファイルを保存します.
world.py
import sys
for line in sys.stdin:
a = str(line)
a += " world"
print(a)
私の場合は,サーバーの一番上のディレクトリにあるpublic_htmlというファイルの下にpython_dataというファイルを作成し,その中にこのファイルを保存しました.
print()がphpで受け取るときの値になります.
phpからPythonに値を渡して出力を受け取る
phpからサーバーにあるPythonファイルに渡して,Pythonの出力を受け取るには,phpファイルを以下のように書きます.
<?php
$a = "Hello";
$command = "echo $a | ~/.pyenv/versions/anaconda3-5.3.1/bin/python ~/public_html/python_data/world.py";
exec($command, $output, $state);
?>
~/.pyenv/versions/anaconda3-5.3.1/bin/pythonの部分は,通常pythonを実行するときの「python ファイル名.py」のpythonに相当します.
このように,サーバー上のpython(自体)がある場所を明記する必要があるみたいです.
~/public_html/python_data/world.pyの部分は,実行するPythonファイルworld.pyの場所が書いてあります.
これで,exec($command, $o, $state)によって値$aが渡されると同時にコマンドが実行され,$outputとしてPythonからの値を受け取ることができます.
phpの終わりに,
print($output[0])
もしくは
foreach ($output as $o) {
echo $o . '<br>';
}
などを追加すると,”Hello world”が表示されると思います.
pythonから出力の仕方について
例えば,Pythonの出力を
print(1)
print(2)
print(3)
print(4)
と書くと,
php側ではoutput[0]に1が,output[1]に2が,output[2]に3が,output[3]に4が入ります.
入力フォームから送信された値をphpに渡す
以下のの記事で,「入力フォームから送信された値をphpで受け取る方法」について解説しています.
これ加えて,今回紹介したことを使うことで,「入力フォームから送信された値をphpに送り,phpからPythonに渡し,Pythonで計算した結果をphpで受け取る」ことができます.
コメント