0

我有一个 symfony 1.4 的项目,在操作中将 mysql 表导出到 .csv 文件,然后从服务器下载它,我使用 Wampserver 进行本地开发,一切正常,但是,当我上传到生产服务器,现在,如果您尝试导出数据,.csv 文件会自动在浏览器中打开,而不询问您是否要保存或打开它,我在创建 .csv 后使用的代码是这样的

$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 编码保存的,这是问题吗?

谢谢

4

2 回答 2

0

感谢评论,我可以让它工作,我所做的是按照@j0k 的建议更改内容类型,并重定向到文件而不是使用readfile函数

$this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
$this->redirect('/uploads/export/file.csv');

现在它正在工作

谢谢

于 2012-09-27T15:04:49.423 回答
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”的位置。

于 2012-10-02T13:07:46.440 回答