반응형
PHP 에서 E-mail 전송을 지원해주는 여러 모듈들이 즐비하다.

많기도 참 많다.

근데!! 중요한건 이런 모듈들을 사용하기에는 너무 어렵고 복잡하다.

우연히 phpschool.net에서 좋은 소스를 발견하여 필요한 것만 사용하였다.

하지만 template을 이용한 방법은 추가되지 않았다.

그래서 이번기회에 다운받은 소스를 업그레이드 하여

나만의 모듈을 만들었다.

첨부한다. 필요한 사람들은 제발 댓글 달고 가져 가길 바란다.

smtp 주소까지 모두 적을 수 있으니,, ㅋㅋㅋ 아주 좋은 모듈 이다.




반응형

'Program > PHP' 카테고리의 다른 글

[ PHP 에서 DB결과 처음포인터 위치하기 ]  (0) 2010.08.28
[ JQuery Ajax + PHP 한글 처리문제 해결방법 ]  (0) 2010.07.20
PHP Excel Download Module  (21) 2010.06.22
[ PHP5 공통모듈 ]  (0) 2010.06.10
PHP - HttpRequest ( POST 방식 )  (0) 2010.06.09
반응형

PHP 에서 Excel Download 방법은 몇가지가 있다.

머 JSP 도 그리 차이는 없지만 젤 편한 방법이 MIME TYPE을 변경하는 일이다.


[1] MIME TYPE 변경방법

 header("Content-type: application/vnd.ms-excel; charset=UTF-8");

위와 같이 vnc.ms-excel MIME Type 을 사용하여 변경하는 방법 이 있지만, office 2007이 나온 뒤로는 그닥 좋은 방법으로 평가받지 못하는 것이 현실이다. 그 이유는 매번 파일을 열때마다 아래 그림과 같은 에러가 발생하기 때문이다.

==> 에러 그림


이런 이유로 이번 회사에서 사내 프로젝트시 excel file 제작은 인터넷을 검색하던중 MS-Excel Stream Handler 모듈을 발견하게 되었다.

[2] MS-Excel Stream Handler Module 다운로드 방법

예제 모듈 다운로드 사이트 :
http://www.phpclasses.org/package/1919-PHP-Stream-wrapper-to-read-and-write-MS-Excel-files.html

위 예제 사이트에 들어가서 회원가입 후 로그인 하면 MS 예제 파일을 다운받을 수 있다.

예제 파일은 현재 한글 처리가 안되어있을 뿐더라 header값에 값이 잘못 설정되어있다.

[ 다운받은 원본 ]


 require_once "excel.php";
$export_file = "xlsfile://tmp/example.xls";
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=\"" . basename($export_file) . "\"" );
header ("Content-Description: PHP/INTERBASE Generated Data" );
readfile($export_file);
exit;

header ("Cache-Control: no-cache, must-revalidate");  ==> 요기 부분이 문제의 line이다.

테스트 결과 firefox 와 크롬에서는 다운로드가 잘되는데 IE에서는 경로를 못찾는 문제가 생긴다.

그래서 저부분을 php.net에 있는 내용데로 바꾸어주었다.

header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");

저부분이 왜 저렇게 돼는지는 아직 원인을 모른다. 그래서 위키디피아에 검색해 보니 이런 글이 있다.

 IE에서는 Cache-Control:no-cache로 응답이 온 경우 local cache에 리소스를 저장하지 않으므로 해당 resource는 항상 일반 Request(Condtional-GET 하지 않음)로 요청하게 된다. 하지만 Firefox에서는 Cache-control:no-cache인 경우에도 page navigation(back/forward)를 위해 local cache에 저장한다. 이 경우 저장시에 브라우저가 만기일을 1970-01-01 09:00:00로 설정하며, 응답 헤더에 Last-Modified나 Etag가 존재할 경우에는 Condtional-GET이 발생하며, 없을 경우에는 일반 request를 하도록 되어 있다. 따라서 정말로 no-cache 한 동작을 하기 위해서는 응답 헤더에 Cache-control:no-cache를 추가할 뿐만 아니라 Last-modified와 Etag를 제거해야 한다.
                                                                        [위키디피아 발췌글]

추가적으로 한글 문제를 해결하기 위해 charset를 추가한다.

header ("Content-charset=euc-kr");

이제 바로 사용가능하도록 수정이 완료되었으니 최종 본을 살펴보자


  27 header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
 28 header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
 29 header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
 30 header ("Pragma: public");
 31 header ("Content-type: application/x-msexcel");
 32 header ("Content-Disposition: attachment; filename=\"" . basename($export_file) . "\"" );
 33 header ("Content-Description: PHP/INTERBASE Generated Data" );
 34 header ("Content-charset=euc-kr");
 35 ob_clean();
 36 flush();
 37 readfile($export_file);
 38 exit;


이렇게 변경하니 다운로드가 원활하게 됐다.


매번 다운받아 헤더값 을 다시 수정하기도  귀찮고 하니 한글이랑 IE에서 잘되는 샘플  파일을 첨부하도록 하겠다.

받아가는 놈들은 고맙다고 제발 댓글 달고 조회수좀 팍팍 올려주길 바란다.~~~


이상 성랑이의 PHP Excel 다운로드 강좌였음 ㅋㅋㅋ ^^

끝~~~~~~~~~~




반응형
반응형
맨날 ... 삽질해서 만들어놓으면,,,

소스날라가고 다시만들고가 겁나 짱나서

아싸리 만들어서 다시올림.ㅋㅋㅋ



반응형
반응형
오늘은 Java에서 URLConnection 과 같이 웹으로 직접 주소를 호출하는 방식인

HttpRequest방식에 대해 공부해 보겠다.

딱히~~~ Socket과는 별 차이가 없다..

하지만 Socket의 데이터 전송시 Header를 붙여준다는 의미밖에없으니 자세히 보길바란다.

소스를 바로 공개하겠다.

Class를 만들어 관리하였다.

걍 첨부파일봐라~




반응형

+ Recent posts