问题:用 office excel新建了一个.xlsx文件,发给客户后,客户用wps编辑过,导入系统出现内存溢出,导致整个系统崩溃。
注:一定要记得加 $reader->setReadDataOnly(TRUE);
$upload_file = $_FILES['file']['tmp_name'];
$ext = strtolower(pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION));
if ($ext == 'xlsx') {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly(TRUE);// 不加只读限制,会导致溢出
$spreadsheet = $reader->load($upload_file);
} else {
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
$spreadsheet = $reader->load($upload_file);
}
$sheet = $spreadsheet->getActiveSheet();
$row_count = $sheet->getHighestRow();//取得总行数
$highestColumn = $sheet->getHighestColumn();// 取得总列数
$arr = [];
for ($row = $starTrow; $row <= $row_count; $row++) {
for ($col = 'A'; $col <= $highestColumn; $col++) {
$cell = $sheet->getCell($col . $row)->getValue();
if (is_object($cell)) {
$cell = $cell->__toString();
}
$arr[$row][$col] = self::handleStr($cell);
}
}