【问题标题】:Generating PDF from PHP using Exec() or Bindings使用 Exec() 或 Bindings 从 PHP 生成 PDF
【发布时间】:2012-04-14 13:50:02
【问题描述】:

运行 Snappy(WKHTMLTOPDF 的 PHP 绑定)时出现以下错误:

Fatal error: Uncaught exception 'RuntimeException' with message 'The file '/Users/username/test.pdf' was not created (command: /usr/bin/wkhtmltopdf --lowquality '/var/folders/--/--ze9OC9GTSBW3tCl6UCR++++TQ/-Tmp-/knp_snappy4f761d35744a96.74626529.html' '/Users/username/test.pdf').' in /Applications/MAMP/htdocs/includes/wkhtmltopdf/Knp/Snappy/AbstractGenerator.php:261 Stack trace: #0 /Applications/MAMP/htdocs/includes/wkhtmltopdf/Knp/Snappy/AbstractGenerator.php(117): Knp\Snappy\AbstractGenerator->checkOutput('/Users/username...', '/usr/bin/wkhtml...') #1 /Applications/MAMP/htdocs/includes/wkhtmltopdf/Knp/Snappy/AbstractGenerator.php(127): Knp\Snappy\AbstractGenerator->generate('/var/folders/--...', '/Users/username...', Array, false) #2 /Applications/MAMP/htdocs/test.php(14): Knp\Snappy\AbstractGenerator->generateFromHtml('<h1>Test</h1>', '/Users/username...') #3 {main} thrown in /Applications/MAMP/htdocs/includes/wkhtmltopdf/Knp/Snappy/AbstractGenerator.php on line 261

但是,如果我通过命令行运行它们执行的操作,它就可以正常工作:

/usr/bin/wkhtmltopdf --lowquality '/var/folders/--/--ze9OC9GTSBW3tCl6UCR++++TQ/-Tmp-/knp_snappy4f761d35744a96.74626529.html' '/Users/username/test.pdf

既然 find 有效,人们会认为我可以通过 exec() 函数或 shell_exec() 函数执行它,这两个函数都不返回任何内容(没有错误或任何东西)。执行“whoami”确实会返回我的用户名。

安全模式已关闭,wkhtmltopdf 文件的权限设置为 777。

我知道还有其他几个与此类似的线程,但是最初询问者的解决方法要么毫无意义,要么根本没有解决方案。谁能在这里提供任何见解?

【问题讨论】:

  • 您使用 snappy 的任何特殊原因?我发现它没什么用...看看stackoverflow.com/questions/9910975/…
  • 不,没有什么特别的原因,只是似乎背后有很多支持。我现在正在阅读您的帖子,令人尴尬的是,我已经有一个问题了。我正在运行 MAMP,那么如何运行 apt-get 命令?
  • :) 这超出了我的范围,但是apt-get 是 linux 的包管理器(使得在服务器上安装东西变得非常容易),所以你可以看看这个superuser.com/questions/92872/…
  • 我尝试了几个小时来快速运行并最终放弃了它。我收到了与您描述的相同的错误,甚至更多:) 现在回想起来,完全不值得浪费时间...
  • 感谢您帮助 Michal; Snappy(或任何其他绑定)绝对不是启动和运行它的最快、最好或最清晰的方法。

标签: php macos pdf-generation wkhtmltopdf


【解决方案1】:

在以下位置查看此答案的来源: http://oneqonea.blogspot.com/2012/04/why-does-wkhtmltopdf-work-via-terminal.html

在 MAMP 的 /Applications/MAMP/Library/bin/envvars 文件中,您会注意到以下两行:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

将它们都注释掉,如下所示(注意每一行的“#”前缀):

#DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
#export DYLD_LIBRARY_PATH

最后,在同一个文件中,添加以下命令以确保 PHP 从 Apache 继承的 $PATH 环境变量包含包含 wkhtmltopdf 可执行文件的目录。您的命令将类似于:

export PATH=/parent/path/of/wkhtmltopdf/executable:$PATH

【讨论】:

  • 谢谢,约翰。我已经这样做了,但这次我设法让它在修补时工作,所以我会把它标记为正确的,因为它是一个步骤。感谢您让我再次继续前进!
猜你喜欢
  • 2019-02-11
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 2013-07-04
  • 2013-06-09
  • 1970-01-01
相关资源
最近更新 更多