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()
CODE
해결하려면 다음과 같이 simplexml_load_string 을 호출하는 부분의 마지막 옵션 부분에 LIBXML_COMPACT | LIBXML_PARSEHUGE 를 추가해 주면 됩니다.
$xml = simplexml_load_string(curl_exec($ch), 'SimpleXMLElement', LIBXML_COMPACT | LIBXML_PARSEHUGE);
CODE
Laravel excel 을 사용한다면 vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php 의 getLibXmlLoaderOptions 호출 부분에 다음 옵션을 추가해 줍니다.
vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Xlsx.php
$xmlSheet = simplexml_load_string(
$this->securityScanner->scan($this->getFromZipArchive($zip, "$dir/$fileWorksheet")),
'SimpleXMLElement',
Settings::getLibXmlLoaderOptions() | LIBXML_COMPACT | LIBXML_PARSEHUGE
);
PHP