由cron发布的pdf生成器上的TCPDF错误

时间:2016-05-28 11:55:02

标签: php html pdf-generation

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

TCPDF错误:无法创建输出文件:/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,我正在使用正确的绝对路径(事实上它可以手动证明它)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通过命令行运行PHP时,

$ _ SERVER [' DOCUMENT_ROOT']不可用,因为DOCUMENT_ROOT是VHost配置中设置的Apache变量。您可以在错误消息中看到该变量显然为空,并且它正在尝试写入名为" 0000"的目录。在您的操作系统的根目录中。

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

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

    找出文档根目录的实际内容。你可以这样做:

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

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

    第2步

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

    我们假设您选择选项4(硬编码)。使用您在上面的步骤1中获得的任何路径替换代码中的$ _SERVER [' DOCUMENT_ROOT']。它现在可以通过浏览器和通过cron工作。

    重要说明:文档根目录在服务器之间发生更改,因此,如果您要将代码部署到另一台服务器,则必须知道该特定服务器上的文档根目录。