将多个 Python 变量传递给 PHP

Pass multiple Python variables to PHP

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,它 return 是在 Python 脚本中执行的值。如果用户输入 url:http://example.com/file.png 它将成功 return 字符串 file.png

一切都有效,但我意识到我在限制自己,因为 shell_exec 命令只会粘贴从 [=] 编辑的字符串 return 50=] 脚本。如果我想有多个变量,我需要做什么 returned?

Python 有问题

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

所以 HTML 页面现在应该 return file.pngpass this text too!

我是否需要在 python 中 return 数组或 json 然后在 PHP 中提取 array/json?

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

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

在这种情况下,您的 Python 脚本必须 return 格式化响应,PHP 脚本才能正确解析并确定变量及其值
例如,您的 python 代码必须 return 类似的东西:

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 />';
}