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