PHP escapeshellcmd()使用'>'打破ImageMagick转换命令字符

时间:2013-01-23 10:25:56

标签: php escaping imagemagick exec imagemagick-convert

我在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错误:

  

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

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

  

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

非常感谢提前。

1 个答案:

答案 0 :(得分:0)

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

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