PHPExcel 설치 편집하기

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

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

최신판 당신의 편집
1번째 줄: 1번째 줄:
{{테스트|CentOS, PHP 5.3.27, PHPExcel 1.8.0}}
{{작성중}}
;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.7.zip 압축해제


==설치==
==설치==
*서버의 [[/usr/share/php/vendor 폴더]]에 zip파일 업로드<ref>폴더가 없으면 만들어서 넣자.</ref>
*웹서버의 DOCUMENT_ROOT 폴더 아래에 PHPExcel 폴더 생성
<syntaxhighlight lang='console'>
*로컬 PHPExcel-1.7.7 폴더에 있는 Classes 폴더과 Tests 폴더를 방금 생성한 PHPExcel 폴더로 업로드
[root@zetawiki vendor]# ll PHPExcel_1.8.0_doc.zip
*브라우저에서 http://서버주소/PHPExcel/Tests/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 생성
*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>
 
==웹 테스트 (오류)==
*웹브라우저에서 http://서버주소/ex/phpexcel/phpexcel1.php 접속
*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>에게 해당 폴더의 쓰기 권한이 없기 때문에 오류가 발생한다.
브라우저에서 위 주소대로 접속해보니 다음과 같은 오류 메시지가 나온다.
<syntaxhighlight lang='console'>
<source lang='text'>
[root@zetawiki ~]# ps -ef | grep httpd | grep -v grep
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
root      1750    1  0 Jun13 ?        00:00:00 /usr/sbin/httpd
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
apache    6874  1750  0 Jun19 ?        00:03:56 /usr/sbin/httpd
</source>
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
</syntaxhighlight>
:→ 최초 구동은 root가 했지만, 실제로 사용자의 요청을 받아 PHP 명령어를 수행하는 계정은 apache이다.


<syntaxhighlight lang='console'>
01simple.php 소스코드를 살펴보니 다음 부분에서 오류가 발생하는 것을 알 수 있었다.
[root@zetawiki phpexcel]# ll /var/www/html/ex/phpexcel/ -d
<source lang='php'>
drwxr-xr-x 3 root root 4096 Aug 31 22:20 /var/www/html/ex/phpexcel/
$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
</syntaxhighlight>
</source>
:→ phpexcel 폴더의 퍼미션이 [[755]]이고, owner가 root이므로 apache 계정이 파일을 쓸 수 없는 상태이다.


<syntaxhighlight lang='console'>
==폴더 권한 조정==
[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/
</syntaxhighlight>
:→ phpexcel 폴더의 소유자를 apache로 바꾸었다.


==실행예시 (성공)==
==실행예시 (성공)==
* http://서버주소/ex/phpexcel/phpexcel1.php 다시 접속
<syntaxhighlight lang='text'>
Done...
</syntaxhighlight>
:→ 오류 없이 정상적으로 수행되었다.
*파일 생성 확인
<syntaxhighlight lang='console'>
[root@zetawiki phpexcel]# ll test.xlsx
-rw-r--r-- 1 apache apache 6570 Aug 31 22:33 test.xlsx
</syntaxhighlight>
*http://서버주소/ex/phpexcel/test.xlsx 다운로드하여 내용 확인
==같이 보기==
*[[PHPExcel 서버에 저장하지 않고 다운로드시키기]]
*[[PHPExcel HTML 테이블을 엑셀파일로 저장하기]]
*[[Fatal error: Class 'XMLWriter' not found]]
*[[PHPWord 설치]]
==주석==
<references/>


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

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

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

이 문서에서 사용한 틀: