php,proc_open如何传递多个参数

php,proc_open如何传递多个参数,php,python,Php,Python,我正在编写php代码,它将在*nix系统下工作。我需要在php代码中调用一个包含5个参数的python脚本。一些论点 是用户输入,因此可以有任何字符。我不知道如何将参数传递给脚本。我如何区分论点?。例如,在我的参数中,可以是用户编写的任何内容。如何传递这样的论点?有什么想法吗 编辑: 我有一个想法,在每个引号中加上转义字符“符号”或“之前” 在传递参数的另一端,我将去掉转义字符。json编码可以做到吗?您基本上是在命令提示符下执行命令;您可能需要先熟悉命令提示符 参数之间用空格分隔。因此,如果您

我正在编写php代码,它将在*nix系统下工作。我需要在php代码中调用一个包含5个参数的python脚本。一些论点 是用户输入,因此可以有任何字符。我不知道如何将参数传递给脚本。我如何区分论点?。例如,在我的参数中,可以是用户编写的任何内容。如何传递这样的论点?有什么想法吗

编辑: 我有一个想法,在每个引号中加上转义字符“符号”或“之前”
在传递参数的另一端,我将去掉转义字符。json编码可以做到吗?

您基本上是在命令提示符下执行命令;您可能需要先熟悉命令提示符

参数之间用空格分隔。因此,如果您的输入中有空格,则必须在这些输入周围加引号(我建议使用单引号;使用双引号将导致环境变量展开等)

因此,基本上,您必须转义输入中的所有单引号、换行符和回车符,用单引号将每个单引号括起来,并将它们附加到命令中

警告:就安全性而言,这整件事都是很有问题的。如果你的逃逸机制不是防弹的,任何人都可以在你的服务器上执行命令


另一种方法是将输入写入一个临时文件,并在python脚本中读取该文件。如果您可以控制该脚本,我强烈建议您这样做。

您需要的函数是
escapeshellcmd()


在另一个线程中,程序没有接受任何参数,换行符被用来分隔标准输入上的项。

为什么我需要转义空间?我可以转义所有的QOUTE并将引号放在单独的参数中,这样引号之间的所有内容都将被视为一个参数。你能举个例子说明什么输入会损害这种近似吗ch?不需要转义空格;根据Barmar的回答,你无论如何都不需要担心。实际上,
escapeshellcmd
应该只用于命令(
escapeshellcmd(/path/to/bin”);
)。对于参数转义,使用
escapeshellarg
,(
escapeShellargument(“参数”);
)。
$arg1 = escapeshellarg($input1);
$arg2 = "foo";
$arg3 = escapeshellarg($input3);
$arg4 = "bar";
$arg5 = escapeshellarg("a string containing spaces and other *special* characters");
$proc = proc_open("python_prog $arg1 $arg2 $arg3 $arg4 $arg5", ...);