今天网上一个项目反映,导入excel文件时,网页直接卡死,导入excel文件失败。经过一步步验证,发现是读取excel文件时卡住了。本项目使用phpoffice/phpexcel扩展,最后发现在执行load方法加载excel文件时卡住了。之前导入excel文件一直正常,excel里面数据不多。是什么原因?最后在phpoffice/phpexcel的官方文档中发现excel文件中有一些特殊字符导致加载excel文件时崩溃。既然找到了原因,就必须有解决的办法。phpoffice/phpexcel中有个属性可以解决这个方法readDataOnly,这个属性在extension中默认是false,我们需要把readDataOnly属性设置为true$PHPExcel->setReadDataOnly(true);//过滤excel中的特殊字符所以读取excel的完整代码如下:$PHPExcel=newPHPExcel_Reader_Excel2007();$file='excelfile';try{if(!$PHPExcel->canRead($file)){//默认使用excel2007读取excel,如果格式不对,使用之前的版本读取$PHPExcel=newPHPExcel_Reader_Excel5();}$PHPExcel->setReadDataOnly(true);//过滤excel中的特殊字符$excel=$PHPExcel->load($file);//加载excel//读取excel文件中的第一个工作表$currentSheet=$excel->getSheet(0);}catch(Exception$e){thrownewInvalidValueException('请选择正确的导入文件!');}$allRow=$currentSheet->getHighestRow()-1;//获取excel总行数//读取excel信息为$currentRow=1;$currentRow<=$allRow;$currentRow++){//读取指定列数据0表示第一列$currentSheet->getCellByColumnAndRow(0,$currentRow+1)->getValue()}
