최신판 |
당신의 편집 |
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 Tests |
| | </source> |
| | :→ Tests 폴더의 퍼미션이 [[755]]이고, owner가 root이므로 apache 계정을 파일을 쓸 수 없는 상태이다. |
|
| |
|
| <syntaxhighlight lang='console'> | | <source lang='dos'> |
| [root@zetawiki phpexcel]# chown apache:apache /var/www/html/ex/phpexcel/ | | [root@jmnote PHPExcel]# chmod 777 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/
| | :→ Tests 폴더의 권한을 [[777]]로 바꾸었다. |
| </syntaxhighlight> | |
| :→ phpexcel 폴더의 소유자를 apache로 바꾸었다. | |
|
| |
|
| ==실행예시 (성공)== | | ==실행예시 (성공)== |
| * http://서버주소/ex/phpexcel/phpexcel1.php 다시 접속
| | 이제 브라우저로 다시 접속(또는 새로고침)해보자. |
| <syntaxhighlight lang='text'> | | <source lang='text'> |
| Done...
| | 08:57:02 Create new PHPExcel object 08:57:02 Set document properties 08:57:02 Add some data 08:57:02 Rename worksheet 08:57:02 Write to Excel2007 format 08:57:02 File written to /web/jmnote/www/PHPExcel/Tests/01simple.xlsx 08:57:02 Peak memory usage: 6.75 MB 08:57:02 Done writing file |
| </syntaxhighlight> | | </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@jmnote Tests]# ll 01simple.xlsx |
| </syntaxhighlight> | | -rw-r--r-- 1 apache apache 6344 Jun 22 16:57 01simple.xlsx |
| *http://서버주소/ex/phpexcel/test.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]] | | [[분류: 엑셀]] |