2016-02-20 101 views
1

我试图让我的web应用程序创建PDF文件上传缩略图使用下面的命令来创建:PDF缩略图不能通过EXEC

exec("/usr/local/bin/convert '/path/to/file.pdf'[0] -background white -alpha remove -thumbnail 600x '/path/to/file.pdf.png'", $output, $return); 

当我运行从它的工作原理命令行命令,既,当我使用运行它作为根,当我运行它_www(Web服务器的用户):

sudo -u _www /usr/local/bin/convert '/path/to/file.pdf'[0] -background white -alpha remove -thumbnail 600x '/path/to/file.pdf.png' 

但当exec命令运行时,不创建的缩略图。 $ output数组为空,$返回值为1(一般错误)。

此外,当我为其他类型的文件生成缩略图时,我完全没有任何问题。例如我使用的GIF:

exec("/usr/local/bin/convert '/path/to/file.gif'[0] -thumbnail 600x '/path/to/file.gif'", $output, $return); 

我对JPG,PNG或BMP也没有问题。这导致我认为问题可能与GhostScript有关,因为只有PDF需要GhostScript来生成缩略图。作为最后一条评论,缩略图生成在我的本地主机和我的服务器上均失败。

我出来的想法,任何人都有吗?谢谢!

+0

我希望转换为您提供一些有意义的错误,您是否从过程中捕获stdout和stderr?你最可能的问题是,当你执行转换时,环境(例如PATH)是不同的,所以转换根本找不到Ghostscript。 – KenS

+0

谢谢,我从来没有能够捕捉到你提到的错误日志,但是你的第二个评论让我朝着正确的方向前进,请检查我的答案以获取详细信息。 – Sophivorus

回答

0

最后,我有两个不同的问题,一个在我的本地主机,另一个在我的服务器。

在我的本地主机中,GhostScript不在exec环境的PATH中。为了解决这个问题,我添加了以下行命令之前:

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

这在我的本地固定的问题。但是当我将新代码推送到服务器时,它仍然不起作用。所以我检查了我的服务器中的PATH,并且GhostScript已经在那里。然后我发现我的服务器使用的是旧版本的GhostScript,没有“alpha”支持。所以我简化了命令:

exec("/usr/local/bin/convert '/path/to/file.pdf'[0] -thumbnail 600x '/path/to/file.pdf.png'", $output, $return); 

现在无论我的本地主机和服务器的工作,耶!