用PHP处理大量的数据时, 因为PHP对脚本运行时间是有限制的, 一般是30秒, 超过了30秒会运行超时, 在php.ini中可以修改设置. 也可以用set_time_limit(0)设置, 0表示不限时间. 这种方法对于时间不是太长还好, 如果运行时间要几个小时, 这对服务器是一个很大的负担, 并且你不知道程序运行情况如何.
于是, 想到可以把PHP执行进行分步, 一次只执行处理几条数据. 再处理下一步的数据.
下面是一个例子. 有10000条数据, 要修改其中某些数据, 运用PHP分步执行处理, 代码如下:
action.php
<?php
$stid = isset($_GET[‘stid’])?$_GET[‘stid’]:0;
$endid = $stid + 100;
$maxid = 10000;function dosomething(){
//要时间比较多的操作
……
}
$sql_string=”select * from `table` where id>’$stid’ and id<=’$endid’ order by id”;
$datas = getdata_bysql($sql_string);
foreach($datas as $data){
//处理数据
…..
echo $id.” 处理完成. <br />”;
if($id>=$maxid){exit;}
}
if($stid<=$maxid){
$stid = $stid + 100;
$url=”action.php?stid=$stid”;
echo $url;
echo ‘<script language=”javascript”>location=”‘.$url.'”; </script>’;
}
?>
其中的dosomething()是一个耗时操作. 这里我们通过限制id范围来减少运行时间, 运行完后通过javascript的跳转来自动运行下一步.
这样, 每处理一批数据就可以知道结果, 如果中断也知道问题出在那里.
原创文章 转载请注明出处: 登高望远 [ http://www.dengor.com/archives/789.html ]
Pingback: 分享一个PHP的google翻译接口GTranslate - 登高望远
Pingback: PHP修改网页的输出编码 | Dengor's app