【问题标题】:ImagickException with message Postscript delegate failed on MAMP 3.0.5带有消息 Postscript 委托的 ImagickException 在 MAMP 3.0.5 上失败
【发布时间】:2014-06-18 21:39:02
【问题描述】:

我正在尝试使用 MAMP 3.0.5 将 PDF 转换为 png 文件。我知道我的 PHP 代码在我们的 Linux 服务器上运行良好...

我在我的 Mac OSX 10.8.5 上设置了 MAMP 3.0.5,当我运行脚本将 PDF 转换为 png 文件时,我收到以下错误:

致命错误:未捕获的异常“ImagickException”和消息“Postscript 委托失败`/Applications/MAMP/htdocs/timesheets.com/saas/public_html/timesheets1/timesheets/Daisy_Morris_53635951154c7.pdf”:没有这样的文件或目录@error/ pdf.c/ReadPDFImage/713'

请帮忙,这快把我逼疯了!

【问题讨论】:

  • 你有没有得到更多关于这方面的信息?我目前正在处理同样的事情。
  • 嗨,Jacob,不,我还没有解决这个问题。直到现在我才解决问题。

标签: php macos pdf imagemagick imagick


【解决方案1】:

我刚刚发现这篇博文:http://lamp-ios.com/?p=216

问题在于 MAMP pro 的 PATH 变量不包含 Ghost 脚本的路径,ImageMagick 在 PDF 操作中使用该路径。

修复它的步骤是:

  1. 通过在控制台中输入“which gs”获取 ghost 脚本的路径
  2. 在您的 php 中: putenv('PATH=' .getenv('PATH') .':/opt/local/bin/');

/opt/local/bin/ 是您的 gs 安装路径

【讨论】:

  • 我刚刚尝试过,但它仍然报告相同的错误...致命错误:未捕获的异常 'ImagickException' 和消息 'Postscript 委托失败`
  • 您将环境路径设置为什么?您没有将 /gs 添加到路径中吗?
  • 另外,我认为您必须使用 MAMP Pro 才能使其工作。默认情况下,Image Magick 仅包含在专业版中。您必须为基本版本配置它
  • 嗨 - 这是我设置的环境路径:putenv('PATH='.getenv('PATH').':/usr/local/bin/gs');
  • 另外,我使用的是 MAMP Pro 3.0.5 版。
【解决方案2】:

这可能会有所帮助。我刚遇到同样的问题,几个小时后解决了。

我的第一反应是确保 PHP 正在寻找正确的 PATH。对我来说,是这样的:

putenv('PATH=' . getenv('PATH') . ':/usr/local/bin');

这本身似乎没有帮助,但我将代码留在了那里,因为在某些时候 GhostScript 需要知道在哪里可以找到那些 libpng 文件。

我的下一步是检查 MAMP 的 Apache 错误日志。我发现这可能是罪魁祸首:

dyld: Library not loaded: /usr/local/lib/libpng16.16.dylib
Referenced from: /usr/local/bin/gs
Reason: Incompatible library version: gs requires version 29.0.0 or later, but libpng16.16.dylib provides version 23.0.0

很奇怪,因为我在 /usr/local/lib 中的 libpng 是最新的(1.6.12)。

经过多次试验和错误,我发现从 3.0.5 开始,MAMP 正在使用自己的 libpng 文件覆盖,位于 /Applications/MAMP/Library/lib

我从 /Applications/MAMP/Library/lib 中删除了 libpng16.16.dylib,重新启动了 MAMP,再次尝试,得到了这个错误:

dyld: Library not loaded: /usr/local/lib/libfreetype.6.dylib
Referenced from: /usr/local/bin/gs
Reason: Incompatible library version: gs requires version 18.0.0 or later, but libfreetype.6.dylib provides version 17.0.0

那是不同的东西,所以我也从 /Applications/MAMP/Library/lib 中删除了 libfreetype.6.dylib,然后重新启动了 MAMP。

此时,一切都开始工作了。至少对我来说,这两个步骤是确保 PHP 的 PATH 正在查看正确的目录,然后从 MAMP 包含的 libpng 库中删除有问题的文件,强制 PHP 使用 /usr/ 中的最新 libpng 文件本地/库。

【讨论】:

  • 非常感谢您也为我解决了这个问题! :)
  • 很高兴这对你有用。我在下面的笔记中意识到我已经完成了这个 libpng 修复,这是我在使用 ffmpeg 时遇到的另一个问题的一部分,所以当我被卡在 ghost 脚本上时,这只是一步解决方案。直到我看到这个解决方案才想到这一点。干得好戴夫。
  • putenv('PATH='.getenv('PATH').':/usr/local/bin'); var_dump(getenv('PATH'));不起作用 - 继续返回 '/usr/bin:/bin:/usr/sbin:/sbin'
猜你喜欢
  • 2014-01-24
  • 2012-04-04
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 2016-05-19
  • 2014-08-09
相关资源
最近更新 更多