将多个Python变量传递给PHP

时间:2015-01-08 20:32:58

标签: php python arrays json

HTML

这是一个接受用户输入(url)的表单:

<form method="post" action="/" accept-charset="utf-8">
    <input type="search" name="url" placeholder="Enter a url" />
    <button>Go</button>
</form>

PHP(Laravel)

该控制器将用户输入(url)的值存储到变量中,以便在python脚本中使用。

$url = Input::get('url');
$name = shell_exec('path/to/python ' . base_path() . '/test.py ' . $url);
return $name;

的Python

脚本传递用户输入的内容,并在正斜杠后显示文本并显示它。

url = sys.argv[1]
name = url.split('/')[-1]
print(name)

回到PHP,它返回Python脚本中执行的值。如果用户输入了网址:http://example.com/file.png,则会成功返回字符串file.png

关于这一切的一切都有效,但我意识到我限制自己,因为shell_exec命令只会粘贴从python脚本返回的字符串。如果我想要返回多个变量,我需要做什么?

有问题的Python

url = sys.argv[1]
name = url.split('/')[-1]
test = "pass this text too!"
# ? what goes here ?

因此HTML页面现在应该返回file.pngpass this text too!

我是否需要在python中返回数组或json,然后在PHP中提取数组/ json?

注意:我知道这些示例中的安全漏洞/注入,这些是我的实际代码的精简版本。

2 个答案:

答案 0 :(得分:2)

您可以返回一个数组,但请确保元素不包含分隔符。 像print(','.join(name, test))一样。 或者您可以像json.dumps([name, test])一样编码为json,然后在PHP中解析json。当然,第二个更好。

答案 1 :(得分:0)

在这种情况下,您的Python脚本必须返回格式化的响应,PHP脚本可以正确解析并使用其值确定变量
例如,你的python代码必须返回类似的内容:

file_name=file.png;file_extension=png;creation_date=1/1/2015;

之后在你的PHP代码中你做了必要的事情

$varValues = explode(";", $PythonResult);
foreach($varValues as $vv) {
    $temp = explode("=", $vv);
    print 'Parameter : ' . $temp[0] . ' value : ' . $temp[1] . '<br />';
}