2013-04-11 69 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