i漂泊

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4069|回复: 0

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

[复制链接]
TA的礼物信息
  • 收到:0
  • 送出:2
发表于 2013-1-8 13:30:21 | 显示全部楼层 |阅读模式
            用PHP处理大量的数据时, 因为PHP对脚本运行时间是有限制的, 一般是30秒, 超过了30秒会运行超时, 在php.ini中可以修改设置. 也可以用set_time_limit(0)设置, 0表示不限时间.  
这种方法对于时间不是太长还好, 如果运行时间要几个小时, 这对服务器是一个很大的负担, 并且你不知道程序运行情况如何.
于是, 想到可以把PHP执行进行分步, 一次只执行处理几条数据.  再处理下一步的数据.
下面是一个例子. 有10000条数据, 要修改其中某些数据,  运用PHP分步执行处理, 代码如下:

action.php
  1. <?php
  2. $stid = isset($_GET['stid'])?$_GET['stid']:0;
  3. $endid = $stid + 100;
  4. $maxid = 10000;

  5. function dosomething(){
  6. //要时间比较多的操作
  7. ……
  8. }
  9. $sql_string=”select *  from `table`  where id>’$stid’ and id<=’$endid’ order by id”;
  10. $datas = getdata_bysql($sql_string);
  11. foreach($datas as $data){
  12. //处理数据
  13. …..
  14. echo $id.” 处理完成.
  15. ”;
  16. if($id>=$maxid){exit;}
  17. }
  18. if($stid<=$maxid){
  19. $stid = $stid + 100;
  20. $url=”action.php?stid=$stid”;
  21. echo $url;
  22. echo ‘<script language=”javascript”>location=”‘.$url.’”; </script>’;
  23. }
  24. ?>
复制代码
其中的dosomething()是一个耗时操作.  这里我们通过限制id范围来减少运行时间,   运行完后通过javascript的跳转来自动运行下一步.
这样, 每处理一批数据就可以知道结果, 如果中断也知道问题出在那里

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|IPiaoBo Inc. ( 渝ICP备17002826号 )

GMT+8, 2024-4-29 14:41 , Processed in 0.080792 second(s), 56 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表