PHPExcel 설치 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
1번째 줄: 1번째 줄:
{{테스트|CentOS, PHP 5.3.27, PHPExcel 1.8.0}}
{{테스트|리눅스, PHP 5.2.10, PHPExcel 1.7.7}}
;PHPExcel 설치
;PHPExcel 설치
;PHPExcel 시작하기
;PHPExcel 시작하기
[[파일:PHPExcel.png]]


==다운로드==
==다운로드==
*http://phpexcel.codeplex.com/ 접속
*http://phpexcel.codeplex.com/ 접속
*[Download] 클릭하여 PHPExcel_1.8.0_doc.zip 다운로드(5,284 KB)
*[Download] 클릭하여 다운로드
*PHPExcel-1.7.9.zip 압축해제
:내부에 Classes, Documentation, Examples 폴더가 있다.


==설치==
==설치==
*서버의 [[/usr/share/php/vendor 폴더]]에 zip파일 업로드<ref>폴더가 없으면 만들어서 넣자.</ref>
*웹서버의 DOCUMENT_ROOT 폴더 아래에 PHPExcel 폴더 생성
<syntaxhighlight lang='console'>
*Classes, Documentation, Examples 폴더를 방금 생성한 PHPExcel 폴더로 업로드
[root@zetawiki vendor]# ll PHPExcel_1.8.0_doc.zip
*웹브라우저에서 http://서버주소/PHPExcel/Examples/01simple.php 접속
-rw-r--r-- 1 root root 5410110 Aug 20 15:45 PHPExcel_1.8.0_doc.zip
</syntaxhighlight>
*하위폴더 만들고 압축해제
<syntaxhighlight lang='console'>
[root@zetawiki vendor]# mkdir PHPExcel
[root@zetawiki vendor]# unzip PHPExcel_1.8.0_doc.zip -dPHPExcel
Archive: PHPExcel_1.8.0_doc.zip
  inflating: PHPExcel/changelog.txt 
  inflating: PHPExcel/install.txt   
  inflating: PHPExcel/license.txt   
... (생략)
  inflating: PHPExcel/Examples/templates/36writeLineChart1.xlsx 
  inflating: PHPExcel/Examples/XMLReader.php
  inflating: PHPExcel/Examples/XMLTest.xml
</syntaxhighlight>


==쉘 테스트==
==실행예시 (오류)==
*[[DOCUMENT_ROOT 폴더]]로 이동
브라우저에서 위 주소대로 접속해보니 다음과 같은 오류 메시지가 나온다.
*실습용 폴더 ex/phpexcel 생성
<source lang='text'>
*phpexcel1.php 파일 작성
08:40:06 Create new PHPExcel object 08:40:06 Set document properties 08:40:06 Add some data 08:40:06 Rename worksheet 08:40:06 Write to Excel2007 format
<syntaxhighlight lang='console'>
Fatal error: Uncaught exception 'Exception' with message 'Could not close zip file /var/www/html/PHPExcel/Tests/01simple.xlsx.' in /var/www/html/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php:378 Stack trace: #0 /var/www/html/PHPExcel/Tests/01simple.php(77): PHPExcel_Writer_Excel2007->save('/var/www/html...') #1 {main} thrown in /var/www/html/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php on line 378
[root@zetawiki vendor]# cd /var/www/html
</source>
[root@zetawiki html]# mkdir -p ex/phpexcel
[root@zetawiki html]# cd ex/phpexcel
[root@zetawiki phpexcel]# pwd
/var/www/html/ex/phpexcel
[root@zetawiki phpexcel]# vi phpexcel1.php
</syntaxhighlight>
<syntaxhighlight lang='php'>
<?php
include 'vendor/PHPExcel/Classes/PHPExcel.php';
function column_char($i) { return chr( 65 + $i ); }
// 자료 생성
$headers = array('ID','부서ID','이름','이메일','나이');
$rows = array(
array(1, 1, '한놈', 'maarten@example.com', 24),
array(2, 1, '두시기', 'paul@example.com', 30),
array(3, 2, '석삼', 'bill.a@example.com', 29),
array(4, 3, '석삼', 'bill.g@example.com', 28),
);
$data = array_merge(array($headers), $rows);
// 스타일 지정
$widths = array(6, 8, 8, 30, 6);
$header_bgcolor = 'FFABCDEF';
// 엑셀 생성
$last_char = column_char( count($headers) - 1 );
$excel = new PHPExcel();
$excel->setActiveSheetIndex(0)->getStyle( "A1:${last_char}1" )->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB($header_bgcolor);
$excel->setActiveSheetIndex(0)->getStyle( "A:$last_char" )->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER)->setWrapText(true);
foreach($widths as $i => $w) $excel->setActiveSheetIndex(0)->getColumnDimension( column_char($i) )->setWidth($w);
$excel->getActiveSheet()->fromArray($data,NULL,'A1');
$writer = PHPExcel_IOFactory::createWriter($excel, 'Excel2007');
$writer->save('test.xlsx');
echo "Done...\n";
</syntaxhighlight>
*쉘에서 실행하고 test.xlsx이 생성되었는지 확인
<syntaxhighlight lang='console'>
[root@zetawiki phpexcel]# php phpexcel1.php
Done...
[root@zetawiki phpexcel]# ll test.xlsx
-rw-r--r-- 1 root root 6571 Aug 31 22:16 test.xlsx
</syntaxhighlight>
*test.xlsx 파일을 내려받아 내용 확인
*다음의 웹 테스트를 위해 test.xlsx 삭제
<syntaxhighlight lang='console'>
[root@zetawiki phpexcel]# rm -f test.xlsx
</syntaxhighlight>


