1. 云栖社区>
  2. PHP教程>
  3. 正文

php Fatal error: Maximum execution time of 30 seconds exceeded i

作者:用户 来源:互联网 时间:2017-12-01 14:52:54

phptime30errorfatalmaximumSecondsExecutionexceeded

php Fatal error: Maximum execution time of 30 seconds exceeded i - 摘要: 本文讲的是php Fatal error: Maximum execution time of 30 seconds exceeded i,    近日(2012-12-3) 在进行(php+sqlite)数据库导出导入的时候,导入数据操作 报Fatal error: Maximum execution time of 30 seconds exceeded in *.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代表永不超时


 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php , time , 30 , error , fatal , maximum , Seconds , Execution exceeded ,以便于您获取更多的相关知识。