【问题标题】:sending data with attachment doesn't work Cronjob发送带附件的数据不起作用 Cronjob
【发布时间】:2017-04-28 21:32:21
【问题描述】:

我不太了解 cron 作业,但是我有一个 php 文件,当我使用浏览器运行它时它会发送带有附件的数据,它工作正常并发送附件,但是如果我使用 cron 作业来运行它,它永远不会与附件。 这是 cron 作业命令行:

/opt/php54/bin/php /home/username/public_html/path/to/myscript.php

这是 php 文件中的错误位置,因为 cron 作业向我发送电子邮件,内容为“某些文件:hhshd.jpg 不存在!” ,但是当我使用浏览器时,带有附件的数据发送成功。

 if (!file_exists("uploads/" .  $fileName))
            {
                die("Some how file :$fileName is not exist!");
            } 

注意:我正在使用 Hostgator 的 cronjob。

【问题讨论】:

  • 当您询问有关错误的问题时总是包括错误日志。在php 脚本的顶部添加error_reporting(E_ALL); ini_set('display_errors', 1);,它会返回什么?此外,您可能希望使用 $fileName 的完整路径
  • @PedroLobito 我已经提到了错误......我通过电子邮件收到的唯一消息是文件不存在,我也尝试包含完整路径,例如:“/home2/nh75group /public_html/old-soon/SMTtest/uploads/ . $fileName" 但即使我通过浏览器运行 php 文件,它也对我不起作用,所以我认为我使用了错误的完整路径

标签: php cron phpmailer crontab attachment


【解决方案1】:

问题解决了,我使用了这个 cron 作业命令:

curl http://yoursite/path/to/publish.php

【讨论】:

  • 赞成,因为这对我有用,但是我会警告说,使用 CURL 存在潜在危险,因为它需要您打开脚本以接收 http 流量和潜在的攻击。顺便说一句,大多数 Wordpress 文件都以 defined('ABSPATH') || 开头。出口;作为直接访问文件时防止脚本执行的一种方法。这不适用于 CURL。
【解决方案2】:

一个可能的原因是当您通过浏览器运行脚本时,Apache 用户能够创建附件文件并发送它。

但是当cronjob由于权限问题无法创建附件时。

您可以尝试在您的 cronjob 中使用“sudo”或尝试更改您正在创建附件的目录的权限。

【讨论】:

  • 能否请您说的更具体一些,因为我是 cronjob 的新手,所以如何使用 Sudo,比如新的 cronjob 会是什么?
  • 尝试使用 sudo /opt/php54/bin/php /home/username/public_html/path/to/myscript.php
  • 当我输入提到的命令行时,它给出:“sudo:有效的 uid 不是 0,sudo 是否安装了 setuid root?”
  • 您可以尝试更改文件夹权限。它会更快更好,因为根据您的设置,sudo 可能还需要输入密码,这在 cron 中不可用。
  • 我已经让它对所有人都可读、可写和可执行,但仍然是同样的错误。让我提一下,当我使用 (cron-job.org) 时,它也运行良好,附件也运行良好,但它从未与 hostgator cronjob 一起使用。
【解决方案3】:

这很可能是所有权和权限问题。你必须在你的 cron 配置中添加什么取决于你把它放在哪里以及你的 web 服务器以什么用户身份运行。如果您希望它每天早上 5 点运行,它位于 /etc/crontab 中,而 www-data 是您的 Web 服务器用户,您需要这样的条目:

0 5    * * *   www-data    /opt/php54/bin/php /home/username/public_html/path/to/myscript.php

如果它在网络服务器用户自己的 crontab 文件中,它将跳过用户名字段。您可以使用crontab -u www-data -e 对其进行编辑,然后添加如下一行:

0 5 * * * /opt/php54/bin/php /home/username/public_html/path/to/myscript.php

另一个问题可能是当前工作目录可能不同,因此您可能需要将命令设置为将 cd 包含到您的脚本首先所在的目录中,如下所示:

cd /home/username/public_html/path/to && /opt/php54/bin/php myscript.php

如果您想从 cron 作业接收任何错误输出,请在运行命令之前通过在 cron 文件中添加如下一行来设置 MAILTO 环境变量:

MAILTO=user@example.com

【讨论】:

  • 当我使用命令时:0 5 * * * www-data /opt/php54/bin/php /home/username/public_html/path/to/myscript.php 它给出:/usr/ local/cpanel/bin/jailshell: www-data: command not found 我正在使用 hostgator cronjob ...所以我无法访问任何配置,只能写下命令行。让我提一下,当我使用 (cron-job.org) 时,它也运行良好,附件也运行良好,但它从未与 hostgator cronjob 一起使用。
  • 好吧,听起来这根本不是一个合适的 cron 工作,只是其他一些事情。值得一试的是带有cd 的命令字符串。
  • 我试过这个命令行: cd /home/username/public_html/path/to && /opt/php54/bin/php myscript.php 现在我得到一个错误:警告:curl_setopt( ) 期望参数 2 很长,字符串在第 229 行的 /home2/username/public_html/path/to/myscript.php 中给出警告:curl_setopt() 期望参数 2 很长,字符串在 /home2/username/public_html/ 中给出path/to/myscript.php 在第 229 行
  • 我已经修复了这个错误,现在当我在浏览器上运行它时,我得到了该消息已成功发送,但我仍然收到没有附件的消息!
  • 这里收到来自 (cron-job.org) 的响应:服务器:nginx/1.12.0 日期:星期六,2017 年 4 月 29 日 03:22:07 GMT 内容类型:text/html; charset=UTF-8 传输编码:分块连接:保持活动状态:星期四,1981 年 11 月 19 日 08:52:00 GMT 缓存控制:无存储,无缓存,必须重新验证,检查后 = 0, pre-check=0 Pragma: no-cache Set-Cookie: PHPSESSID=fe58147ce49525dee03b26f8ec7d0a47;路径=/
【解决方案4】:

例子:

* * * * * curl http://localhost/Android/SMS/p1.php

键入上面的行以每秒执行一次 p1.php 电子邮件发送文件和附件。 p1.php 文件位于我的 htdocs/Android/SMS 文件夹中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2021-02-28
    • 1970-01-01
    相关资源
    最近更新 更多