2022년 5월 기준 php 최신 버전은 8.x이다.
php 7버전 이후인지 8버전 이후부터인지는 모르겠으나, 엑셀 다운로드 기능에 편하게 사용되던 PHPExcel 라이브러리가 정상 작동하지 않는다. 구버전에서는 정상작동한다.
개발측에서 더이상 업데이트 하지 않는것 같다.
따라서 PHP최신버전을 사용하거나 php 구버전 (예를들어.. 5.x버전)을 사용하다가 최신 8버전으로 마이그레이션 작업을 해야한다면, PHPExcel 라이브러리를 PhpSpreadsheet로 변경해줘야한다.
PhpSpreadsheet는 PHPExcel과 다른 라이브러리라 새로 설치가 필요하지만, 소스는 비슷해서 마이그레이션 작업이 그닥 어렵지 않다.
PhpSpreadsheet 설치
사실 서버단에서 composer를 이용하여 설치 해야하는데, root 접속 권한이 없다면 깃에서 PhpSpreadsheet를 직접 다운로드 받아야 한다.
https://github.com/PHPOffice/PhpSpreadsheet
위 링크에서 라이브러리를 다운로드 받고 composer 설치시 생성되는 파일과 디렉토리를 직접 추가해줘야 하는데,
모두 작업된 내용들을 압축해서 아래에 첨부했다.
위 파일 압축풀어서 php 라이브러리 경로에 그대로 넣어준다.
나는 /www/lib 디렉토리 안에 PhpOffice디렉토리 그대로 넣어줬다.
PHPExcel을 PhpSpreadsheet로 변경
라이브러리 경로에 PhpOffice 디렉토리 그대로 넣고나서 PHPExcel이 적용돼있는 파일을 수정해주자.
대표적인 수정 규칙은 아래와 같다!
####### define('LIB_PATH', '/www/lib'); 된 상태.
# excel 다운로드 파일 상단에 선언
# namespace 사용 (특정 클래스(기능)가 필요하게 되면 상단에 선언 후 사용하는 방식)
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xls; # Xls 파일로 다운받을경우
# use PhpOffice\PhpSpreadsheet\Writer\Xlsx; # Xlsx 파일로 다운받을경우 include_once(LIB_PATH.'/PhpOffice/Psr/autoloader.php'); include_once(LIB_PATH.'/PhpOffice/PhpSpreadsheet/autoloader.php');
# 위 내용을 아래로 변경
# excel 생성
$phpexcel = new PHPExcel();
- $phpexcel = new Spreadsheet();
#스타일 수정
# PHPExcel_Style 수정
PHPExcel_Style_Border
- \PhpOffice\PhpSpreadsheet\Style\Border
PHPExcel_Style_Alignment
- \PhpOffice\PhpSpreadsheet\Style\Alignment
PHPExcel_Style_Fill
-\PhpOffice\PhpSpreadsheet\Style\Fill
# duplicateStyleArray를 applyFromArray로 변경
$sheet->duplicateStyleArray(array('fill' => array('type' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,'color' => array('rgb'=>'eeeeee'))),'B2');
- $sheet->getStyle('B2')->applyFromArray(['fill' => ['fillType' => \PhpOffice\PhpSpreadsheet\Style\Fill::FILL_SOLID,'color' => ['rgb'=>'eeeeee']]]);
# 이미지
# 상단에 use PhpOffice\PhpSpreadsheet\Worksheet\Drawing; 추가
new PHPExcel_Worksheet_Drawing();
- new Drawing();
# 파일저장
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment; filename="'.$filename. '.xls"');
header('Cache-Control: max-age=0');
$writer = new Xls($phpexcel); # Xls 파일로 다운받을경우
#$writer = new Xlsx($phpexcel); # Xlsx 파일로 다운받을경우
$writer->save('php://output');
exit;
위 내용이 기본적인 PHPExcel을 PhpSpreadsheet로 마이그레이션 할때 변경되는 부분이다.
전체적으로 구조가 비슷해서 금방 마이그레이션 할 수 있다.
기타 마이그레이션 참고
기타 마이그레이션에 필요한 내용은 아래 링크를 참고했다.
https://htlaccess.com/PhpSpreadsheet/docs/topics/migration-from-PHPExcel.md
http://www.freelancerkim.co.kr/v1/bbs/board.php?bo_table=study&wr_id=305
php 버전업 마이그레이션 작업을 할 일이 있었는데
PHPExcel 라이브러리에서 엄청나게 많은 오류를 뿜어내는거 보고 직접 라이브러리를 수정하기엔 무리가 있겠다 싶어서 찾아봤더니 php최신버전은 지원 안한다는 사실을 알고 멘붕했었다.
직접 라이브러리 소스 다 고쳐야되나 하고 슬퍼하고있었는데 다행이도 PhpSpreadsheet로 마이그레이션 하는 작업이 복잡하지 않아서 정말 다행이였다.
'개발' 카테고리의 다른 글
AWS에서 무료 클라우드 서버 사용하기 (0) | 2023.12.19 |
---|---|
가비아에서 도메인 구입하기 (0) | 2023.12.16 |
HTML & javascript ) 세로 슬라이드 만들기 (무한루프) (0) | 2022.05.20 |