-1

这是我在 PHP 中通过 exec 命令运行的转义 shell 命令:

C:^\Program Files^\pngquant^\pngquant.EXE \"--force\" \"--ext=.png\" \"--\" \"F:\laragon\www\demo\images\uploads\43d67cba7a951378485882e5b515c825943f7d0a.png\"

我得到返回码 1(即错误)。另一方面,如果我 pngquant "--force" "--ext=.png" "--" "F:\laragon\www\demo\images\uploads\43d67cba7a951378485882e5b515c825943f7d0a.png"直接在 shell 中运行,它工作正常。

我转义命令和参数的方式有问题吗?

编辑 1: 这是我的 PHP exec 命令:

escapeshellcmd($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args))

C:\Program Files\pngquant\pngquant.EXE$this- > cmdprint_r($args)在哪里?

Array(    
    [0] => "--force",
    [1] => "--ext=.png",
    [2] => "--",
    [3] => "F:\laragon\www\demo\images\uploads\d3a2966596a94343b5a732368dcb79394a8d4d69.png"
)
4

1 回答 1

0

这样做escapeshellarg($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args))清除了错误并且图像也被压缩了。escapeshellcmd把控制字符(^)放在前面很奇怪\

于 2015-12-19T08:51:10.880 回答