我有一个带有symfony 1.4的项目,在一个动作中将mysql表导出到.csv文件然后从服务器下载它,我正在使用Wampserver进行本地开发,一切正常,但是,当我上传到生产服务器,现在,如果你试图导出数据,.csv文件会在浏览器中自动打开,而不会询问你是否要保存或打开它,我在创建.csv后使用的代码就是这个< / p>
$this->setLayout(false);
sfConfig::set('sf_web_debug', false);
$this->getResponse()->setHttpHeader('Content-Type', 'text/csv');
$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="file.csv"');
$this->getResponse()->setHttpHeader('Pragma', 'no-cache');
$this->getResponse()->setHttpHeader('Expires', '0');
readfile(sfConfig::get('sf_upload_dir') . "/export/file.csv");
return sfView::NONE;
我再说一遍,在我的本地服务器上这项工作没问题,浏览器给我打开或保存的选项,现在,这是代码的问题,服务器中的设置还是其他什么?
文件用utf-8编码保存,这是问题吗?
感谢
答案 0 :(得分:0)
感谢评论,我可以让它工作,我所做的是将内容类型更改为@ j0k建议,并重定向到文件而不是使用readfile
函数
$this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
$this->redirect('/uploads/export/file.csv');
现在正在运作
感谢
答案 1 :(得分:0)
另一种不重定向的方法如下:
$this->getResponse()->clearHttpHeaders();
$this->getResponse()->setHttpHeader('Content-Description','File Transfer');
$this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
$this->getResponse()->setHttpHeader('Content-Disposition','attachment;filename='.$file_name);
$this->getResponse()->setHttpHeader('Pragma', '');
$this->getResponse()->setHttpHeader('Cache-Control', '');
$this->getResponse()->sendHttpHeaders();
$this->renderText($fwrite('php://output',$stuff));
保存文件或将文件写入'php:// output'。