mysql - PHPExcel导入1万条数据连接超时
世界只因有你
世界只因有你 2017-05-16 12:59:12
0
4
1018

新手刚学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。求大神指点

世界只因有你
世界只因有你

Antworte allen(4)
伊谢尔伦

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

大家讲道理

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

漂亮男人

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

为情所困

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage