无法通过 exec 创建 PDF 缩略图

PDF thumbnails can't be created via exec

我正在尝试使用以下命令让我的网络应用程序为上传的 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 (网络服务器的用户) ) 使用:

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

但是执行命令运行s时,缩略图没有创建。 $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 来生成缩略图。作为最后的评论,缩略图生成在我的本地主机和我的服务器中都失败了。

我没主意了,有人有吗?谢谢!

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

在我的本地主机上,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 );

现在我的本地主机和服务器都可以工作了,耶!