Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 옵G
- 제주도
- 옵티머스g
- C
- 프레임워크
- TiL
- upbit
- 옵지
- ubuntu
- Laravel
- Raspberry Pi
- 업비트
- 회고
- codeigniter
- 맥
- 라즈비안
- 우분투 20.04
- Ubuntu 20.04
- Selenium
- php
- 라즈베리파이
- 셀레니움
- 20.04
- MySQL
- 맛집
- 우분투
- FMS
- 코드이그나이터
- 옵티머스 g
- 라라벨
Archives
- Today
- Total
평범한 이야기들
[PHP] CSV 파일로 다운로드 받기 ( PHPExcel 메모리 문제) 본문
728x90
사용자 화면에서 DB의 데이터를 받기 위해서 PHPExcel를 사용했었는데 PHPExcel은 메모리 많이 잡아먹으면서 시간도 오래 걸리는 문제가 있습니다. 그래서 보통 아래와 같이 PHPExcel 사용 전에 선언하고 합니다.
<?php
ini_set('memory_limit','2048M');
set_time_limit(9999999);
// 아래는 PHPExcel를 이용해 엑셀 다운로드 로직
보통 해당 설정으로 어느 정도 커버가 가능했는데 10만 건을 다운받으면서 CloudFlare에서 Timeout 오류를 내기 시작했습니다. 그래서 PHPExcel에서 CSV 파일로 다운로드할 수 있게 수정을 했습니다.
<?php
function downloadArryToCSV($array, $filename = "export.csv", $separator = ",") {
// 메모리 이용 php://memory
// 또는 파일명 사용
$f = fopen('파일명', 'w');
foreach ($array as $line) {
fputcsv($f, $line, $separator);
}
fseek($f, 0);
header('Content-Type: application/csv; charset=euc-kr');
header('Content-Disposition: attachment; filename="' . $filename . '";');
fpassthru($f);
}
fputcsv : PHP에서 제공하는 함수로 배열을 이용해 CSV 파일을 만든다.
fpassthru : PHP에서 제공하는 함수로 리소스(파일) 이 끝날 때까지 열린 파일의 현재 위치로부터 모든 데이터를 출력 버퍼에 입력
이렇게 수정해서 10만 건 이상 되는 데이터 ROW를 CSV 파일로 다운로드 진행하게 되었습니다.
728x90
Comments