Imagick和phmagick出现问题:Postscript代理失败/没有此文件或目录。

8
我正在使用imagick 3.0.1和phmagick(http://www.francodacosta.com/phMagick/download)。无论如何,当我尝试将PDF转换为JPEG时,两者都给我同样类型的错误。
例如: Postscript代理失败“/tmp/magick-bfxIrUJ5”:@ error/pdf.c/ReadPDFImage/669没有这样的文件或目录 我正在使用Ghostcript-9.05(运行在/usr/local/bin/gs上)。 同时也在使用ImageMagick-6.7.6-8(运行在/usr/local/bin/convert上)。
我已经检查了文件夹的权限(755)。ImageMagick在终端中工作得很好。
例如,我的PHP使用Imagick:
//use imagick
$im = new imagick( '/pdf/553571072.pdf' );

// convert to jpg
$im->setImageColorspace(255);
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setImageFormat('jpeg');

//write image on server
$im->writeImage('/jpg/553571072.jpg');

顺便说一下,Imagick在我的phpinfo()中显示出来了。我正在使用linux/apache/amd64。

非常感谢您的任何建议!


在终端上运行良好并不相关。您没有在Apache的UID下运行,因此这不是一个有效的测试。 - Marc B
你的代码示例是来自Web应用程序还是命令行?而且你真的是从文件夹“/pdf”读取并写入文件夹“/jpg”,也就是说它们都在文件系统的根目录下吗? - halfer
Halfer,这段代码来自一个Web应用程序,我也尝试使用完整路径“/var/vhost/...../pdf/”,对于jpg也是如此。这些文件夹位于基础目录中,与/css和/js相同。Mark,我不明白你的观点,我正在VPS上运行Web应用程序。谢谢大家。 - Diego Sarmiento
3个回答

17

好的,这最终成功了,感谢 Nuno Franco da Costa 的帮助 (http://www.francodacosta.com/)。

问题是我的 GhostScript 路径适用于 Shell,但对于系统和 PHP 来说是错误的。要纠正这个问题,您应该将您的 /usr/local/bin/gs 文件链接到 /usr/bin/gs

请从 Shell 执行以下操作:

[root@din ~]# convert -list configure | grep -i delegates
DELEGATES     bzlib fontconfig freetype jpeg jng png tiff x11 xml zlib

检查是否已经存在/usr/bin中的gs文件。如果存在,则会创建其备份。
如果没有/usr/bin/gs,则可以跳过此步骤

[root@din ~]# ls -l /usr/bin/gs
-rwxr-xr-x 1 root root 6024 Sep 30  2010 /usr/bin/gs
[root@din ~]# mv /usr/bin/gs /usr/bin/gs.orig

现在创建从 /usr/local/bin/gs/usr/bin/gs 的链接

[root@din ~]# sudo ln -s /usr/local/bin/gs /usr/bin

那应该就解决了问题。非常感谢大家。


这也解决了我的问题...但是不可能指定给php-imagick gs可执行文件的位置吗? - Arnold Roa
3
我刚刚看到了这个回答。有一个简单的解决方案。只需将“gs”的实际路径添加到PHP PATH中:putenv(getenv('PATH')。':/usr/local/bin') - HelloWorld

5
我对@HelloWorld在已接受答案的评论中提出的“纯PHP解决方案”做了一些贡献(谢谢!),稍作更正:必须在扩展默认路径之前添加变量名,因此
putenv( getenv('PATH') . ':/usr/local/bin' ); 不起作用,但是
putenv( 'PATH=' . getenv('PATH') . ':/usr/local/bin' ); 将会生效

*我的声望不到50分,无法在正确的位置添加评论,所以我不得不创建一个新的答案:-)


1
我使用的是 ImageMagick ImageMagick 6.7.7-10GhostScript 9.10,出现了一些问题。后来发现 PDF 文件已经损坏,尽管一些较新版本的 GS 可以读取它们,但这个旧版本不能,会出现以下错误。
   **** Warning:  An error occurred while reading an XREF table.
   **** The file has been damaged.  This may have been caused
   **** by a problem while converting or transfering the file.
   **** Ghostscript will attempt to recover the data.

在Linux下,您可以首先通过pdftk处理PDF文件:

pdftk 'bad.pdf' output 'fixed.pdf'

之后,在Ubuntu上一切都正常运行了。


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