PHP批量导入Excel造成网站卡住问题
因用户需要,给网站增加了一项批量导入excel功能,单个excel文件记录大概2万到3万行,20列左右数据,目前测试发现每次导入数据的时候,都会造成网站其他功能短暂卡住无法使用的情况,直至excel全部处理完才可访问。目前每一行记录均通过网站API统一入库(进行一系列的权限、查询、增加、修改、去重、记录日志等操作)。
不知道有什么方法可以改进,使其导入同时不影响其他用户使用,目前想到的办法是将excel解析结果临时保存到xcache,然后分批(30000条/50条=600次)导入。不知是否有更好的办法。
你大爷还非法啊
10 years, 2 months ago
Answers
这个问题我也遇到过,不知道楼主遇到的情况是不是和我一样
两个写法都是用的同一个版本的PHPEXCEL,但是不知道为啥第一种会慢很多~
以下是
老代码
:
//代码是基于Yii1
set_time_limit(0);//这个一定要
$Excel = CUploadedFile::getInstanceByName("Excel");
$filePath = $Excel->getTempName() . '.' . $Excel->getExtensionName();
$Excel->saveAs($filePath);
Yii::import("application.extensions.*");
$excel = new ExcelReader($filePath);
foreach ($excel->getWorksheetList() as $worksheet => $value) {
$rs = $excel->getWorksheetData($worksheet);
if (!empty($rs)) {
foreach ($rs as $index => $row) {
$name = $row[1];
$phone = $row[2];
//more code...
}
}
以下是
新代码
:
//代码是基于Yii1
set_time_limit(0);//这个一定要
$Excel = CUploadedFile::getInstanceByName("Excel");
$filePath = $Excel->getTempName() . '.' . $Excel->getExtensionName();
$Excel->saveAs($filePath);
Yii::import("application.extensions.*");
$PHPExcel = new PHPExcel();
$PHPReader = new PHPExcel_Reader_Excel2007();//如果new的是2007,那么excel必须是2007格式的
$excel = $PHPReader->load($filePath);//引入文件
$excelSheets = $excel->getAllSheets();
$activeSheetNames = $excel->getSheetNames();
foreach ($excelSheets as $SheetIndex => $activeSheet) {
$sheetColumnTotal = $activeSheet->getHighestRow();
if($sheetColumnTotal == 0){
continue;
}
for($i = 2;$i < $sheetColumnTotal;$i++){
$name = $activeSheet->getCell('A'.$i)->getValue();
$phone = $activeSheet->getCell('B'.$i)->getValue();
}
}
无邪D试炼者
answered 10 years, 3 months ago