php
  • download
  • export
  • 2011-11-24 3 views 0 likes 
    0

    링크 클릭시 CSV 파일을 생성했습니다. 하지만 브라우저에서 파일을 다운로드 할 수 없습니다.강제로 PHP를 사용하여 브라우저에서 파일을 다운로드

    여기 내 코드입니다.

    $filename="Payment_Received.csv"; 
    header('Content-Description: File Transfer'); 
    header('Content-Disposition: attachment; filename=' . $filename); 
    header('Content-Type: text/csv; charset=UTF-8'); 
    print_r($output); 
    
    // output is string comma separated if i remove die and then execute 
    // then csv append html data also, so I keep die 
    
    ob_flush(); 
    die(); 
    

    CSV가 다운로드되지만 내용이 없습니다.

    도와주세요.

    +0

    ? 문제를 해결하는 코드가 필요합니다. – Justin808

    +0

    이 게시물을 다시 redit하고 작동하지 않는 실제 코드를 게시하십시오. 또한 "가상의"숫자가 아닌이 경우, 사용중인 쿼리에 count (*)를 사용하여 데이터베이스에서 돌아 오는 행 수를 표시하십시오. – awm

    답변

    0

    기능은 브라우저에서 다운로드에게 파일을 강제로.

    function output_file($file, $name, $mime_type='') 
    { 
    /* 
    This function takes a path to a file to output ($file), 
    the filename that the browser will see ($name) and 
    the MIME type of the file ($mime_type, optional). 
    
    If you want to do something on download abort/finish, 
    register_shutdown_function('function_name'); 
    */ 
    if(!is_readable($file)) die('File not found or inaccessible!'); 
    
    $size = filesize($file); 
    $name = rawurldecode($name); 
    
    /* Figure out the MIME type (if not specified) */ 
    $known_mime_types=array(
        "pdf" => "application/pdf", 
        "txt" => "text/plain", 
        "html" => "text/html", 
        "htm" => "text/html", 
        "exe" => "application/octet-stream", 
        "zip" => "application/zip", 
        "doc" => "application/msword", 
        "xls" => "application/vnd.ms-excel", 
        "ppt" => "application/vnd.ms-powerpoint", 
        "gif" => "image/gif", 
        "png" => "image/png", 
        "jpeg"=> "image/jpg", 
        "jpg" => "image/jpg", 
        "php" => "text/plain" 
    ); 
    
    if($mime_type==''){ 
        $file_extension = strtolower(substr(strrchr($file,"."),1)); 
        if(array_key_exists($file_extension, $known_mime_types)){ 
         $mime_type=$known_mime_types[$file_extension]; 
        } else { 
         $mime_type="application/force-download"; 
        }; 
    }; 
    
    @ob_end_clean(); //turn off output buffering to decrease cpu usage 
    
    // required for IE, otherwise Content-Disposition may be ignored 
    if(ini_get('zlib.output_compression')) 
        ini_set('zlib.output_compression', 'Off'); 
    
    header('Content-Type: ' . $mime_type); 
    header('Content-Disposition: attachment; filename="'.$name.'"'); 
    header("Content-Transfer-Encoding: binary"); 
    header('Accept-Ranges: bytes'); 
    
    /* The three lines below basically make the 
        download non-cacheable */ 
    header("Cache-control: private"); 
    header('Pragma: private'); 
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
    
    // multipart-download and download resuming support 
    if(isset($_SERVER['HTTP_RANGE'])) 
    { 
        list($a, $range) = explode("=",$_SERVER['HTTP_RANGE'],2); 
        list($range) = explode(",",$range,2); 
        list($range, $range_end) = explode("-", $range); 
        $range=intval($range); 
        if(!$range_end) { 
         $range_end=$size-1; 
        } else { 
         $range_end=intval($range_end); 
        } 
    
        $new_length = $range_end-$range+1; 
        header("HTTP/1.1 206 Partial Content"); 
        header("Content-Length: $new_length"); 
        header("Content-Range: bytes $range-$range_end/$size"); 
    } else { 
        $new_length=$size; 
        header("Content-Length: ".$size); 
    } 
    
    /* output the file itself */ 
    $chunksize = 1*(1024*1024); //you may want to change this 
    $bytes_send = 0; 
    if ($file = fopen($file, 'r')) 
    { 
        if(isset($_SERVER['HTTP_RANGE'])) 
        fseek($file, $range); 
    
        while(!feof($file) && 
         (!connection_aborted()) && 
         ($bytes_send<$new_length) 
         ) 
        { 
         $buffer = fread($file, $chunksize); 
         print($buffer); //echo($buffer); // is also possible 
         flush(); 
         $bytes_send += strlen($buffer); 
        } 
    fclose($file); 
    } else die('Error - can not open file.'); 
    
    die(); 
    } 
    
    /********************************************* 
          Example of use 
    **********************************************/ 
    
    /* 
    Make sure script execution doesn't time out. 
    Set maximum execution time in seconds (0 means no limit). 
    */ 
    set_time_limit(0); 
    $file_path='that_one_file.txt'; 
    output_file($file_path, 'some file.txt', 'text/plain'); 
    

    에서 코드를 확인하십시오 : http://w-shadow.com/blog/2007/08/12/how-to-force-file-download-with-php/

    쿼리 코드와 CSV 생성 코드 (쿼리 기준)입니다
    0

    스크립트에서 출력하는 내용이 "1","asd","asds" \n "2","sqda","asds" 인 경우 내 친구의 .csv를 생성하는 데 어려움을 겪을 것입니다. CSV 출력의 경우 데이터가 인용되고 올바르게 이스케이프 처리되었는지 확인하십시오. php.net으로 보내 게되어 유감 스럽지만 this comment만이이 문제에 대해 명확하게 언급 할 수있는 유일한 예입니다. 이 페이지에는 csv 출력을위한 몇 가지 코드 예제가 있습니다.

    행운

    관련 문제