PHPExcel导入1万条数据连接超时

新手刚学PHP,目前开发需要满足用phpexcel往数据库插入1万条记录(1条记录43列),每条数据插入前先查询库中是否存在,不存在则继续插入,并更新原表置标志,否则跳过该条记录。
现在的情况是导入2000条数据要20多秒,导入1万条数据就报500错误,导入失败,查看存放上传文件的目录里面也没有该文件。`$result=move_uploaded_file($_FILES'inputExcel',$uploadfile);

    if(!$result)
    {
        die('no file!');
    }
    
    $objReader = PHPExcel_IOFactory::createReader('CSV')
    ->setDelimiter(',')
    ->setInputEncoding('GBK')
    ->setEnclosure('"')
    ->setLineEnding("\r\n")
    ->setSheetIndex(0);
    $objPHPExcel = $objReader->load($uploadfile);        
    $sheet = $objPHPExcel->getSheet(0);        
    $highestRowNum = $sheet->getHighestRow();
    $highestColumn = $sheet->getHighestColumn();
    $highestColumnNum = PHPExcel_Cell::columnIndexFromString($highestColumn);
    echo $highestRowNum.'+'.$highest

这边无法获取行和列数。代码里面已结加了set_time_limit=0,内存也改成128M。求大神指点
图片描述

阅读 6.9k
4 个回答

既然是csv,那就没必要使用PHPExcel了哈,这个开源库,太耗内存了,之前我用的是这个库,https://packagist.org/package...(貌似只支持PHP7),demo我就不写了,自己去文档里面找,导入几十万条都没压力,不谢哈。
再介绍一个,https://packagist.org/package...,没压力哈,建议题主先去了解一下csv是什么东东,我们甚至可以自己写一个csv导入类,感觉最高效&轻量级。

应该是内存爆了。你可以用yield迭代限制每次插入的条数。其实就是协程啦。

单次导入1万条数据,很容易超时,对服务器的负荷也大,可以考虑把1W条数据拆分成多次导入,这种大数据的导入可以使用异步的方式来完成,不要让用户等待。还有可以换考虑使用协程。

将上传后的文件名加入队列 写脚本从队列读到文件名之后打开文件导入 脚本加入crontab定时任务或者写成服务

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题