2012-09-27 40 views
0

我有一個symfony 1.4的項目,在一個動作中將一個mysql表導出到一個.csv文件,然後從服務器下載它,我使用Wampserver進行本地開發,並且一切正常但是,當我上傳到生產服務器時,如果嘗試導出數據,那麼.csv文件會自動在瀏覽器中打開,而不會詢問您是要保存還是打開它,我在創建該代碼後使用的代碼。 CSV是這個symfony下載文件

$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編碼,這是問題嗎?

感謝

+1

你用'application/csv'作爲內容類型嘗試過嗎? – j0k

+0

「Content-Disposition」標題已正確發送到客戶端?服務器可以在發回響應之前修改標題。 – 1ed

+0

可能的重複[強制使用PHP下載文件](http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php) – j0k

回答

0

感謝的意見,我可以得到它的工作,我所做的是改變內容類型爲@ j0k建議,並重定向到文件,而不是使用readfile功能

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

現在它正在

感謝

+0

然後你應該接受你的答案;) – pankar

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'的位置。