PHP传递输入字符串,其中包含空格到python文件

时间:2017-07-15 00:23:06

标签: php python

我正在通过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。它在数据库中的错误列中添加了错误的条目

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."'";