2011-11-24 137 views
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

是(基於查詢)查詢碼和CSV創建代碼在哪裏?需要查看代碼以幫助解決問題。 – Justin808

+0

請重新提交此帖子併發布無法使用的實際代碼。同樣在這種情況下,而不是「虛構」數字,爲什麼不提供您正在使用的查詢與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/

0

如果你的腳本輸出:"1","asd","asds" \n "2","sqda","asds",我相信你會很難從我的朋友生成.csv。對於CSV輸出,請確保您的數據正確引用並妥善轉義,我很抱歉將您發送到php.net,但是this comment是我可以着陸的唯一例子,在此問題上明確提及。在該頁面上有一些代碼示例用於輸出csv。

祝你好運