我正在编写可在 *nix 系统下工作的 php 代码。我需要在 php 代码中调用一个带有 5 个参数的 python 脚本。一些参数是用户输入的,因此可能有任何字符。我无法弄清楚如何将参数传递给脚本。我将如何分开论点?例如,在这个问题中,您以行尾字符分隔,但在我的论点中,可以是用户编写的任何内容。如何传递这样的论点?有任何想法吗?
编辑:我有想法在传递参数之前将转义字符放在每个引号符号 ' 或 " 中,另一方面我将摆脱转义字符。json 编码可以吗?
你想要的功能是escapeshellcmd()
:
$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", ...);
在另一个线程中,程序没有接受任何参数,换行符被用来分隔标准输入上的项目。
您基本上是在命令提示符下执行命令;您可能想先熟悉命令提示符。
参数用空格分隔。因此,如果您的输入中有空格,则必须在这些输入周围加上引号(我建议使用单引号;使用双引号会导致环境变量被扩展等等)。
因此,基本上,您必须转义输入中的所有单引号、换行符和回车,用单引号将它们括起来并将它们附加到命令中。
警告:安全方面,这整个事情是非常有问题的。如果您的逃生机制不是防弹的,那么任何人都可以在您的服务器上执行命令。
另一个答案是将输入写入临时文件,并在 python 脚本中从该文件中读取。如果您可以控制此脚本,我强烈建议您这样做。