首页 文章

php,proc_open如何传递多个参数

提问于
浏览
2

我正在编写PHP代码,它可以在* nix系统下运行 . 我需要在PHP代码中调用带有5个参数的python脚本 . 一些参数是用户输入,因此可能有任何字符 . 我无法弄清楚如何将参数传递给脚本 . 我如何分开论点?例如,在this question中,您按行尾字符分隔,但在我的参数中可以是用户编写的任何内容 . 如何传递这样的论点?有任何想法吗?

编辑:我有想法在传递参数之前在每个引号符号'或'中放置转义字符,另一方面我将摆脱转义符 . 请问json编码吗?

2 回答

  • 1

    你基本上是在命令提示符下执行一个命令;您可能希望首先熟悉命令提示符 .

    参数由空格分隔 . 因此,如果您的输入中包含空格,则必须在这些输入周围加上引号(我建议单引号;使用双引号将导致环境变量被扩展,等等) .

    所以基本上,你必须在输入中转义所有单引号,换行符和回车符,用单引号括起它们并将它们附加到命令中 .

    Warning: 安全方面,整件事情都很成问题 . 如果您的逃生机制不是防弹,任何人都可以在您的服务器上执行命令 .

    另一个答案是将输入写入临时文件,并在python脚本中从此文件中读取 . 如果您可以控制此脚本,我强烈建议您这样做 .

  • 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", ...);
    

    在另一个线程中,程序没有采用任何参数,新行被用于分隔标准输入的项目 .

相关问题