PHP5.3下载CSV

PHP5.3下载CSV,php,cakephp,cross-browser,mime-types,cakephp-2.3,Php,Cakephp,Cross Browser,Mime Types,Cakephp 2.3,当用户单击一个按钮时,它将下载一个csv文件。它适用于IE9和Chrome,但不适用于Firefox。在Firefox20中,没有设置内容类型,因此它是作为Firefox HTML文档下载的 $filename = 'exportedLogs.csv'; header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header('Content-Description:

当用户单击一个按钮时,它将下载一个csv文件。它适用于IE9和Chrome,但不适用于Firefox。在Firefox20中,没有设置内容类型,因此它是作为Firefox HTML文档下载的

       $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);

我发现标题没有改变的原因是因为cakePhp。对于其他有此问题的人,您必须做两件事:

  • 将“csv”添加到路由器::parseExtensions(“csv”)
  • 将“.csv”添加到表单中的操作
  • @ThaJeztah提供了一个可能对其他人有帮助的链接。它用于json/xml,但主体也可以用于csv


    您是否尝试了
    内容类型(请注意大写字母T)?是的,我还尝试了在内容类型中添加charset=UTF-8。也许再添加一个标题选项会有所帮助。看,我尝试了应用程序/强制下载,但也没有成功。根据您添加到问题中的标记,您使用的是CakePHP。您使用的是什么版本的CakePHP?你把这段代码放在哪里了?CakePHP 2.x中设置内容类型和响应头的官方方法是通过响应对象。请参阅这里的文档。谢谢,我更改了它。我也在努力将它移到App/Lib目录中。这可能也值得一读,它是关于JSON和XML的,但是你可以对CSV@thaJeztah使用相同的逻辑-谢谢你的帮助。标题没有被更改的原因是我没有在parseExtensions中启用“csv”,并且我还向表单操作添加了一个.csv扩展名。我会更新上面的答案。