ImagickException出现,消息为在MAMP 3.0.5上Postscript代理失败。

3
我正在尝试使用MAMP 3.0.5将PDF转换为PNG文件。 我知道我的PHP代码有效,因为在我们的Linux服务器上很好地运行了。
我已经在我的Mac OSX 10.8.5上安装了MAMP 3.0.5,当我运行脚本将PDF转换为PNG文件时,出现以下错误:
“Fatal error: Uncaught exception 'ImagickException' with message 'Postscript delegate failed `/Applications/MAMP/htdocs/timesheets.com/saas/public_html/timesheets1/timesheets/Daisy_Morris_53635951154c7.pdf': No such file or directory @ error/pdf.c/ReadPDFImage/713'”
请帮助我,这让我疯狂!

你有没有得到更多关于这个问题的信息?我目前也在处理同样的事情。 - jacob bullock
嗨Jacob,不,我还没有解决这个问题。我一直把它搁置到现在。 - V4n1ll4
2个回答

2
我刚刚发现了这篇博客文章:http://lamp-ios.com/?p=216 问题是,MAMP Pro的PATH变量不包括Ghost Script的路径,而ImageMagick在PDF操作时使用它。
解决方法如下:
  1. 在控制台中键入“which gs”获取Ghost Script的路径
  2. 在php中: putenv('PATH=' . getenv('PATH') . ':/opt/local/bin/');
其中/opt/local/bin/是您的Ghost Script安装路径。

你设置了什么环境路径?你没有将/gs添加到路径中,对吧? - jacob bullock
嗨,感谢您再次回复。在我添加了那行代码后,它仍然无法正常工作:( 需要注意的是,MAMP Pro 3.0.5预编译了gs,所以不确定这个修复方法是否适用于我? - V4n1ll4
你安装了哪个版本的MAMP?你用什么命令安装gs?抱歉问这么多问题,但是任何意见都非常感谢。这已经让我疯狂了几个月了... - V4n1ll4
我在MAMP中使用了3.0.5版本。我突然想到另一件事,当你在控制台中输入“which php”时,你看到了什么? - jacob bullock
好的,我已经将这行代码添加到我的bash配置文件中了,但是我仍然遇到相同的错误,真是气死人啊!!! - V4n1ll4
显示剩余10条评论

1
这可能会有所帮助。我也遇到了同样的问题,几个小时后解决了。
我的第一反应是确保PHP正在查找正确的路径。对我来说,它是这样的:
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/local/lib中最新的libpng文件。


非常感谢,这也解决了我的问题! :) - V4n1ll4
很高兴这对你有用。我在下面的笔记中意识到,我已经作为解决我遇到的另一个与ffmpeg有关的问题的一部分而进行了这个libpng修复,所以当我卡在ghost script上时,这只是一个一步解决方案。直到看到这个解决方案,我才想到这一点。干得好,Dave。 - jacob bullock
putenv('PATH=' . getenv('PATH') . ':/usr/local/bin'); var_dump(getenv('PATH')); 在这里无效 - 继续返回 '/usr/bin:/bin:/usr/sbin:/sbin' - fdrv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接