这个转义的shell命令是不是错了
Is this escaped shell command wrong
这是我在 PHP 中通过 exec 命令 运行 转义的 shell 命令:
C:^\Program Files^\pngquant^\pngquant.EXE \"--force\" \"--ext=.png\" \"--\" \"F:\laragon\www\demo\images\uploadsd67cba7a951378485882e5b515c825943f7d0a.png\"
我得到 return 代码 1(即错误)。另一方面,如果我 运行 pngquant "--force" "--ext=.png" "--" "F:\laragon\www\demo\images\uploadsd67cba7a951378485882e5b515c825943f7d0a.png"
直接在 shell 中,它工作正常。
我转义命令和参数的方式有问题吗?
编辑 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"
)
执行 escapeshellarg($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args))
清除了错误并且图像也被压缩了。奇怪的是escapeshellcmd
把控制字符(^
)放在\
之前.
这是我在 PHP 中通过 exec 命令 运行 转义的 shell 命令:
C:^\Program Files^\pngquant^\pngquant.EXE \"--force\" \"--ext=.png\" \"--\" \"F:\laragon\www\demo\images\uploadsd67cba7a951378485882e5b515c825943f7d0a.png\"
我得到 return 代码 1(即错误)。另一方面,如果我 运行 pngquant "--force" "--ext=.png" "--" "F:\laragon\www\demo\images\uploadsd67cba7a951378485882e5b515c825943f7d0a.png"
直接在 shell 中,它工作正常。
我转义命令和参数的方式有问题吗?
编辑 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"
)
执行 escapeshellarg($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args))
清除了错误并且图像也被压缩了。奇怪的是escapeshellcmd
把控制字符(^
)放在\
之前.