我正在通过HTML表单获取字符串并使用以下方法将它们存储在PHP varibles中:
$var1=$_GET['name']
现在我使用
将这些字符串传递给python脚本shell_exec("python_file.py $var1")
假设,PHP中收到的字符串类似于hello world
。当变量传递给python文件时。 Python认为它是两个不同的参数,如:
##python code
arg=sys.argv
print arg[0] -> python_file.py
print arg[1] -> 'hello'
print arg[2] -> 'world'
这是一个解决方法?
我试着将刺痛传递给其他引号。但它没有帮助。
我没有在python代码中添加任何split()
函数。
编辑: 该变量是数据库中的条目。 python脚本打开数据库,变量定义相应的更改。因此,如果python文件由于空格而将一个变量读为2。它在数据库中的错误列中添加了错误的条目
答案 0 :(得分:2)
通常你可能想要使用引号:
shell_exec('python_file.py "'.$var1.'"')
- 最后一句是简单的引用
你也可以使用escapeshellarg()来充分准备shell的参数,做我说的,甚至更多,以便甚至引号在参数中正确传递。
这是从用户输入传递参数的推荐解决方案,可以避免escape-shell vulnerabilities等灾难。
我尝试了什么:
test.py:
import sys
print(sys.argv)
exec.php:
<?php $arg = "hello world";
print(shell_exec('python3 test.py '.escapeshellarg($arg))); ?>
在我的shell中:
$ php5 exec.php
['test.py','hello world']
答案 1 :(得分:2)
我找到了一种解决空间问题的方法。我在PHP中使用了字符串连接。 如果将参数括在引号内,Python不会基于空格拆分参数。
这正是我所做的:
$var=$_GET["var"];
$var="'".$var."'";