PHP在循环中执行上一次执行时执行函数

时间:2015-11-26 06:14:26

标签: php cron

如何在上一次执行完成时仅在循环中执行函数?

我使用一个API,我需要自动向每个会话的2000个用户发送电子邮件。我使用玉米工作,但我需要在数据库中创建某种分页因为我目前有50.000用户。我知道如何创建分页并发送循环但问题是服务器时间。执行脚本是5分钟,返回错误500.提供商不允许我扩展执行时间。

我需要在PHP中发送前2000封电子邮件,执行后开始新的执行等。我尝试使用ajax并且工作完美,但cronjob不执行HTML。

怎么办?

这是AJAX解决方案:

(function($){
    var setup = {
        page    : 0,
        total   : 30
    }, 
    sendAjax = function(page){
        if(page > setup.total)
        {
            return false;
        }
        else
        {
            $.ajax({
                url: "/ajax/daily-request.php",
                type:"POST",
                data: "page="+page+"&total="+setup.total
            }).fail(function(jqXHR, textStatus){
                console.log("AJAX Request failed: " + textStatus);
            }).done(function(num){
                num = $.trim(num);
                setTimeout(function(){
                    sendAjax(num);
                    console.log("User Group "+num+" Request Send!");

                    ////////// DEBUG //////////
                    // sendAjax(setup.page);
                    // console.log(setup.page);
                    // setup.page++;
                },1);
            });
        }   
    }

    $(document).ready(function(){
        sendAjax(setup.page);
    }); 
}(jQuery));

2 个答案:

答案 0 :(得分:1)

PHP中的

<?php
$page = isset($_GET["page"]) $_GET["page"] : 0 ;//get page or handle first 1st page

using $page you can use your pagination to handle pages 0-infinate

.... your email loop for first 1000 emails
.... check that there is more
if($page != $lastpage){
header("location: daily-request.php?page=".($page+1));
}    
//end of the file
?>

这将强制文件使用新页面重新加载,直到它没有剩余 将其设置为1000可确保您不会在页面上发送许多信息,从而允许服务器有时间切换页面而不会超时。

对于sql位,你需要做的就是

$start = $page*1000;
SELECT * FROM `table` LIMIT $start, 1000;

这样你就不必编辑cron job就让它运行,文件将在它的第一个ini之后接管,然后它会在页面用完并停止循环时停止;

答案 1 :(得分:1)

我非常仔细地阅读了您的问题。您需要做的只是在php中使用'sleep()'函数,这将使您的服务器在给定的最小时间内休眠,这样您的服务器就不会给出500错误。