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

如何向Python中执行的PHP代码传递参数?

解决Python向执行的PHP代码传递参数的问题

方法一:修正字符串拼接(适用于简单参数场景)

原代码的问题在于字符串拼接时错误使用了{val},Python中直接用变量名拼接即可。同时要注意如果参数包含单引号,需要先转义,避免破坏PHP的字符串语法。

修改后的代码:

import subprocess

def php(code):
    p = subprocess.Popen(["php","-r", code],
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out = p.communicate() #returns a tuple (stdoutdata, stderrdata)
    if out[1] != b'': raise Exception(out[1].decode('UTF-8'))
    return out[0].decode('UTF-8')

val = str(1234)
# 转义单引号,避免PHP语法错误
escaped_val = val.replace("'", "\\'")
code = """ \
function my_encoder($in){
    $out = base_convert($in,16,36);
    return $out;
}

print(my_encoder('"""+escaped_val+"""'));
"""
print(php(code))

方法二:通过命令行参数传递(更安全,推荐)

直接拼接字符串存在注入风险,尤其是参数包含特殊字符时。更安全的方式是通过命令行参数传递,PHP可以通过$argv获取这些参数。

修改后的代码:

import subprocess

def php_with_args(code, args=None):
    cmd = ["php", "-r", code]
    if args:
        cmd.extend(args)
    p = subprocess.Popen(cmd,
                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    out = p.communicate()
    if out[1] != b'': raise Exception(out[1].decode('UTF-8'))
    return out[0].decode('UTF-8')

val = str(1234)
# PHP代码中通过$argv[1]获取第一个命令行参数
code = """ \
function my_encoder($in){
    $out = base_convert($in,16,36);
    return $out;
}

// $argv[0]是php本身,$argv[1]是传入的第一个参数
print(my_encoder($argv[1]));
"""
print(php_with_args(code, args=[val]))

这种方式不需要处理字符串转义,也避免了潜在的代码注入问题,适合大多数场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:07:33