==웹 테스트 (오류)==
01simple.php 소스코드를 살펴보니 다음 부분에서 오류가 발생하는 것을 알 수 있었다.
*웹브라우저에서 http://서버주소/ex/phpexcel/phpexcel1.php 접속
<source lang='php'>
*Done... 이라는 문구가 뜨지 않는다.
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
*[[아파치 오류 로그]]를 확인해보면...
</source>
<syntaxhighlight lang='console'>
:→ 01simple.php이라는 파일명을 변형하여 01simple.xlsx라는 파일로 저장한다.
[root@zetawiki phpexcel]# cat /var/log/httpd/error_log | grep phpexcel1
[Sat Jun 20 21:23:44 2015] [error] [client 127.0.0.1] PHP Fatal error:  Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file test.xlsx.' in /usr/share/php/vendor/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php:348\nStack trace:\n#0 /var/www/html/ex/phpexcel/phpexcel1.php(28): PHPExcel_Writer_Excel2007->save('test.xlsx')\n#1 {main}\n  thrown in /usr/share/php/vendor/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php on line 348
</syntaxhighlight>


==오류 해결 (권한 조정)==
==폴더 권한 조정==
[[httpd]]<ref>보다 정확하게는 httpd를 실행한 리눅스 계정</ref>에게 해당 폴더의 쓰기 권한이 없기 때문에 오류가 발생한다.
[[httpd]]<ref>보다 정확하게는 httpd를 실행한 리눅스 계정</ref>에게 해당 폴더의 쓰기 권한이 없기 때문에 오류가 발생한다.
<syntaxhighlight lang='console'>
<source lang='dos'>
[root@zetawiki ~]# ps -ef | grep httpd | grep -v grep
[root@jmnote ~]# ps -ef | grep httpd | grep -v grep
root      1750    1  0 Jun13 ?        00:00:00 /usr/sbin/httpd
root      1750    1  0 Jun13 ?        00:00:00 /usr/sbin/httpd
apache    6874  1750  0 Jun19 ?        00:03:56 /usr/sbin/httpd
apache    6874  1750  0 Jun19 ?        00:03:56 /usr/sbin/httpd
111번째 줄: 44번째 줄:
apache  25934  1750  0 Jun20 ?        00:02:20 /usr/sbin/httpd
apache  25934  1750  0 Jun20 ?        00:02:20 /usr/sbin/httpd
apache  29616  1750  0 Jun18 ?        00:04:32 /usr/sbin/httpd
apache  29616  1750  0 Jun18 ?        00:04:32 /usr/sbin/httpd
</syntaxhighlight>
</source>
:→ 최초 구동은 root가 했지만, 실제로 사용자의 요청을 받아 PHP 명령어를 수행하는 계정은 apache이다.
:→ 최초 구동은 root가 했지만, 실제로 사용자의 요청을 받아 PHP 명령어를 수행하는 계정은 apache이다.


