通过exec()调用的PDFTK无声地失败

时间:2010-11-12 16:11:49

标签: php pdf pdf-generation

我正在使用pdftk通过执行exec()调用来动态连接pdf文件:

exec("/path/to/pdftk /path/to/file1.pdf /path/to/file2.pdf cat output path/to/output.pdf", $execoutput);

这在linux环境中运行得非常好,但是当我们在开发环境(Windows / Uniform Server和OSX / MAMP的混合)上本地运行时,这似乎无声地失败了。 $ execoutput是一个空数组。

如果发送到exec()的命令被复制并粘贴到Windows或OSX中的命令行,则它具有所需的输出并生成连接文件。每台开发人员机器都安装了pdftk,并且可以通过命令行演示其功能完全正常。

这让我很难过。我无法解释为什么会这样。

2 个答案:

答案 0 :(得分:5)

我最终弄清楚发生了什么。就像一个菜鸟我假设每台机器都运行最新版本的pdftk。他们不是。

上述问题似乎与版本1.43

中修复的已知错误有关

来自http://www.pdflabs.com/docs/pdftk-version-history/

  

“清除信号掩码,以解决在调用pdftk之前关闭信号的环境。已知此问题会导致pdftk在某些Python Web设置和PHP中挂起。”

猜猜哪个是运行版本的唯一设置> = 1.43; - )

将每个开发环境更新到最新版本的pdftk(目前为1.44)已解决了这个问题

答案 1 :(得分:1)

如果pdftk没有将输出添加到所需文件夹的权限,也会发生这种情况。如果打印出$ execoutput(在命令中使用'verbose')并且看到最后一个条目是'Creating Output',你可以看到这种情况。下一行应该说输出正在执行,但它会在那里结束。这让我有一段时间(因为它直接在命令行上运行)。