"PHPExcel 설치"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-</source> +</syntaxhighlight>, -<source +<syntaxhighlight ))
 
(사용자 2명의 중간 판 80개는 보이지 않습니다)
1번째 줄: 1번째 줄:
{{테스트|리눅스, PHP 5.2.10, PHPExcel 1.7.7}}
{{테스트|CentOS, PHP 5.3.27, PHPExcel 1.8.0}}
;PHPExcel 설치
;PHPExcel 설치
;PHPExcel 시작하기
;PHPExcel 시작하기
[[파일:PHPExcel.png]]


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


==설치==
==설치==
*웹서버의 DOCUMENT_ROOT 폴더 아래에 PHPExcel 폴더 생성
*서버의 [[/usr/share/php/vendor 폴더]]에 zip파일 업로드<ref>폴더가 없으면 만들어서 넣자.</ref>
*Classes, Documentation, Examples 폴더를 방금 생성한 PHPExcel 폴더로 업로드
<syntaxhighlight lang='console'>
*웹브라우저에서 http://서버주소/PHPExcel/Examples/01simple.php 접속
[root@zetawiki vendor]# ll PHPExcel_1.8.0_doc.zip
 
-rw-r--r-- 1 root root 5410110 Aug 20 15:45 PHPExcel_1.8.0_doc.zip
==실행예시 (오류)==
</syntaxhighlight>
브라우저에서 위 주소대로 접속해보니 다음과 같은 오류 메시지가 나온다.
*하위폴더 만들고 압축해제
<source lang='text'>
<syntaxhighlight lang='console'>
16:00:25 Create new PHPExcel object
[root@zetawiki vendor]# mkdir PHPExcel
16:00:25 Set document properties
[root@zetawiki vendor]# unzip PHPExcel_1.8.0_doc.zip -dPHPExcel
16:00:25 Add some data
Archive: PHPExcel_1.8.0_doc.zip
16:00:25 Rename worksheet
  inflating: PHPExcel/changelog.txt 
16:00:25 Write to Excel2007 format
  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>


