php运行超时分步执行的简单方法

By | 2010/05/24

用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 ]

2 thoughts on “php运行超时分步执行的简单方法

  1. Pingback: 分享一个PHP的google翻译接口GTranslate - 登高望远

  2. Pingback: PHP修改网页的输出编码 | Dengor's app

Comments are closed.