Imagick`convert`仅适用于终端,而不适用于PHP

时间:2012-04-07 18:34:30

标签: php osx-lion mamp imagick

实际情况

MacBook Pro 2008年初

OSX Lion 10.7.3

MAMP 2.0.5

ImageMagick-x86_64-apple-darwin11.3.0.tar.gz - 从终端安装并完美地工作

gplgs-8.71.dmg - 从Terminal和Imagick安装并完美运行

什么工作?

使用终端“转换”命令完美运行!我可以毫无问题地在JPG中转换PDF ...

什么是问题?

如果我尝试在PHP中使用Imagick(最简单的)演示命令:

“convert logo:logo.gif”

什么都没发生!我一步一步地跟着this guide,我知道我要修改“envvars”文件并且我做了但是......它不是解决方案!

我试图读取shell错误但在PHP中没有返回任何内容...我尝试了所有类型的命令:

define('MAGICK_PATH', '/Applications/MAMP/bin/ImageMagick/ImageMagick-6.7.5/bin/');

echo exec(MAGICK_PATH.'convert logo: logo.gif', $output);
var_dump($output);
=> array(0) { }


$output = shell_exec(MAGICK_PATH."convert logo: logo.gif");
echo "<pre>$output</pre>";
=> *nothing*


$last_line = system(MAGICK_PATH.'convert logo: logo.gif', $retval);
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
=> Last line of the output:
=> Return value: 5


$last_line = system(MAGICK_PATH.'convert -version', $retval);
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
=> Last line of the output:
=> Return value: 5


$last_line = system(MAGICK_PATH."convert -colorspace RGB -interlace none -density 104.6x104.6 -quality 100 -bordercolor white doc.pdf[0] doc.png", $retval);
echo '
</pre>
<hr />Last line of the output: ' . $last_line . '
<hr />Return value: ' . $retval;
=> Last line of the output:
=> Return value: 5

我想也许程序没有被发现但是...我可以在任务管理器中看到它并且CPU工作了几秒钟,Imagick正在做一些事情但最终我没有任何输出! ! &GT; _&LT;我发现了很多关于这方面的话题,但我还没有找到一个有效的解决方案...

2 个答案:

答案 0 :(得分:2)

尝试包装如下命令:

exec($cmd." 2>&1", $out, $ret);
if ($ret){
    echo "There was a problem!\n";
    print_r($out);
}else{
    echo "Everything went better than expected!\n";
}

exec()可让您捕获所有输出并获取退出代码。添加2>&1可确保将STDERR重定向到STDOUT,以便您可以看到任何错误消息。

答案 1 :(得分:0)

另外,作为我之前评论的附录:尝试提供输入和输出文件名的完全限定路径。命令在PHP中启动,具有默认的当前工作目录 - 这可能与脚本实际包含在的目录中不同。

如果要查看系统命令的默认目录,请尝试:

exec('pwd');

如果您的任何路径中有空格(或者在任何阶段它们包含用户输入),您应该通过escapeshellarg()运行参数以确保它们能够正常工作(并且它们可以安全运行)。 / p>