`
Vens_07
  • 浏览: 498 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

php Fatal error: Maximum execution time of 30 seconds exceeded in * line *

    博客分类:
  • PHP
阅读更多

   近日(2012-12-3) 在进行(php+sqlite)数据库导出导入的时候,导入数据操作 报Fatal error: Maximum execution time of 30 seconds exceeded in *.php line *  的错误,而插入的数据不超过1000条,电脑配置也不差。

   究其原因,在导入数据的时候,我没使用事务提交。导致插入几百条数据竟使用30秒以上。以下是更改后的代码!数据导入的方法来自:http://bbs.lampbrother.net/read-htm-tid-114482.html

<?php
    set_time_limit(0); //0代表永不超时
    $flag=true;
    $pdo=new PDO(NBOX_DB);//连接数据库
    $temp = $_FILES["file"]["tmp_name"];
    $sql_stream = file_get_contents($temp);//读取整个文件内容
             $sql_stream = rtrim($sql_stream);//去掉末尾空格
             //利用正则替换函数,将导入的内容部分,即insert value里的;换成特殊符号' $$$ '为进一步按;切割单条sql语句做准备
             $new_stream = preg_replace_callback("/\((.*)\)/", create_function('$matches', 'return str_replace(";"," $$$ ",$matches[0]);'), $sql_stream);
             //切割单条sql语句生成数组
             $sql_array = explode(";", $new_stream);
              //遍历该数组
            $pdo->beginTransaction();
             foreach ($sql_array as $value) {
                 if (!empty($value)){ //数组最后一个是空数组,所以需要判断一下
                     $sql = str_replace(" $$$ ", ";", $value) . ";"; //将该条sql语句中' $$$ '转换回;
                  $count=$pdo->exec($sql); //执行该语句
                  if($count!=1){ //返回false  if(!$pd0)
                   echo "\nPDO::errorInfo():\n";
                   print_r($pdo->errorInfo());
                   $pdo->rollBack();
                   $flag=false;
                   break;
                   }
                 }
             }
             if ($flag){
              $pdo->commit();
              echo "数据插入成功"; 
             }
            
            
?>

导入数据超时除了以上代码优化,如果数据海量,那么可以重新设置超时时间,

方法1:设置php.ini下的max_execution_time = 30   将30改为0,表示永不超时

方法2:在程序代码中加入  set_time_limit(0); //0代表永不超时

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics