Laravel Excel 패키지를 사용해서 여러 시트로 이루어진 큰 엑셀 파일을 로딩해서 처리하고 있었습니다. 

일부 시트들은 백업 용으로 복사해 둔 시트라 정상 로딩이 확인된 후 로딩 속도를 위해 몇 개 시트를 삭제하니 다음과 같은 에러가 발생하고 로딩이 제대로 되지 않았습니다.

simplexml_load_string(): Entity: line 2: parser error : internal error: Huge input lookup

at vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php:643
    639|                             //~ http://schemas.openxmlformats.org/spreadsheetml/2006/main"
    640|                             $xmlSheet = simplexml_load_string(
    641|                                 $this->securityScanner->scan($this->getFromZipArchive($zip, "$dir/$fileWorksheet")),
    642|                                 'SimpleXMLElement',
  > 643|                                 Settings::getLibXmlLoaderOptions()


해결하려면 다음과 같이 simplexml_load_string 을 호출하는 부분의 마지막 옵션 부분에  LIBXML_COMPACT | LIBXML_PARSEHUGE 를 추가해 주면 됩니다.

$xml = simplexml_load_string(curl_exec($ch), 'SimpleXMLElement', LIBXML_COMPACT | LIBXML_PARSEHUGE);


Laravel excel 을 사용한다면 vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.phpgetLibXmlLoaderOptions 호출 부분에 다음 옵션을 추가해 줍니다.

$xmlSheet = simplexml_load_string(
                                $this->securityScanner->scan($this->getFromZipArchive($zip, "$dir/$fileWorksheet")),
                                'SimpleXMLElement',
                                Settings::getLibXmlLoaderOptions() | LIBXML_COMPACT | LIBXML_PARSEHUGE
                            );



Ref





blog comments powered by Disqus