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

   近日(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代表永不超时

 

你可能感兴趣的:(PHP,mysql,数据库,sqlite,超时)