奇怪的问题——PHP / ImageMagick / Ghostscript

Posted

技术标签:

【中文标题】奇怪的问题——PHP / ImageMagick / Ghostscript【英文标题】:Strange issue -- PHP / ImageMagick / Ghostscript 【发布时间】:2009-07-15 00:50:01 【问题描述】:

这个question 很接近,但没有成功。我正在尝试将 pdf 转换为 jpg(用于缩略图)。这是我正在运行的命令:

convert -quality 100 -density 200x200 /path/file.pdf /path/file.jpg

我已经正确安装了 mamp pro 1.7.2、imagemagick、ghostscript 并正常工作。此命令在 shell 中完美运行,但在 php 脚本中运行时失败。另一个转折是图像到图像的转换,外壳和脚本都可以完美地工作。这会让我相信在 apache/php 环境中存在一些与 ghostscript (gs) 相关的路径问题,尽管 gs 二进制文件与转换二进制文件位于同一目录中。另外,我根据(brybot.ca 的优秀教程——www.brybot.ca/archives/getting-imagemagick-and-more-to-work-with-mamp-on-os-x 调整了 mamp apache envars /) 所以 ImageMagick 运行良好,并且“/opt/local/bin”在我的 apache 路径变量中。

通过 shell,从 pdf 到图像的转换需要一些时间,我有一个烦人的想法,即 php 脚本在 imagemagick / ghostscript 转换完成之前终止/完成,并可能中止 imagemagick 转换过程......? exec、system、shell_exec都试过了,都没用。

我没有从命令中得到任何输出,似乎什么也没发生,apache 或 php 日志中也没有任何显示。

更新:现在我在重新启动 MAMP 后在 apache 日志中收到以下错误

convert: unable to create temporary file `/path/file.pdf': Permission denied @ pdf.c/ReadPDFImage/358. convert: missing an image filename `/path/file.jpg' @ convert.c/ConvertImageCommand/2766.

有人有什么想法吗?我正在为此拉扯头发......

非常感谢!

【问题讨论】:

可以确认这与权限有关,添加 env-var TMPDIR 以指向新目录并添加具有完全权限的本地帐户 IUSR。现在一切正常。 【参考方案1】:

Apache 通常在您的服务器上具有有限的权限(这就是您希望的方式),尝试将文件放入您知道 apache 具有写入权限的 /tmp 中。 Apache 也可能无法读取其他用户创建的文件,除非它们是世界可读的。

【讨论】:

谢谢你的想法,我也是这么想的。文件正在被很好地读取,这一事实证明了图像到图像的转换正在工作,只是没有任何涉及 pdf 的转换(与 Ghostscript 相关)。【参考方案2】:

我读了一些文章,使用 exec 最好不要使用 shell 命令,更好的方法是使用 php 中的内置 Imagick。更多内容请阅读Link

谢谢 有梦想的一天

【讨论】:

以上是关于奇怪的问题——PHP / ImageMagick / Ghostscript的主要内容,如果未能解决你的问题,请参考以下文章

php安装imagemagick问题。

使用 php/windows 安装 ImageMagick 扩展

ImageMagick 已安装,是真是假,如何检查? PHP [重复]

PHP 或 Imagemagick :图像中主要颜色的数量

php imagemagick可以去水印吗

php安装imagemagick扩展 常见问题与解决方案(win平台)