You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Cron执行PHP脚本调用DomPDF生成PDF失败求助

解决Cron执行时无法加载DomPDF类的问题

问题场景

  • 浏览器访问时PDF生成正常,但Cron执行对应脚本时无法加载DomPDF类;
  • Cron脚本路径为/public_html/admin/crons/generate_pdf.php,执行命令为php -q /home/userdirectory/public_html/admin/crons/generate_pdf.php;
  • 脚本调用/public_html/admin/requisites/_library.php中的Generate_PDF()函数,该函数尝试加载DomPDF依赖。

排查与解决步骤

1. 用动态路径替代硬编码路径

硬编码服务器路径容易因目录结构变更或输入错误失效,建议用__DIR__动态构建autoload.php路径:
在_library.php中替换原加载代码:

// 替换原有的require '/home/userdirectory/vendor/autoload.php';
require __DIR__ . '/../../vendor/autoload.php';

__DIR__代表当前文件(_library.php)所在目录/public_html/admin/requisites/,向上两级正好对应/public_html/vendor/目录,避免手动输入路径错误。

2. 统一Cron与浏览器的PHP版本

浏览器使用的PHP版本和Cron默认调用的版本可能不一致,导致DomPDF依赖的PHP特性不兼容:

  • 在cPanel中确认网站当前使用的PHP版本(如7.4);
  • 修改Cron命令为对应版本的PHP路径,例如:
    /usr/local/bin/php74 -q /home/userdirectory/public_html/admin/crons/generate_pdf.php
    
    可通过cPanel的PHP管理器或SSH命令which php获取正确的PHP执行路径。

3. 检查文件与目录权限

Cron执行用户(系统用户)和Web服务器用户(如apache、nobody)权限不同,需确保:

  • vendor/目录及autoload.php文件具备可读权限(文件设为chmod 644,目录设为chmod 755);
  • PDF_DIRECTORY目录具备可写权限(设为chmod 755或chmod 775)。

4. 添加日志定位具体错误

在Cron脚本中添加错误日志配置,或修改Cron命令将输出写入文件:

  • 修改generate_pdf.php开头:
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    ini_set('error_log', '/home/userdirectory/cron_error.log');
    
  • 或修改Cron命令:
    php -q /home/userdirectory/public_html/admin/crons/generate_pdf.php >> /home/userdirectory/cron_output.log 2>&1
    
    执行后查看日志文件,可明确是“文件不存在”“权限不足”还是“类未找到”等具体问题。

5. 修复代码拼写错误

注意到_library.php中有变量拼写错误:$BOOKINF_ID应为$booking_id,虽不影响类加载,但会导致PDF文件名错误,建议修正:

$FILE_NAME = 'Planner - '.$booking_id;

额外建议

  • 避免硬编码服务器路径,可在config.php中定义全局常量:
    define('VENDOR_AUTOLOAD', __DIR__ . '/../vendor/autoload.php');
    
    然后在_library.php中直接调用require VENDOR_AUTOLOAD;;
  • 测试时先在SSH中手动执行Cron命令,直接查看输出错误,比等待Cron定时执行更高效。

内容的提问来源于stack exchange,提问作者Alpha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:54:57