PHP Excel 에서 "simplexml_load_string huge input lookup" 에러가 나며 엑셀 로딩이 안 될 경우
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.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 );