PHP escapeshellcmd() 使用“>”字符破坏 ImageMagick 转换命令


PHP escapeshellcmd() breaks ImageMagick convert command using '>' character

我在 Ubuntu 12 服务器上使用 ImageMagick 6.6.9。我遇到的问题是我的 ImageMagick 转换命令,我使用 shell_exec 函数在 PHP 中运行(但也尝试过exec),其中包含 PHP escapeshellcmd 函数转义的字符

,并带有'

这是我的PHP代码:

$result = exec(escapeshellcmd($convertString));

这是我的示例转换命令:

/usr/bin/convert "/Users/rich/Sites/example/1234.JPG" -quality 85 -auto-orient -thumbnail "640x88>" "/Users/rich/Sites/example/1234-thumb.jpg"

最后,这是通过escapeshellcmd运行后的转换命令:

/usr/bin/convert "/Users/rich/Sites/example/1234.JPG" -quality 85 -auto-orient -thumbnail "640x88'>" "/Users/rich/Sites/example/1234-thumb.jpg"

问题是转义的'>字符会导致 ImageMagick 错误:

转换:选项 -thumbnail' 的参数无效:640x88>@ error/convert.c/ConvertImageCommand/2770。

有谁知道我可以解决这个问题的方法?我已经浏览了 ImageMagick 文档,虽然他们承认存在问题,但他们似乎没有提供任何其他方法来调整图像大小而不使用特殊的 unix 字符:

唯一的收缩标志('>'标志)是 UNIX Shell 和 Window 批处理脚本中的特殊字符,您需要转义该字符(在 shell 中使用反斜杠">",在 Windows 批处理中使用反斜杠"^>")。它在HTML网页中也很特殊,因此PHP脚本也可能需要一些特殊的处理。

提前非常感谢。

事实证明,我在-thumbnail "640x88'>"大小选项周围有额外的"(引号)。作为参考,正确的转义转换命令应该是:

/usr/bin/convert "/Users/rich/Sites/example/1234.JPG" -quality 85 -auto-orient -thumbnail 640x88'> "/Users/rich/Sites/example/1234-thumb.jpg"