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