<syntaxhighlight lang='console'>
<source lang='dos'>
[root@zetawiki phpexcel]# ll /var/www/html/ex/phpexcel/ -d
[root@jmnote ~]# cd /var/www/html/PHPExcel
drwxr-xr-x 3 root root 4096 Aug 31 22:20 /var/www/html/ex/phpexcel/
[root@jmnote PHPExcel]# ll
</syntaxhighlight>
total 8
:→ phpexcel 폴더의 퍼미션이 [[755]]이고, owner가 root이므로 apache 계정이 파일을 쓸 수 없는 상태이다.
drwxr-xr-x 3 root root 4096 Jun 22 16:39 Classes
drwxr-xr-x 4 root root 4096 Jun 22 16:40 Examples
</source>
:→ Examples 폴더의 퍼미션이 [[755]]이고, owner가 root이므로 apache 계정을 파일을 쓸 수 없는 상태이다.


<syntaxhighlight lang='console'>
<source lang='dos'>
[root@zetawiki phpexcel]# chown apache:apache /var/www/html/ex/phpexcel/
[root@jmnote PHPExcel]# chown apache:apache Tests
[root@zetawiki phpexcel]# ll /var/www/html/ex/phpexcel/ -d
</source>
drwxr-xr-x 3 apache apache 4096 Aug 31 22:20 /var/www/html/ex/phpexcel/
:→ Examples 폴더의 소유자를 apache로 바꾸었다.
</syntaxhighlight>
:→ phpexcel 폴더의 소유자를 apache로 바꾸었다.


==실행예시 (성공)==
==실행예시 (성공)==
* http://서버주소/ex/phpexcel/phpexcel1.php 다시 접속
이제 브라우저로 다시 접속(또는 새로고침)해보자.
<syntaxhighlight lang='text'>
<source lang='text'>
Done...
15:58:26 Create new PHPExcel object
</syntaxhighlight>
15:58:26 Set document properties
15:58:26 Add some data
15:58:26 Rename worksheet
15:58:26 Write to Excel2007 format
15:58:26 File written to 01simple.xlsx
Call time to write Workbook was 0.0275 seconds
15:58:26 Current memory usage: 7.5 MB
15:58:26 Write to Excel5 format
15:58:26 File written to 01simple.xls
Call time to write Workbook was 0.0347 seconds
15:58:26 Current memory usage: 10.5 MB
15:58:26 Peak memory usage: 10.5 MB
15:58:26 Done writing files
Files have been created in /web/jmnote/www/php/PHPExcel/Examples
</source>
:→ 오류 없이 정상적으로 수행되었다.
:→ 오류 없이 정상적으로 수행되었다.


*파일 생성 확인
다음과 같이 xlsx파일이 생성되었음을 확인할 수 있다.
<syntaxhighlight lang='console'>
<source lang='dos'>
[root@zetawiki phpexcel]# ll test.xlsx
[root@jmnote PHPExcel]# cd Tests
-rw-r--r-- 1 apache apache 6570 Aug 31 22:33 test.xlsx
[root@svn0 Examples]# ll 01simple.*
</syntaxhighlight>
-rw-r--r-- 1 root  root  4412 Oct 16 23:50 01simple.php
*http://서버주소/ex/phpexcel/test.xlsx 다운로드하여 내용 확인
-rw-r--r-- 1 apache apache 4608 Oct 16 23:58 01simple.xls
-rw-r--r-- 1 apache apache 6371 Oct 16 23:58 01simple.xlsx
</source>


==같이 보기==
==결과물==
*[[PHPExcel 서버에 저장하지 않고 다운로드시키기]]
01simple.xlsx을 내려받아 열어보니 내용은 다음과 같다.
*[[PHPExcel HTML 테이블을 엑셀파일로 저장하기]]
{{엑셀 행| 1 | 2 | 3 | 4 | 5}}
*[[Fatal error: Class 'XMLWriter' not found]]
{{엑셀 열| A | B | C | D}}
*[[PHPWord 설치]]
{{엑셀 데이터
| {{!}} Hello {{!!}} {{!!}} Hello {{!!}}
| {{!}} {{!!}} world! {{!!}} {{!!}} world!
| {{!}} {{!!}} {{!!}} {{!!}}
| {{!}} Miscellaneous glyphs {{!!}} {{!!}} {{!!}}
| {{!}} éàèùâêîôûëïüÿäöüç {{!!}} {{!!}} {{!!}}
}}


==주석==
==주석==
<references/>
<references/>


[[분류: PHPExcel]]
[[분류: PHP]]
[[분류: CodePlex]]
[[분류: 엑셀]]

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)

이 문서에서 사용한 틀: