Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用;php while";当我访问它一次时,它将继续在cpanel中运行_Php_Performance_Codeigniter_Cpanel - Fatal编程技术网

使用;php while";当我访问它一次时,它将继续在cpanel中运行

使用;php while";当我访问它一次时,它将继续在cpanel中运行,php,performance,codeigniter,cpanel,Php,Performance,Codeigniter,Cpanel,我使用的是codeigniter,我制作了一个控制器,它会一直循环,直到我通过更改数据库的设置来停止它。问题是while突然停止而没有错误日志。还有其他方法做这项工作吗?这是个好办法吗?有更好的办法吗?我不能使用cron作业,因为它的时间不规则,我通过每个循环中的数据库来管理它。 这是我的代码:(抱歉代码太长) } 我认为我的代码中没有错误,因为我已经在localhost上运行了一整天,没有遇到任何问题。谢谢你,如果你有这方面的经验,请帮助我。坏主意,你想看看编写一个php守护程序(如果你的主机

我使用的是codeigniter,我制作了一个控制器,它会一直循环,直到我通过更改数据库的设置来停止它。问题是while突然停止而没有错误日志。还有其他方法做这项工作吗?这是个好办法吗?有更好的办法吗?我不能使用cron作业,因为它的时间不规则,我通过每个循环中的数据库来管理它。 这是我的代码:(抱歉代码太长)

}


我认为我的代码中没有错误,因为我已经在localhost上运行了一整天,没有遇到任何问题。谢谢你,如果你有这方面的经验,请帮助我。

坏主意,你想看看编写一个php守护程序(如果你的主机允许的话)谢谢@Dagon为你提供的解决方案。你知道还有其他方法吗?这里有另一个关于持续运行PHP脚本的Stockoverflow问题。读一下。它可能会帮助您:
class Periode extends CI_Controller {

function __construct() {
    parent::__construct();
}

function WebServices(){
    set_time_limit(0);
    ini_set('memory_limit', '-1');

    $lock = GetSetting('WhileLocked');
    if($lock){
        log_message('debug',"Server Locked. Accessed By ".$_SERVER['REMOTE_ADDR']);
        return;
    }
    SetSetting("WhileLocked", 1);
    $end = FALSE;
    //$startTime = microtime(true);
    $holdproseson = FALSE;
    $holdnewperiodon = FALSE;
    $onperiod = FALSE;

    log_message('debug',"Server Started By ".$_SERVER['REMOTE_ADDR']);

    while (!$end) {
        $isstart = GetSetting('IsRunning');
        $now = time();
        if(!$isstart){
            if(!$onperiod){
                $end = TRUE;
                continue;
            }
        }
        $currentperiode = $this->db->where("((IsCurrent = 1) OR (EndInjury >= '".date("Y-m-d H:i:s")."'))")->order_by("PeriodeOrder","desc")->order_by("PeriodeDate","desc")->limit(1)->get("periodes")->row_array();
        if(empty($currentperiode)){
            $getnewperiode = $this->GetNextPeriodeServer(); //this function i not included
            if($getnewperiode["PeriodeOrder"] == GetSetting("MaxPeriode")){
                $end = TRUE;
            }
            //createnewperiodhere
            $this->CreateNewPeriodeServer($getnewperiode);
            $onperiod = TRUE;
            continue;
        }
        $endtime = strtotime($currentperiode["EndTime"]);
        $endvideo = strtotime($currentperiode["EndVideo"]);
        $endinjury = strtotime($currentperiode["EndInjury"]);

        if($now == $endvideo && $holdproseson != $now){ // if periode end, do some process
            //proses here
            $this->ProsesServer($currentperiode["PeriodeID"],$currentperiode["Number"],$currentperiode["Type"]);
            log_message('debug', "Processing periode ".date('Y-m-d',$now)." - ".$currentperiode["PeriodeNo"]."\n");
            $holdproseson = $now;
        }

        if($now == $endinjury && $holdnewperiodon != $now){ // if injury end, create new period
            if(!$isstart){
                $onperiod = FALSE;
                continue;
            }
            $getnewperiode = $this->GetNextPeriodeServer();
            if($getnewperiode["PeriodeOrder"] == GetSetting("MaxPeriode")){
                $end = TRUE;
            }
            $this->CreateNewPeriodeServer($getnewperiode);
            log_message('debug',"Created New Periode: ".date('Y-m-d',$now)." - ".$getnewperiode["PeriodeNo"]."\n");
            $holdnewperiodon = $now;
        }
    }
    SetSetting("WhileLocked", 0);
    log_message('debug',"Stopped");
    echo "Stopped";
}