使用附件发送数据并不适用于Cronjob

时间:2017-04-28 21:32:22

标签: php cron phpmailer crontab attachment

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

var imgArray = ["../css/images/work-template/bench/stats2/a.png", "../css/images/work-template/bench/stats2/b.png", "../css/images/work-template/bench/stats2/c.png", "../css/images/work-template/bench/stats2/d.png", "../css/images/work-template/bench/stats2/e.png", "../css/images/work-template/bench/stats2/f.png", "../css/images/work-template/bench/stats2/g.png", "../css/images/work-template/bench/stats2/h.png", "../css/images/work-template/bench/stats2/i.png", "../css/images/work-template/bench/stats2/j.png", "../css/images/work-template/bench/stats2/k.png", "../css/images/work-template/bench/stats2/l.png"];

setInterval(function() {
    var $gridItems = $(".stats__grid--desktop .grid__top--item");
    var gridLength = $gridItems.length;
    var gridItemNum = 1 + Math.floor(Math.random() * gridLength);
    var $gridItem = $(".stats__grid--desktop .grid__top--item.g" + gridItemNum);
    var illegalImgs = [];
    var legalImgs = [];

    // Loop through images currently in grid to eliminate them
    for (var i = 0; i < gridLength; i++) {
        var curr = $($gridItems[i]).css("background-image");
        curr = curr.replace('url(','').replace(')','').replace(/\"/gi, "");
        curr = curr.replace(/http(?:s)?:\/\/\w+\.\w+/gi, '..');
        var imgIndex = imgArray.indexOf(curr);
        illegalImgs.push(imgIndex);
    }

    // Find images that may be used ("legal" images)
    for (var i = 0; i < imgArray.length; i++) {
        if (illegalImgs.indexOf(i) === -1) { legalImgs.push(i); }
    }

    // Choose image randomly from legal images
    var legalID = Math.floor(Math.random() * legalImgs.length);
    var imgID = legalImgs[legalID];
    var imgURL = imgArray[imgID];

    $gridItem.css("background-image", "url(" + imgURL + ")");        
}, 2000);

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

:nth-child()

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

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

最有可能是所有权&amp;权限问题。您必须在cron配置中添加的内容取决于您放置它的位置以及您的Web服务器运行的用户。如果您希望它每天凌晨5点运行,那么/etc/crontabwww-data是您的网络服务器用户,您需要这样的条目:

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

如果它位于Web服务器用户自己的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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

示例:

* * * * *卷曲http://localhost/Android/SMS/p1.php

在上面的行中键入

,每隔一秒钟执行一次带有附件的p1.php电子邮件发送文件。 p1.php文件在我的htdocs / Android / SMS文件夹中。