【问题标题】:Is this escaped shell command wrong这个转义的 shell 命令是否错误
【发布时间】: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.EXEprint_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,我刚刚提供了值。请帮帮我。

标签: php shell exec pngquant


【解决方案1】:

执行escapeshellarg($this->cmd).' '.implode(' ', array_map('escapeshellarg', $args)) 清除错误并且图像也被压缩。奇怪的是escapeshellcmd 把控制字符(^)放在\ 之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 2016-12-10
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多