카테고리 없음

[PHP] composer 없이 PHPExcel -> PHP SpreadSheet library 추가 및 대체 하기 (feat. autoloader.php파일)

Pearl_mini 2024. 4. 23. 15:08
728x90

 

 

회사에서 php로 만들어져있던 프로젝트를 유지보수하게 되었다.

php 5버전을 아직도 사용중이었는데, 지금 8.3.1까지 나온 상황이고 기존 7버전까지도 점점 지원을 안하고 있기 때문에 보안문제도 있고 하여 php의 버전업그레이드가 필요했다.

그래서 php5에서 8.3.1 버전으로 변경 진행하면서 Library도 대체가 필요해졌다.

기존에 사용하던 PHPExcel 라이브러리가 현재(24.04월) 기준 php 7.0버전까지에서 실행이 된다고 하고 더 이상 지원이 안되기 때문에 다음 버전인 SpreadSheet를 사용하기로 했다. 물론 쓰던 그대로 사용해보고자 했으나 php를 8.3으로 업그레이드 하자 바로 엄청 에러를 때려맞았다... 수정해가면서 사용할 수도 있다고는 하던데 기왕 전반적으로 업그레이드 하는 김에 업그레이드 하기로 결정!! (하다가 조금 후회하기도 했음...) 

 

 

 Composer를 사용하고싶어서 엄청나게 삽질을 했으나, 회사 네트워크 보안때문인지 Open SSL문제로 막혀서 Composer 없이 도전해보았다!!

 

 


 

먼저, PHP Excel 대체할 PHP SpreadSheet 라이브러리를 다운로드해야한다.

https://github.com/PHPOffice/PhpSpreadsheet?tab=readme-ov-file

 

GitHub - PHPOffice/PhpSpreadsheet: A pure PHP library for reading and writing spreadsheet files

A pure PHP library for reading and writing spreadsheet files - PHPOffice/PhpSpreadsheet

github.com

위주소로 가면 소스를 받을수 있는데, 가장 최신버전은 2.0.0버전이어서 이걸로 받았다.

PhpSpreadSheet 관련 전체 파일들을 Zip파일로 다운받고 필요한 내용들을 사용하면 된다. 

 

 

아래는 ZipStream-PHP 라이브러리를 다운받을 수 있는 링크이다.

https://github.com/maennchen/ZipStream-PHP/tree/2.0.0#upgrade-to-version-200

 

GitHub - maennchen/ZipStream-PHP: :floppy_disk: PHP ZIP Streaming Library

:floppy_disk: PHP ZIP Streaming Library. Contribute to maennchen/ZipStream-PHP development by creating an account on GitHub.

github.com

요거는 최신버전이 3.1.0 이어서 이걸로 다운로드!!

 

 

 

라이브러리를 사용하고자 하는 프로젝트의 루트위치에 lib 폴더를 만들고 그 안에 폴더를 다 옮겨줬다.

(lib가 됐든 vendor 가 됐든 폴더 명은 관련없음. Composer에서 관리할때는 vendor 폴더로 관리한다고 한다.)

 

 

위폴더 구조에서 Kendo는 기존에 있던 lib였고, Kendo 제외 PhpOffice, Psr, ZipStream 폴더의 파일은 다운받아서 넣어줬다.

폴더 구조는 캡쳐본처럼 만들어주면 된다.

 

PhpOffice내부는

 

그리고 나머지도 이런 구조로 세팅했다.

 

lib 폴더안에 autoloader.php파일이 중요한데, 이 파일이 모든 라이브러리파일을 자동으로 로드해주는 역할을 해줘야해서 잘 작성해야되고! 라이브러리를 사용하려는 곳에서 이 autoloader.php파일만 require_once 해서 사용하면 된다.

 

 

 autoloader.php파일

<?php
	spl_autoload_register(function ($class_name) {
		$classPath = str_replace('\\', DIRECTORY_SEPARATOR, $class_name);
		$classFile = __DIR__ . DIRECTORY_SEPARATOR . $classPath . '.php';
		if (file_exists($classFile)) {
				require_once($classFile);
		} else {
				error_log("Failed to load class: $classFile");
		}
	});

 

 

이제사용하려는 파일에서 아래캡쳐본처럼 정의하고 사용하시면 됩니다.

원래 사용했던게 PHPExcel.php파일이었고 autoloader.php로 바꾸어주었다.

호출하고자 하는 php 파일 위치가 루트에 있지않고 어떤 폴더안에 들어가있기 때문에 나의 경우는 경로가 ../lib로 시작하고있는데 루트위치에 있는 파일에서 사용하시려면 아시겠지만 lib/autoloader.php으로 선언해주시면 됩니다.

 

 


 

 

아래에 다른 폴더 라이브러리들을 다운받거나 참고한 링크이므로 참고하면 됩니다.

 

 

* Psr/Http/Message 내부의 StreamInterface.php 파일 다운받는 주소

https://github.com/php-fig/http-message

 

GitHub - php-fig/http-message: The purpose of this PSR is to provide a set of common interfaces for HTTP messages as described i

The purpose of this PSR is to provide a set of common interfaces for HTTP messages as described in RFC 7230 and RFC 7231 - php-fig/http-message

github.com

 

 

* Psr/SimpleCache 파일 다운받는 주소

https://github.com/YoloZoloo/PhpSpreadSheet

 

GitHub - YoloZoloo/PhpSpreadSheet: This is a copy of PhpSpreadSheet that will work without need of Composer

This is a copy of PhpSpreadSheet that will work without need of Composer - YoloZoloo/PhpSpreadSheet

github.com

-> 폴더는 AnyFolder안에보면 PhpOffice, Psr, MyCLabs, ZipStream 까지 총 4개의 폴더가 있다. 폴더 구조를 참고했고 Psr폴더 내부도 참고했다. 테스트해보면 MyCLabs는 없어도 되는 것 같아서 참고하지 않음.

 

 

 

 

다음 포스팅은 PHPExcel 에서 Spreadsheet로 변경된 문법등에 대해 기록할 예정이다.

 

 

 

 

 

 

 

 

 

 

 

728x90