如何将PHP变量传递至不同服务器上的Python脚本?
PHP向远程Python脚本传递变量的实现方法
本地同目录下的实现方式
PHP端代码
<?php $var1 = "1"; $var2 = "2"; $var3 = "3"; // 传递变量给本地Python脚本 exec("python /path/to/python/script.py $var1 $var2 $var3"); ?>
Python端读取变量代码
import sys print(sys.argv[1]) # 第一个参数 print(sys.argv[2]) # 第二个参数 print(sys.argv[3]) # 第三个参数
远程Python脚本的变量传递方案
当Python脚本部署在远程服务器时,无法直接通过exec执行本地命令调用远程脚本,需通过HTTP请求传递变量,以下是两种常见实现方式:
方式一:GET请求传递参数
PHP端发送GET请求
通过curl或file_get_contents构造带参数的远程URL:
<?php $var1 = "1"; $var2 = "2"; $var3 = "3"; // 构造编码后的参数URL $remoteUrl = "https://example.com/script.py?var1=" . urlencode($var1) . "&var2=" . urlencode($var2) . "&var3=" . urlencode($var3); // 方法1:使用curl发送请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remoteUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // 方法2:使用file_get_contents(需开启PHP的allow_url_fopen配置) // $response = file_get_contents($remoteUrl); // 可选:处理并输出远程脚本的返回结果 echo $response; ?>
Python端接收GET参数
- 轻量场景用CGI方式:
import cgi # 获取GET请求参数 form = cgi.FieldStorage() var1 = form.getvalue('var1') var2 = form.getvalue('var2') var3 = form.getvalue('var3') # 输出HTTP响应头及结果 print("Content-type: text/html\n") print(f"Received params: {var1}, {var2}, {var3}")
- Web场景用Flask框架:
from flask import Flask, request app = Flask(__name__) @app.route('/script.py') def receive_params(): var1 = request.args.get('var1') var2 = request.args.get('var2') var3 = request.args.get('var3') return f"Received params: {var1}, {var2}, {var3}" if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
方式二:POST请求传递参数(适合敏感数据)
PHP端发送POST请求
<?php $var1 = "1"; $var2 = "2"; $var3 = "3"; $remoteUrl = "https://example.com/script.py"; // 构造POST参数 $postData = http_build_query([ 'var1' => $var1, 'var2' => $var2, 'var3' => $var3 ]); // 用curl发送POST请求 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $remoteUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); echo $response; ?>
Python端接收POST参数
- CGI方式:
import cgi form = cgi.FieldStorage() var1 = form.getvalue('var1') var2 = form.getvalue('var2') var3 = form.getvalue('var3') print("Content-type: text/html\n") print(f"Received params: {var1}, {var2}, {var3}")
- Flask框架方式:
from flask import Flask, request app = Flask(__name__) @app.route('/script.py', methods=['POST']) def receive_params(): var1 = request.form.get('var1') var2 = request.form.get('var2') var3 = request.form.get('var3') return f"Received params: {var1}, {var2}, {var3}" if __name__ == '__main__': app.run(host='0.0.0.0', port=80)
内容的提问来源于stack exchange,提问作者Kyles
相关产品推荐
相关产品推荐

