phpの値をPythonに渡して計算し再びphpに渡しました

Python

「phpの値をサーバーにあるPythonに送り,Pythonで計算した結果をphpに戻す方法」を紹介します.

今回は,phpが”Hello”という値を持っているとき,Pythonに渡すことで”world”を追加して”Hello world”にし,phpに戻すということをやってみます.

ちなみに,入力フォームの値をphpに渡す方法は以下の記事で解説しています.

記事:WordPressの入力フォームの値をphpに渡しました

準備

サーバーにPythonをインストール

サーバーがPythonファイルを実行できるように,Pythonをインストールしておく必要があります.

すでにインストールされている場合もあります.サーバーのターミナルで

python

と入力して

>>>

みたいな感じになればインストールされてます.

筆者の場合はmixhostサーバーを使っており,mixhostサーバーにPythonをインストールする方法は以下の記事で解説しています.

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で受け取る」ことができます.

コメント

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