>  기사  >  백엔드 개발  >  PHP 내보내기 CSV 파일

PHP 내보내기 CSV 파일

WBOY
WBOY원래의
2016-08-08 09:26:411116검색

재인쇄: http://blog.csdn.net/huyanping/article/details/7068356

데이터베이스에서 Excel 파일로 데이터를 내보내야 하는 경우가 종종 있습니다. PHPExcel과 같은 일부 오픈 소스 라이브러리를 사용하면 실제로 구현하기가 더 쉽지만 대량의 데이터에 대한 지원은 매우 열악하며 PHP 메모리 사용량의 상한에 도달하기 쉽습니다. 여기서의 방법은 fputcsv를 이용하여 CSV 파일을 작성하고, 엑셀 파일을 브라우저에 직접 출력하는 방법입니다.
 
 //Excel 파일 헤더를 출력하고, user.csv를 원하는 파일 이름으로 바꾸면 됩니다
header('Content-Type: application/vnd.ms-excel');
header ( 'Content-Disposition: attachment;filename="user.csv"');
header('Cache-Control: max-age=0');
// 데이터베이스에서 데이터를 가져옵니다. 메모리를 절약하세요. 데이터를 한 번에 메모리에 넣지 말고 핸들에서 한 줄씩 읽어보세요.
$sql = 'select * from tbl where ...'; $stmt = $db- >query($sql);
// PHP 파일 핸들을 엽니다. php://output은 브라우저에 직접 출력한다는 의미입니다.
$fp = fopen('php://output', 'a') ;
// 엑셀 컬럼 이름 정보 출력
$head = array('이름', '성별', '나이', '이메일', '전화', '...');
foreach ($head as $i => $ v) {
  // CSV Excel은 GBK 인코딩을 지원하므로 변환해야 합니다. 그렇지 않으면 코드가 깨집니다.
$head[$i] = iconv('utf-8 ', 'gbk', $v);
}
 //fputcsv를 통해 파일 핸들에 데이터 쓰기
 fputcsv($fp, $head);
 //Counter
 $cnt = 0;
 //$limit 라인마다 너무 크지도 작지도 않게 출력 버퍼를 새로 고칩니다.
 $limit = 100000;
 // 메모리 낭비 없이 한 줄씩 데이터를 가져옵니다
 while ($row = $stmt->fetch( Zend_Db::FETCH_NUM)) {
 $cnt ++;
 if ($limit == $cnt) { //다음으로 인한 문제를 방지하기 위해 출력 버퍼를 새로 고칩니다. 데이터가 너무 많습니다
 ob_flush();
플러시();
$cnt = 0;
}
foreach ($row as $i => $v) {
$ row[$i] = iconv('utf- 8', 'gbk', $v);
 }
fputcsv($fp, $row);
 }

위 내용을 포함하여 PHP로 CSV 파일을 내보내는 방법을 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.