반응형
파일을 따로 서버에 생성하지않고 즉시 txt 파일로 다운로드 받게하는 코드다.
public function print_txt($data,$filename, $delimiter="\t"){
if( headers_sent() )
die('Headers Already Sent');
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
$path_parts = pathinfo($filename); //파일 확장자 가져오기용
$ext = strtolower($path_parts["extension"]);
switch ($ext)
{
case "pdf": $ctype="application/pdf"; break;
case "exe": $ctype="application/octet-stream"; break;
case "zip": $ctype="application/zip"; break;
case "doc": $ctype="application/msword"; break;
case "xls": $ctype="application/vnd.ms-excel"; break;
case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpg"; break;
default: $ctype="application/force-download";
}
header("Content-Disposition:attachment;filename={$filename}");
header("Content-Transfer-Encoding:binary");
header("Content-Type: $ctype");
header("Cache-Control:cache,must-revalidate");
header("Pragma:no-cache");
header("Expires:0");
// 글쓰기 시작
ob_start();
//이중배열 형태만 가능
//query->result() 형태만 txt다운로드 가능함
//공백 제거를 위해 is_file 형태로 아무 파일이나 체크 후 echo 시작
if (!empty($data)) {
$num=0;
foreach ($data as $entry){
//object 형태인경우 array 로 변환
if (is_object($entry)) {
$arr_data = get_object_vars($entry);
}else{
$arr_data = $entry;
}
$key_contents = "";
$value_contents = "";
foreach ($arr_data as $key=>$value){
if($num==0){
$key_contents .= $key . $delimiter;
}
$value_contents .= $value . $delimiter;
}
if($num==0){
$num++;
$key_contents = substr($key_contents,0,-1);
echo $key_contents."\r\n";
}
$value_contents = substr($value_contents,0,-1);
echo $value_contents."\r\n";
}
} else {
echo "No records found";
}
// 마무리
ob_end_flush();
}
사용법은 아래와 같다
$result = $this->lib->print_txt($data,"파일이름");
$data 는 배열형태여야 하며
ex) $data['f1'] = 'test'
마지막 파라미터인 delimiter을 작성을 안하게 되면 기본적으로 탭으로 구분된다.
get 방식으로 호출하여 서버에 파일을 따로 저장하지 않고 사용자가 바로 다운로드 할 수 있게 해준다.
반응형
'php' 카테고리의 다른 글
curl 대체 코드 (1) | 2024.10.07 |
---|---|
php empty (0) | 2024.04.26 |