新手刚学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。求大神指点
应该是内存爆了。你可以用yield迭代限制每次插入的条数。其实就是协程啦。
单次导入1万条数据,很容易超时,对服务器的负荷也大,可以考虑把1W条数据拆分成多次导入,这种大数据的导入可以使用异步的方式来完成,不要让用户等待。还有可以换考虑使用协程。
将上传后的文件名加入队列 写脚本从队列读到文件名之后打开文件导入 脚本加入crontab定时任务或者写成服务
既然是csv,那就没必要使用PHPExcel了哈,这个开源库,太耗内存了,之前我用的是这个库,https://packagist.org/package...(貌似只支持PHP7),demo我就不写了,自己去文档里面找,导入几十万条都没压力,不谢哈。
再介绍一个,https://packagist.org/package...,没压力哈,建议题主先去了解一下csv是什么东东,我们甚至可以自己写一个csv导入类,感觉最高效&轻量级。