PHPExcel 또는 PhpSpreadsheet을 사용할 때 발생하는 ERR_INVALID_RESPONSE 오류를 해결 방법입니다

ToC on/off

개요

PHP로 웹사이트를 제작하면서 화면에 표시되는 데이터를 엑셀 파일로 다운로드 받을 때 주로 이용하는 것이 PHPExcel입니다. 그리고, 현재는 PHPExcel의 유지보수가 중단되고 업그레이드 버전인 PhpSpreadsheet가 공개된 상태입니다.

아무튼, 엑셀 파일로 다운로드 받을 때 간혹 ERR_INVALID_RESPONSE 이라는 오류 메시지가 나타날 때가 있습니다. 이런 저런 방법을 찾아보고 코드를 변경해보다가 결국은 PHPExcel이 오래된 것이라 새로운 버전인 PhpSpreadsheet를 이용해보라는 정보를 보고 바꾸어 보았지만 역시나 해결이 되지 않았습니다.

문제 원인

그러다 구글에서 겨우겨우 찾은 해결방법을 적용해보니 해결이 되어 공유하려고 합니다.

오류가 발생하는 상황을 다시 떠올려보니 데이터가 매우 많은 경우라는 것을 알 수 있었습니다.

결국 많이 데이터를 PHP가 감당하지 못해서 오류가 생기는 것이었고, PHP의 메모리 제한을 늘려주면서 해결이 된 듯합니다.

오류 발생 상황

실제 오류 메시지는 아래와 같이 나옵니다.

PHPExcel, PhpSpreadsheet 사용 시에 ERR_INVALID_RESPONSE 오류

해결 방법

그래서 메모리를 늘려주는 코드는 다음과 같습니다. 더불어 실행시간이 오래걸릴 수도 있으니 시간도 120초로 늘려주었습니다.

<?php
    set_time_limit(120);
    ini_set("memory_limit", "256M");
?> 

그래서 PHPExcel과 PhpSpreadsheet에 적용해 보면 다음과 같이 됩니다.

PHPExcel의 경우

<?php    
    /** Include PHPExcel */
    require_once("./Classes/PHPExcel.php");
    
    set_time_limit(120);
    ini_set("memory_limit", "256M");    
    
    // Create new PHPExcel object
    $objPHPExcel = new PHPExcel();

    // Set document properties
    $objPHPExcel->getProperties()->setCreator("Document Creator");
 ?>

PhpSpreadsheet의 경우

<?php
    require_once("./vendor/autoload.php");    

    use PhpOffice\PhpSpreadsheet\IOFactory;
    use PhpOffice\PhpSpreadsheet\Spreadsheet;

    set_time_limit(120);
    ini_set("memory_limit", "256M");    
    
    // Create new Spreadsheet object
    $spreadsheet = new Spreadsheet();

    // Set document properties
    $spreadsheet->getProperties()->setCreator("Document Creator");
?> 
Tags: php excel