html형식의 엑셀 다운로드를 만들경우.

PHP 웹 사이트에서 
현재 보이는 페이지를 엑셀로 다운 받게 해달라는 요청을 받는 경우가 꽤 있는데...
그 웹 페이지 안애서 DB접속하고 쿼리 날리는 비지니스 부분까지 다 있다면...
소스 복사해서 down_excel.php 만들지 말라. 병신같은 짓이다.
쿼리 바뀔 때마다 down_excel.php 도 같이 바꿔줘야하는 2중 작업이 생긴다.


대신 본 페이지 부분의 내용을 버퍼 캐시를 사용해서 내용을 잘라서 붙여 주는 방식으로 해서
즉, 현재 보이는 페이지를 후처리로 다운로드하게.

#참고로 이건 html을 확장자만 xls로 받을 경우 편하게 하기위한 방법이다.
(excel writer 같은걸 쓴다면 이미 DB관련 부분이 따로 빠져있겠지....)


#기본 소스 (down_excel.php)

<?
ob_start();

header( "Content-type: application/vnd.ms-excel" );
header( "Content-Disposition: attachment; filename={{다운로드 받을 파일명}}.xls" );

require({{웹에서보여지는 PHP파일}});

$cont = ob_get_contents();
ob_end_clean();


$cont = substr($cont,strpos($cont,'<!-- CONTENT TABLE -->')); //주석을 기준으로 잘라온다.
$cont = substr($cont,0,strpos($cont,'<!-- //CONTENT TABLE -->')+strlen('<!-- //CONTENT TABLE -->'));//주석을 기준으로 잘라온다.
$cont = preg_replace('/<input[^>]*>/i','',$cont); //input 태그 삭제.
echo $cont;
exit('<!-- END -->');
?>


# 웹에서보여지는 PHP파일 (view.php)

{{생략}}
<!-- CONTENT TABLE -->
<table>
<tr>
<td>....</td>
</tr>
{{생략}}
<tr>
<td>....</td>
</tr>
</table>
<!-- //CONTENT TABLE -->
{{생략}}



view.php를 get으로 불렸다면 똑같은 값(queryString)으로 down_excel.php 를 get으로 불러라
post라면 똑같은 post값으로 ... 

다운로드 버튼으로 밑의 소스를 사용하길 추천. 
<form action="down_excel.php">
<input type="submit" value="EXCEL 저장">
<? foreach($_POST as $k=>$v){ ?>
<input type="hidden" name="<?=htmlspecialchars($k)?>"  value="<?=htmlspecialchars($v)?>" >
<? } ?>
</form>


출력버퍼 속의 내용이 커질 경우 메모리 제한을 늘려보세요.
댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -
목록형 📷 갤러리형
제목
[기본형] HTML (with 부트스트랩5.3 , jquery 3.7, vue.js)
유용한 리눅스(LINUX) 명령어
[공지] 기술 게시판
3.31
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.10
4.11
4.12
4.13
4.14
4.15
4.16
4.18
4.19
4.20
4.21
4.22
4.23
4.24
4.25
4.26
4.27
4.28
4.29
4.30
5.1
5.2
5.3
5.4