【发布时间】:2015-12-18 15:58:02
【问题描述】:
这是我在 PHP 中通过 exec 命令运行的转义 shell 命令:
C:^\Program Files^\pngquant^\pngquant.EXE \"--force\" \"--ext=.png\" \"--\" \"F:\laragon\www\demo\images\uploads\43d67cba7a951378485882e5b515c825943f7d0a.png\"
我得到返回码 1(即错误)。另一方面,如果我在 shell 中直接运行pngquant "--force" "--ext=.png" "--" "F:\laragon\www\demo\images\uploads\43d67cba7a951378485882e5b515c825943f7d0a.png",它工作正常。
我转义命令和参数的方式有问题吗?
编辑 1: 这是我的 PHP 执行命令:
escapeshellcmd($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args))
其中 $this->cmd 是 C:\Program Files\pngquant\pngquant.EXE 和 print_r($args) 是
Array(
[0] => "--force",
[1] => "--ext=.png",
[2] => "--",
[3] => "F:\laragon\www\demo\images\uploads\d3a2966596a94343b5a732368dcb79394a8d4d69.png"
)
【问题讨论】:
-
您需要向我们展示您正在执行的实际命令,例如
shell_exec(...),否则很难看出哪里出了问题。 -
escapeshellcmd($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args))
-
...现在您需要向我们展示
$this->cmd和$arg的值。你知道这是怎么回事吗?请edit您的问题而不是使用cmets。 -
您没有向我们提供足够的细节来重现您的问题。请查看minimal reproducible example,然后编辑您的问题以帮助我们诊断您的问题。
-
嘿@TomFenech,我刚刚提供了值。请帮帮我。