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

PHP邮件脚本浏览器运行正常但Cron调度器执行失败如何解决?

问题排查与解决方法

核心原因

Cron执行PHP脚本时的工作目录与浏览器访问时的工作目录不一致:浏览器访问时以脚本所在目录作为基准解析相对路径,Cron运行时默认工作目录是执行用户的家目录,所以你代码中未做绝对路径处理的附件路径会找不到对应文件。

具体解决步骤

  • 修复附件路径写法
    你代码中include语句使用__DIR__拼接绝对路径的方式是正确的,附件路径也需要用同样的逻辑修改,将原来的相对路径:
$path[] = '../uploads/email-files/'.date('dmY').'-'.$attechment_rows['filename'];

替换为以当前脚本目录为基准的绝对路径:

$path[] = __DIR__ . '/../uploads/email-files/'.date('dmY').'-'.$attechment_rows['filename'];

无论脚本在什么场景下运行,都会以脚本所在目录为基准找到上级目录的uploads文件夹,路径解析完全一致。

  • 修正Cron执行命令
    确认Cron命令中指定的PHP版本与脚本运行要求一致,不要使用默认的php命令,直接指定对应版本的PHP绝对路径,示例格式如下(替换为你实际的站点路径):
/usr/bin/php70 /home/你的cPanel用户名/public_html/脚本所在目录/你的邮件脚本名.php
  • 添加调试日志定位问题
    如果修改后还有报错,可以在脚本开头加入调试代码,将运行信息输出到日志文件排查:
// 开启全量错误提示
error_reporting(E_ALL);
ini_set('display_errors', 1);
// 输出运行信息到日志,替换为你实际的站点可写目录路径
$log_path = '/home/你的cPanel用户名/public_html/cron_mail_debug.log';
file_put_contents($log_path, date('Y-m-d H:i:s')." 运行启动,当前工作目录:".getcwd()." 附件基准路径:".__DIR__ . '/../uploads/email-files/'."\n", FILE_APPEND);

运行一次Cron后查看日志文件的内容,就能确认路径解析、运行参数是否符合预期。

  • 冗余代码清理
    脚本末尾的JS代码可以删除,Cron为命令行运行环境,不会执行前端JS代码,留着只会输出无效内容到Cron日志中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 15:15:03