【问题标题】:TCPDF ERROR on pdf generator launched by croncron 启动的 pdf 生成器上的 TCPDF 错误
【发布时间】:2016-05-28 11:55:01
【问题描述】:

我的 PDF 生成器脚本有问题(使用 html2pdf lib)。 脚本在手动启动时运行良好,但在作为 cron 任务启动时返回此错误

TCPD 错误:无法创建输出文件:/0000/images/upload/demonstration/factures/2016-05-demonstration.pdf

这是创建过程中涉及的脚本部分。

require('html2pdf/html2pdf.class.php');
        try
            {
            $pdf = new HTML2PDF('P','A4','fr');
            $pdf->writeHTML($content);
            ob_end_clean();
            $pdf->Output(''.$_SERVER['DOCUMENT_ROOT'] . '/0000/images/upload/'.$data["id_client"].'/factures/'.$fichier.'.pdf', 'F');
            }
        catch(HTML2PDF_exception $e) {
            die($e);
            }

我尝试了其他线程中建议的许多解决方案,但到目前为止没有任何效果。文件和目录的权限为 777,我使用的是正确的绝对路径(它手动工作的事实证明了这一点)。

有什么想法吗?

【问题讨论】:

    标签: php html pdf-generation


    【解决方案1】:

    $_SERVER['DOCUMENT_ROOT'] 在通过命令行运行 PHP 时不可用,因为 DOCUMENT_ROOT 是在 VHost 配置中设置的 Apache 变量。您可以在错误消息中看到该变量显然为空,并且它正在尝试写入操作系统根目录中名为“0000”的目录。

    当通过 CLI 运行时,您必须以其他方式设置文档根目录,例如:

    1. 通过设置环境变量
    2. 专门为 CLI 作业创建配置文件。
    3. 直接在 PHP 中设置 DOCUMENT_ROOT 索引(例如:$_SERVER['DOCUMENT_ROOT'] = '/path/to/document/root';)
      1. 硬编码路径

    第 1 步

    弄清楚文档根目录实际上是什么。你可以这样做:

    die(var_dump($_SERVER['DOCUMENT_ROOT']));
    

    确保通过您的网络浏览器(而不是通过 cron)运行上述临时代码,它会告诉您您的文档根目录是什么。

    第 2 步

    选择我上面提供的选项之一。

    假设您选择选项 4(硬编码)。将代码中的 $_SERVER['DOCUMENT_ROOT'] 替换为您在上述步骤 1 中获得的任何路径。它现在可以通过浏览器和 cron 运行。

    重要提示:服务器之间的文档根目录会发生变化,因此如果您接下来要将代码部署到另一台服务器,您必须知道该特定服务器上的文档根目录是什么。

    【讨论】:

    • 感谢您的解释!所以,我尝试了不同的选项:相对路径:$pdf->Output('../images/upload/'.$data["id_client"].'/factures/'.$fichier.'.pdf', 'F ');手动工作正常,但似乎无法在 Cron 上工作。
    • 绝对路径(硬代码):$pdf->Output('http://'.$data["domaine"].'/images/upload/'.$data["id_client" ].'/factures/'.$fichier.'.pdf', 'F');警告:fopen(domain.fr/images/upload/demonstration/factures/…):无法打开流:HTTP 包装器不支持 /home/yatacrea/www/0000/scripts/html2pdf/_tcpdf_5.0.002/tcpdf.php 中的可写连接,第 6168 行 TCPDF 错误:无法创建输出文件:domain.fr/images/upload/demonstration/factures/…
    • 您尝试过的所有方法都不起作用。 Apache 下的工作目录与 cron 不同,因此相对路径不起作用。在您的下一次尝试中,您正在尝试写入一个也不起作用的 http 流。让我用更准确的信息更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多