2013-10-03 83 views
0

這是針對該文件的csv文件創建和強制下載。PHP CSV創建並強制下載

這個工作,但我需要知道它是否正確的方式。

公共職能exportCSV($結果){

try { 

     $filename = CSV_PATH.'file.csv'; 

     $numRows = count($results); 

     $handle = fopen($filename, 'w+') or die("can't open file"); 

     fputcsv($handle, array('id','name','age','address')); 

     foreach ($results as $row) { 

      fputcsv($handle, $row); 
     } 

     fclose($handle); 

     header('Content-Disposition: attachment; filename="'.basename($filename).'"'); 
     header('Content-Transfer-Encoding: binary'); 
     header('Content-Length: '.filesize($filename)); 
     header('Connection: close'); 
     readfile($filename); 
     exit(); 

    } catch(Exception $e) { 
     echo $e->getMessage(); 
    } 
} 

CSV_PATH是config.php文件

+0

就我個人而言,我會使用tempfile而不是具有固定名稱的文件......如果兩個不同的用戶同時請求csv下載,那麼您將不會遇到任何問題;並且它可以在磁盤發送到瀏覽器之後刪除磁盤上的文件 –

回答

0
use string rather then file writing it causes lot of overhead. 
    $out = ""; 
    $out .= implode(",", array('id','name','age','address')) . "\r\n"; 

    foreach ($results as $row) { 
     $out .= implode(",", $row) . "\r\n"; 
    } 

現在做的一樣。

.... 
header('Connection: close'); 
echo $out; 
+0

爲什麼當fputcsv()函數處理很多潛在的數據問題(您的代碼沒有)時建議手動創建每一行(例如地址中的逗號字段) –

+0

請不要告訴,當沒有文件獲取'filesize'時,OP如何設置內容長度標題?你如何處理看起來像這樣的數據:_「我的地址123,郵編」_ <---','也是CSV分隔符。 'fputcsv'會用引號括起這些數據,你的方法不會這樣做...... –