做一个定时任务用的while做循环检查一个表的字段修改字段。但是内存没法释放最后导致php内存崩溃怎么解决!目前使用java解决的,还有就是想了一个不用while,然后在linux下写个循环脚本循环这个php文件,但是这个方法我们不通过不让用,求解!
public function updatescancard() {
//echo “execute ” . __class__ . ‘::’ . __function__ . “\r\n”;
$scandservice = $this->container->get ( “scancard_pic_service” );
while(1) {
$sql = “select id,uuid , account_id ,handled_time,handle_state from `scan_card_picture` where ifupdate=’0′ order by id asc limit 50”;
$list = $this->getconnection()->executequery($sql)->fetchall();
if(empty($list)){
sleep(3);
}
foreach ($list as $item) {
$this->getconnection()->begintransaction();
if(!in_array($item[‘handle_state’],array(‘fail’,’neverhandle’))) {
$data = array(‘vcardid’ => $item[‘uuid’], ‘modifedtime’ => $item[‘handled_time’]);
$this->pushmessage(100, $item[‘account_id’], $data);
//continue;
try {
$scandservice->adminupdatecontactcard($item[‘uuid’]);
} catch (\exception $ex) {
echo $ex->getmessage();
}
}
$this->getconnection()->executeupdate(“update scan_card_picture set ifupdate=’1′ where ,
array(‘:id’ => $item[‘id’]));
$this->getconnection()->commit();
}
unset($list);
}
}
回复讨论(解决方案)
楼主你解决没有 我也是和你差不多的方法 用while来做定时任务 经理不然用linux的定时任务做 我在想 这样做会不会对数据库压力大 每次都是要访问数据库查询 如果我只sleep 1秒 就要每秒读数据了 还有
ignore_user_abort();//关掉浏览器,php脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
这两个你写到哪里 头吗?
定时任务可以使用crontab来做。
参考:
http://blog.csdn.net/fdipzone/article/details/22701113
楼主你解决没有 我也是和你差不多的方法 用while来做定时任务 经理不然用linux的定时任务做 我在想 这样做会不会对数据库压力大 每次都是要访问数据库查询 如果我只sleep 1秒 就要每秒读数据了 还有
ignore_user_abort();//关掉浏览器,php脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
这两个你写到哪里 头吗?
每秒访问数据库没啥问题,数据库如果这点量都扛不住,那才是有问题吧~