【问题标题】:Error! Symfony2 with KNP Snappy Bundle & WKHTML2PDF错误! Symfony2 与 KNP Snappy Bundle 和 WKHTML2PDF
【发布时间】:2012-10-29 17:13:43
【问题描述】:

当我转到 /fileDownload 时,我收到 500 内部服务器错误 - RuntimeException:

进程因“0”信号而停止。

控制器动作:

public function fileAction()
{
    $html = $this->render('MyBundle:Downloads:file.html.twig', array(
    'fileNumber'  => '1234'
    ));

    return new Response(
        $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
        200,
        array(
            'Content-Type'          => 'application/pdf',
            'Content-Disposition'   => 'attachment; filename="file.pdf"'
        )
    );
}

我已经为 WKHTMLTOPDF 使用了终端命令,它已经成功地生成了 PDF。它只是在 Symfony2 应用程序中不起作用。

在我的 config.yml 中:

knp_snappy:
    pdf:
        enabled:    true
        binary:     /usr/local/bin/wkhtmltopdf
        options:    []

【问题讨论】:

    标签: php symfony runtime wkhtmltopdf


    【解决方案1】:

    我假设 Symfony 在某个阶段发出了 exec() 。您需要获得返回的确切命令行错误。它在终端会话中为您工作的事实并不一定意味着当不同的用户/进程正在运行它时它会工作。

    检查 wkhtmltopdf 的权限,确保 apache 或运行您的 Web 服务器的任何人有权运行该命令。

    另外,检查这个问题wkhtmltopdf: cannot connect to X server 以及这里的第一个帖子:http://geekisland.org/index.php?m=05&y=11&entry=entry110518-114630

    X Server 需要运行某些构建的 wkhtmltopdf,并且在通过 cron 或从 apache 进程中运行时不存在。如果是这种情况,您需要使用上面第一个链接中的 bash 包装器。

    【讨论】:

    • 我只安装了 WKHTMLTOPDF。我没有安装任何其他东西。我还需要安装什么?
    • 如果可以在命令行运行就不需要安装其他东西了。
    • 好的。我会尝试上面的链接。这是本地的顺便说一句。我在 OS X 上使用 MAMP
    • 我应该有 xvfb 吗?我无法执行命令 xvfb-run wkhtmltopdf。我收到 xvfb-run: command not found
    【解决方案2】:

    确保 wkhtmltopdf 确实在您指定的文件夹中,并具有正确的权限:/usr/local/bin/wkhtmltopdf

    我在 Symfony 2.0 中成功使用了 KNP Snappy Bundle,在生成 html 时尝试使用 RenderView 而不是渲染(检查我的代码是否有效):

    控制器:

    $html = $this->renderView('YOPYourOwnPoetBundle:thePoet:poemPDF.html.twig', array(
                    'poem'  => $customizedPoem,
                    'fontType' => $fontType,
                    'fontSize' => $formData['fontSize'],
                    'fontWeight' => $fontWeight,
                    'fontStyle' => $fontStyle,
                ));
    return new Response(
                    $this->get('knp_snappy.pdf')->getOutputFromHtml($html),
                    200,
                    array(
                        'Content-Type'          => 'application/pdf',
                        'Content-Disposition'   => 'attachment; filename="'.$session->get('poemTitle').'.pdf"',
                    )
                );
    

    【讨论】:

    • 还是不行。你是本地mac吗?除了 KNP 包和 wkhtmltopdf 之外,您还需要安装其他任何东西吗?
    • 不,我不认为我必须安装其他任何东西,不过已经很长时间了。我让它在 Ubuntu 服务器上运行。也许您遇到了权限问题?我已将库放在我的供应商目录中:vendor/wkhtmltoimage/bin/wkhtmltopdf。我不确定它会改变什么...
    【解决方案3】:

    我遇到了同样的问题,我终于解决了,我的建议是,如果您从操作系统存储库中安装了 wkhtmltopdf 库,然后将其删除,然后从谷歌代码网站下载静态版本,不要使用版本11rc,使用版本 9 的静态库,它是与我一起使用的。

    http://code.google.com/p/wkhtmltopdf/downloads/list

    【讨论】:

      【解决方案4】:

      看起来 selinux 阻止了你的命令,我曾经遇到过同样的问题,但我通过禁用 SELinux 解决了它,现在我可以使用 wkhtmltopdf+php 生成 pdf 文件。

      exec("/usr/local/bin/wkhtmltopdf http://www.google.com /var/www/html/google.pdf");
      

      要禁用 selinux 运行setenforce 0, 再试一次,看看它是否有效。 用setenforce 1重新启用它

      但是禁用 selinux 并不是最好的解决方案,您需要使用 audit2allow 来扩展它,它会自动创建一个自定义策略模块来解决这个问题, 如果尚未安装,请先安装 audit2allo

      yum -y install policycoreutils-python
      grep httpd_t /var/log/audit/audit.log | audit2allow -m httpdlocal > httpd.te
      checkmodule -M -m -o httpdlocal.mod httpd.te
      semodule_package -o httpdlocal.pp -m httpdlocal.mod
      semodule -i httpdlocal.pp
      

      再试一次看看是否有效

      【讨论】:

        【解决方案5】:

        我在使用 wkhtmltopdf 的相同场景中遇到了同样的问题。我摆脱了以下命令:

        setsebool httpd_execmem on

        【讨论】:

          猜你喜欢
          • 2014-03-28
          • 2015-05-15
          • 1970-01-01
          • 2015-01-31
          • 2016-09-04
          • 2016-02-02
          • 1970-01-01
          • 1970-01-01
          • 2014-09-29
          相关资源
          最近更新 更多