【问题标题】:Can't use Imagemagick with PDFs from PHP's exec(), fine from CLI无法将 Imagemagick 与 PHP 的 exec() 中的 PDF 一起使用,在 CLI 中很好
【发布时间】:2018-05-15 15:47:44
【问题描述】:

我正在尝试使用来自 PHP 的 Imagemagick 和 exec() 来管理一些 PDF。我已经简化了我的测试用例,发现虽然 PDF 从命令行很好,但它们在 PHP 中不起作用。

从命令行:

$ identify /var/tmp/doc-98563.png 
/var/tmp/doc-98563.png PNG 2550x3300 2550x3300+0+0 8-bit Gray 256c 1.24178MiB 0.000u 0:00.009

$ identify /var/tmp/doc-35765.pdf
/var/tmp/doc-35765.pdf[0] PDF 419x595 419x595+0+0 16-bit ColorSeparation CMYK 997321B 0.120u 0:00.119
/var/tmp/doc-35765.pdf[1] PDF 419x595 419x595+0+0 16-bit ColorSeparation CMYK 997321B 0.110u 0:00.109

太棒了!正确识别我的文件,PNG 或 PDF。

我还可以确认文件的权限是否正常:

$ ls -la /var/tmp/doc*
-rw-r--r--  1 _www  wheel   1.6M 15 May 10:05 /var/tmp/doc-35765.pdf
-rw-r--r--  1 _www  wheel   1.2M 15 May 10:01 /var/tmp/doc-98563.png

从 PHP 运行等价物...

exec('identify /var/tmp/doc-98563.png', $output, $exitcode);
var_dump($output);
var_dump($exitcode);

unset($output);

exec('identify /var/tmp/doc-35765.pdf', $output, $exitcode);
var_dump($output);
var_dump($exitcode);

...产生不同的结果:

array(1) {
    [0]=>
    string(93) "/var/tmp/doc-98563.png PNG 2550x3300 2550x3300+0+0 8-bit Gray 256c 1.24178MiB 0.000u 0:00.000"
}
int(0)
array(0) {
}
int(1)

因此,PNG 在两个地方的工作方式相同(正如预期的那样),但 PDF 只是......没有。

我已经检查了convert -versionconvert -list format,两者都是相同的(ImageMagick 7.0.7-32、PDF PDF rw+ Portable Document Format)。我还指定了完整路径/usr/local/bin/identify ...,以验证它肯定在运行同一个 IM 实例。对于我能看到的与 PDF 和 PNG 相关的所有内容,文件权限都是相同的,所以不要以为是这样。

运行 gs 在 PHP 中使用相同的文件可以正常工作,但 gs 不能满足我的需要。

还有什么我可以尝试的吗?

作为参考,我在 OSX 上使用 PHP7.2,它和 ImageMagick(和 Ghostscript)都使用 Brew 安装。

【问题讨论】:

  • 这是一个常见问题。似乎 PHP 环境通常找不到 Ghostscript。解决此问题的一种方法是编辑已安装的 delegates.xml 文件,以将完整路径放入 ghostscript,即 gs 在command=""gs" 的所有条目中。这适用于 PDF、PS、EPS。
  • 谢谢@fmw42,就是这样。如果你回答我会接受。

标签: php pdf imagemagick


【解决方案1】:

这是一个常见问题。似乎 PHP 环境通常找不到 Ghostscript。解决此问题的一种方法是编辑已安装的 delegates.xml 文件以将完整路径放入 ghostscript,即 gs 在 command=""gs" 的所有条目中。这将适用于 PDF、PS、EPS。另一种方法是修改您的 PHP 环境变量以将 GS 放入您的 PHP PATH 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多