2013-04-11 84 views
0

當用戶點擊一個按鈕,它會下載一個csv文件。它適用於IE9和Chrome,但不適用於Firefox。在Firefox 20中,內容類型未被設置,因此它將作爲Firefox HTML文檔進行下載。PHP 5.3下載CSV

 $filename = 'exportedLogs.csv'; 

     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header('Content-Description: File Transfer'); 
     header("Content-type: text/csv"); 
     header("Content-Disposition: attachment; filename=" .$filename); 
     header("Expires: 0"); 
     header("Pragma: public"); 

     $csv_file = fopen('php://output', 'w'); 

     $header_row = array('id', 'project', 'customer', 'time spent'); 

     fputcsv($csv_file, $header_row); 
     foreach ($logs as $log) { 
      $log = array(
       $log['Log']['id'], 
       $log['Log']['project_id'], 
       $log['Log']['customer_id'], 
       $log['Log']['time_spent'] 
      ); 
      fputcsv($csv_file, $log); 
     } 
     fclose($csv_file); 
+1

你有沒有試着用'內容Type'(注意是大寫的T)? – Uby 2013-04-11 17:09:41

+0

是的,我也嘗試在Content-type中添加charset = UTF-8。 – Andrew 2013-04-11 17:11:19

+0

也許多一個標題選項會有所幫助。請參閱http://davidwalsh.name/php-force-download – ebadedude 2013-04-11 17:19:16

回答

0

我發現標題沒有改變的原因是因爲cakePhp。對於其他人有這個問題,你必須做兩件事:

  1. 'Router'::'
  2. 添加「.csv格式的動作形式

@ThaJeztah提供可能幫助他人的鏈接。這是爲json/xml,但校長也可以用於csv。

http://book.cakephp.org/2.0/en/views/json-and-xml-views.html#json-and-xml-views

+0

CakePHP 2.x中用於設置內容類型和響應頭的官方方式是通過響應對象在此處查看文檔[處理內容類型](http://book.cakephp.org/2.0/en/controllers/request -response.html#deal-with-content-types) – thaJeztah 2013-04-11 22:42:51

+0

謝謝,我改變了它。我也正在把它移到App/Lib目錄中。 – Andrew 2013-04-11 23:28:03

+0

這也許值得一讀,它關於JSON和XML,但是您可以使用相同的CSV邏輯[JSON和XML視圖](http://book.cakephp.org/2.0/en/views/json-and -xml-views.html#json-and-xml-views) – thaJeztah 2013-04-12 06:36:52