본문 바로가기

php

php header text파일 다운로드

반응형

파일을 따로 서버에 생성하지않고 즉시 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