我尝试让我的网络应用程序使用以下命令为上传的PDF创建缩略图:
exec( "/usr/local/bin/convert '/path/to/file.pdf'[0] -background white -alpha remove -thumbnail 600x '/path/to/file.pdf.png'", $output, $return );
当我从命令行运行此命令时,无论是以root身份运行还是以_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数组为空,$ return值为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 :(得分:0)
最后,我有两个不同的问题,一个在我的localhost,另一个在我的服务器。
在我的localhost中,GhostScript不在exec环境的PATH中。为了解决这个问题,我在命令之前添加了以下行:
putenv( 'PATH=' . getenv( 'PATH' ) . ':' . dirname( '/usr/local/bin/gs' ) );
这解决了我的localhost中的问题。但是,当我将新代码推送到服务器时,它仍然无法正常工作。所以我检查了服务器中的PATH,GhostScript已经在那里了。然后我发现我的服务器使用的是旧版本的GhostScript,没有“alpha”支持。所以我将命令简化为:
exec( "/usr/local/bin/convert '/path/to/file.pdf'[0] -thumbnail 600x '/path/to/file.pdf.png'", $output, $return );
现在我的本地主机和服务器都工作了,是的!