You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XAMPP本地调用Python脚本Base64解码返回NULL问题排查

问题排查与解决方案

1. 修复PHP变量解析问题

你的PHP代码中shell_exec使用了单引号,导致$param变量不会被解析,Python脚本实际收到的参数是字符串$param,而非编码后的酒店数据。修改方式:

  • 将单引号改为双引号:
$result = shell_exec("python C:\\xampp\\htdocs\\bounce.py $param");
  • 或者用字符串拼接:
$result = shell_exec('python C:\\xampp\\htdocs\\bounce.py ' . $param);

注意:Windows下路径分隔符要用双反斜杠\\,或者直接用正斜杠/避免转义问题。

2. 确保Python路径正确且可执行

  • Windows下的shebang(#! /Users/<user>/...)无效,可直接删除该行。
  • 调用Python时使用完整路径(避免PATH环境变量问题),比如你的Python安装路径是C:\Users\<user>\AppData\Local\Programs\Python\Python37\python.exe,则修改PHP代码:
$result = shell_exec('C:\\Users\\<user>\\AppData\\Local\\Programs\\Python\\Python37\\python.exe C:\\xampp\\htdocs\\bounce.py ' . $param);
  • 检查Apache运行用户是否有Python程序和bounce.py文件的执行/读取权限,必要时将文件权限设置为Everyone可读可执行。

3. 给Python脚本添加错误处理

原脚本未处理异常,若参数解析失败会直接崩溃,无任何输出,导致PHP拿到空值后json_decode返回null。修改Python脚本:

import sys
import json
import base64

try:
    # 检查是否传入参数
    if len(sys.argv) < 2:
        raise ValueError("未传入参数")
    content = json.loads(base64.b64decode(sys.argv[1]))
    print(json.dumps(content))
except Exception as e:
    # 输出错误信息,方便PHP调试
    print(json.dumps({"error": str(e)}))
    sys.exit(1)

4. 调试PHP执行结果

改用exec函数获取执行状态码和输出,方便排查问题:

$hotel = array("Name"=>$_POST["NAME"],..);
$param = escapeshellcmd(base64_encode(json_encode($hotel)));
$output = [];
$returnCode = 0;
exec('C:\\Users\\<user>\\AppData\\Local\\Programs\\Python\\Python37\\python.exe C:\\xampp\\htdocs\\bounce.py ' . $param, $output, $returnCode);
$result = implode("\n", $output);
$obj = json_decode($result);

// 调试输出
if ($obj === null) {
    echo "执行失败,返回码:{$returnCode},输出:{$result}";
}

5. 检查POST参数有效性

确保$_POST["NAME"]存在且有值,可在PHP开头添加调试代码:

var_dump($_POST); // 查看所有POST参数

内容的提问来源于stack exchange,提问作者Mauro Ghiglia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:40:33