iT邦幫忙

1

<解決>php連接python??

  • 分享至 

  • xImage

這種方式原本是用在html檔上,後來發現改.php也能執行,但是發現頁面上的php語法直接顯露出來,想問是不是代表不能使用這種方式..?(若不能,想問還有甚麼方式@@?)

我想達成的是將在php網頁的表單input值傳給python,然後python經過換算後再傳值回php頁面(以上方法已用flask達成,但我主要的頁面是php頁面)

第一次嘗試連接,若有蠢問題先在這抱歉@@

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
japhenchen
iT邦超人 1 級 ‧ 2021-09-28 07:52:38
最佳解答

php

<?php
    $v = 5; //半徑
    $respPy = json_decode(exec("./python/xyz.py -v $v"));     
    echo %respPy["test"];
?>

python

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("-v", help="ψ半徑", default="")

resp = {"test":3.14159*pow(float(v),2)} #圓面積
return json.dumps(resp)    

看更多先前的回應...收起先前的回應...
0805cyc iT邦新手 4 級 ‧ 2021-09-28 17:46:14 檢舉

謝謝大師回覆,但是出現的錯誤是syntax error, unexpected '%'
可以請教是要加上甚麼套件嗎??

早上直接在這裡打了這篇,沒時間測,剛剛發現一堆錯

改一下

from argparse import ArgumentParser
import json

parser = ArgumentParser()
parser.add_argument("-v",nargs=1, help="ψ半徑",type=float, default=0.0)
arg = parser.parse_args()

resp = {"test":3.14159*pow(arg.v,2)} #圓面積
print( json.dumps(resp)    )

用print回傳值才對,一傻真的一堆錯

0805cyc iT邦新手 4 級 ‧ 2021-09-29 01:28:53 檢舉

您好,我單獨執行py檔可以出現{"test": 0.0}
而在php裡照著您上面的做法

<?php
    $v = 5; //半徑
    $respPy = json_decode(exec("./circle.py -v $v"));     
    echo %respPy["test"];
	?>

還是有出現錯誤訊息
https://ithelp.ithome.com.tw/upload/images/20210929/20133915uNNYWrjB28.jpg

標投已加上

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> </script>

你是要在php內呼叫python?

0805cyc iT邦新手 4 級 ‧ 2021-09-29 13:55:11 檢舉

是的

那就用exec跟print這兩個方式傳遞,至於多參數及多回傳值,我會用json來處理,回傳值的數量才有辦法又多且廣域,才不會掉進只有單一回傳值的麻煩

0805cyc iT邦新手 4 級 ‧ 2021-09-30 23:35:49 檢舉

好,了解了!謝謝大師建議

dscwferp iT邦高手 1 級 ‧ 2021-10-01 09:33:24 檢舉

json好!

1
miku3920
iT邦新手 2 級 ‧ 2021-09-27 23:31:37

render_template() 並不會執行 php 程式

你必須先執行 php 程式後,再用 python 處理返回值

from flask import Flask, render_template, request, url_for, redirect
import numpy as np
import subprocess as sp

app = Flask(__name__)

@app.route('/')
def index():
    out = sp.run(["php", "test.php"], stdout=sp.PIPE)
    return out.stdout

如果你沒辦法在終端機運行 PHP 的話,可以參考我的這篇文章:

Day06 - 安裝 PHP 與設定環境變數

0805cyc iT邦新手 4 級 ‧ 2021-09-28 00:24:24 檢舉

您好~感謝您的回覆
但是執行後顯示錯誤是"系統找不到指定的檔案。"
我是將app.py跟test.php放在同一層
但是無法找到,請問這要如何解決??

我原本是將render_template('./abc.php')的路徑直接貼過去
但是也找不到(abc.php在templates資料夾下)

(謝謝您提供的連結,但我的php是用Xampp執行的)

miku3920 iT邦新手 2 級 ‧ 2021-09-28 01:53:04 檢舉

工作區路徑的問題吧,改成絕對路徑就沒問題了
import os
path = os.path.dirname(os.path.abspath(__file__))
'./abc.php' 改成 path + '/abc.php'

我要發表回答

立即登入回答