Warning: unlink(/var/www/html/PHPExcel/Examples/01simple.xlsx) [function.unlink]: Permission denied in /var/www/html/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php on line 214
==쉘 테스트==
*[[DOCUMENT_ROOT 폴더]]로 이동
*실습용 폴더 ex/phpexcel 생성
*phpexcel1.php 파일 작성
<syntaxhighlight lang='console'>
[root@zetawiki vendor]# cd /var/www/html
[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>


Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file /var/www/html/PHPExcel/Examples/01simple.xlsx.' in /var/www/html/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php:348 Stack trace: #0 /var/www/html/PHPExcel/Examples/01simple.php(88): PHPExcel_Writer_Excel2007->save('/var/www/html/P...') #1 {main} thrown in /var/www/html/PHPExcel/Classes/PHPExcel/Writer/Excel2007.php on line 348
==웹 테스트 (오류)==
</source>
*웹브라우저에서 http://서버주소/ex/phpexcel/phpexcel1.php 접속
:→  Permission denied 가 나왔다. Examples 폴더에 엑셀 파일을 저장하려는 데 권한이 없는 것이다.
*Done... 이라는 문구가 뜨지 않는다.
*[[아파치 오류 로그]]를 확인해보면...
<syntaxhighlight lang='console'>
[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>에게 해당 폴더의 쓰기 권한이 없기 때문에 오류가 발생한다.
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote ~]# ps -ef | grep httpd | grep -v grep
[root@zetawiki ~]# 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
46번째 줄: 111번째 줄:
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
</source>
</syntaxhighlight>
:→ 최초 구동은 root가 했지만, 실제로 사용자의 요청을 받아 PHP 명령어를 수행하는 계정은 apache이다.
:→ 최초 구동은 root가 했지만, 실제로 사용자의 요청을 받아 PHP 명령어를 수행하는 계정은 apache이다.


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


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


==실행예시 (성공)==
==실행예시 (성공)==
이제 브라우저로 다시 접속(또는 새로고침)해보자.
* http://서버주소/ex/phpexcel/phpexcel1.php 다시 접속
<source lang='text'>
<syntaxhighlight lang='text'>
15:58:26 Create new PHPExcel object
Done...
15:58:26 Set document properties
</syntaxhighlight>
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파일이 생성되었음을 확인할 수 있다.
*파일 생성 확인
<source lang='dos'>
<syntaxhighlight lang='console'>
[root@jmnote PHPExcel]# cd Examples
[root@zetawiki phpexcel]# ll test.xlsx
[root@jmnote Examples]# ll 01simple.*
-rw-r--r-- 1 apache apache 6570 Aug 31 22:33 test.xlsx
-rw-r--r-- 1 root  root  4412 Oct 16 23:50 01simple.php
</syntaxhighlight>
-rw-r--r-- 1 apache apache 4608 Oct 16 23:58 01simple.xls
*http://서버주소/ex/phpexcel/test.xlsx 다운로드하여 내용 확인
-rw-r--r-- 1 apache apache 6371 Oct 16 23:58 01simple.xlsx
</source>


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


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


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

2020년 11월 2일 (월) 02:56 기준 최신판

PHPExcel 설치
PHPExcel 시작하기

PHPExcel.png

1 다운로드[ | ]

2 설치[ | ]

[root@zetawiki vendor]# ll PHPExcel_1.8.0_doc.zip 
-rw-r--r-- 1 root root 5410110 Aug 20 15:45 PHPExcel_1.8.0_doc.zip
  • 하위폴더 만들고 압축해제
[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

3 쉘 테스트[ | ]

[root@zetawiki vendor]# cd /var/www/html
[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
<?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";
  • 쉘에서 실행하고 test.xlsx이 생성되었는지 확인
[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
  • test.xlsx 파일을 내려받아 내용 확인
  • 다음의 웹 테스트를 위해 test.xlsx 삭제
[root@zetawiki phpexcel]# rm -f test.xlsx

4 웹 테스트 (오류)[ | ]

[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

5 오류 해결 (권한 조정)[ | ]

httpd[2]에게 해당 폴더의 쓰기 권한이 없기 때문에 오류가 발생한다.

[root@zetawiki ~]# ps -ef | grep httpd | grep -v grep
root      1750     1  0 Jun13 ?        00:00:00 /usr/sbin/httpd
apache    6874  1750  0 Jun19 ?        00:03:56 /usr/sbin/httpd
apache   18185  1750  0 08:29 ?        00:00:36 /usr/sbin/httpd
apache   18391  1750  0 08:48 ?        00:00:33 /usr/sbin/httpd
apache   18410  1750  0 08:49 ?        00:00:34 /usr/sbin/httpd
apache   18578  1750  0 09:09 ?        00:00:31 /usr/sbin/httpd
apache   18654  1750  0 09:11 ?        00:00:34 /usr/sbin/httpd
apache   20304  1750  0 11:41 ?        00:00:22 /usr/sbin/httpd
apache   20819  1750  0 12:12 ?        00:00:20 /usr/sbin/httpd
apache   22521  1750  0 14:48 ?        00:00:07 /usr/sbin/httpd
apache   24517  1750  0 Jun18 ?        00:04:58 /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
→ 최초 구동은 root가 했지만, 실제로 사용자의 요청을 받아 PHP 명령어를 수행하는 계정은 apache이다.
[root@zetawiki phpexcel]# ll /var/www/html/ex/phpexcel/ -d
drwxr-xr-x 3 root root 4096 Aug 31 22:20 /var/www/html/ex/phpexcel/
→ phpexcel 폴더의 퍼미션이 755이고, owner가 root이므로 apache 계정이 파일을 쓸 수 없는 상태이다.
[root@zetawiki phpexcel]# chown apache:apache /var/www/html/ex/phpexcel/
[root@zetawiki phpexcel]# ll /var/www/html/ex/phpexcel/ -d
drwxr-xr-x 3 apache apache 4096 Aug 31 22:20 /var/www/html/ex/phpexcel/
→ phpexcel 폴더의 소유자를 apache로 바꾸었다.

6 실행예시 (성공)[ | ]

Done...
→ 오류 없이 정상적으로 수행되었다.
  • 파일 생성 확인
[root@zetawiki phpexcel]# ll test.xlsx
-rw-r--r-- 1 apache apache 6570 Aug 31 22:33 test.xlsx

7 같이 보기[ | ]

8 주석[ | ]

  1. 폴더가 없으면 만들어서 넣자.
  2. 보다 정확하게는 httpd를 실행한 리눅스 계정
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}