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

78번째 줄: 78번째 줄:
==웹 테스트 (오류)==
==웹 테스트 (오류)==
*웹브라우저에서 http://서버주소/phpexcel/phpexcel1.php 접속
*웹브라우저에서 http://서버주소/phpexcel/phpexcel1.php 접속
{{인용문|
*Done... 이라는 문구가 뜨지 않는다.
Fatal error: Uncaught exception 'PHPExcel_Writer_Exception' with message 'Could not close zip file /var/www/html/PHPExcel/test.xlsx.' in /var/www/php_lib/PHPExcel/PHPExcel/Writer/Excel2007.php:399 Stack trace: #0 /var/www/html/PHPExcel/test.php(28): PHPExcel_Writer_Excel2007->save('/var/www/html/P...') #1 {main} thrown in /var/www/php_lib/PHPExcel/PHPExcel/Writer/Excel2007.php on line 399
*[[아파치 오류 로그]]를 확인해보면...
}}
<source lang='cli'>
[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/PHPExcel/Writer/Excel2007.php:348\nStack trace:\n#0 /var/www/html/php/phpexcel/phpexcel1.php(28): PHPExcel_Writer_Excel2007->save('test.xlsx')\n#1 {main}\n  thrown in /usr/share/php/vendor/PHPExcel/PHPExcel/Writer/Excel2007.php on line 348
</source>


==오류 해결 (권한 조정)==
==오류 해결 (권한 조정)==

2015년 6월 20일 (토) 21:25 판

<img src='http://upload.wikimedia.org/wikipedia/commons/thumb/a/a2/X_mark.svg/32px-X_mark.svg.png'> 이 문서는 더 이상 지원되지 않는 기능을 다루고 있습니다.
PHPExcel 설치
PHPExcel 시작하기

<img src='http://download-codeplex.sec.s-msft.com/Download?ProjectName=phpexcel&DownloadId=65397&Build=20798' width='150px' />

1 다운로드

내부에 Classes, Documentation, Examples 폴더가 있다.

2 설치

[root@zetawiki vendor]# ll | grep Classes
drwxr-xr-x 3 root root 4096 Aug 31 21:30 Classes
[root@zetawiki vendor]# mv Classes/ PHPExcel
[root@zetawiki vendor]# ll | grep PHPExcel
drwxr-xr-x 3 root root 4096 Aug 31 21:30 PHPExcel

3 쉘 테스트

  • DOCUMENT_ROOT 폴더로 이동
  • php/phpexcel 폴더 생성하고 그 아래에 phpexcel1.php 파일 작성
[root@zetawiki vendor]# cd /var/www/html
[root@zetawiki html]# mkdir -p php/phpexcel
[root@zetawiki html]# cd php/phpexcel
[root@zetawiki phpexcel]# vi phpexcel1.php
<?php
require_once '/usr/share/php/vendor/PHPExcel/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('/var/www/html/PHPExcel/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/PHPExcel/Writer/Excel2007.php:348\nStack trace:\n#0 /var/www/html/php/phpexcel/phpexcel1.php(28): PHPExcel_Writer_Excel2007->save('test.xlsx')\n#1 {main}\n  thrown in /usr/share/php/vendor/PHPExcel/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@hub PHPExcel]# ll /var/www/html/PHPExcel/ -d
drwxr-xr-x 3 root root 4096 Aug 31 22:20 /var/www/html/PHPExcel/
→ PHPExcel 폴더의 퍼미션이 755이고, owner가 root이므로 apache 계정이 파일을 쓸 수 없는 상태이다.
[root@zetawiki PHPExcel]# chown apache:apache /var/www/html/PHPExcel/
[root@zetawiki PHPExcel]# ll /var/www/html/PHPExcel/ -d
drwxr-xr-x 3 apache apache 4096 Aug 31 22:20 /var/www/html/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 }}