Zend Framework中header下載檔案的問題及解決
問題描述:
在使用Zend Framework框架開發過程中需要使用者下載excel檔案的功能。之前看過PHP的header()函式可以下載檔案,於是便查了一下header函式,W3School中給出的用法是:
header(string,replace,http_response_code)
引數 | 描述 |
---|---|
string | 必需。規定要傳送的報頭字串。 |
replace |
可選。指示該報頭是否替換之前的報頭,或新增第二個報頭。 預設是 true(替換)。false(允許相同型別的多個報頭)。 |
http_response_code | 可選。把 HTTP 響應程式碼強制為指定的值。(PHP 4 以及更高版本可用) |
以下為下載pdf的例子:
<?phpheader("Content-type:application/pdf");//不同型別的檔案程式碼不同
// 檔案將被稱為 downloaded.pdfheader("Content-Disposition:attachment;filename=".$name);//這是下載時顯示的名字,不含路徑
// PDF 源在 original.pdf 中 readfile($fileName);//$fileName可以是路徑 ?>
在網上找了個下載Execel的程式碼:
出處:http://www.oschina.net/code/snippet_98890_27376
01 |
if ( file_exists (CACHE_PATH
. $file_name )){ |
02 |
//$this->logger->error('file
realpath:'.realpath(CACHE_PATH . $file_name)); |
03 |
header( 'Pragma:
public' ); |
04 |
header( 'Expires:
0' ); |
05 |
header( 'Content-Encoding:
none' ); |
06 |
header( 'Cache-Control:
must-revalidate, post-check=0, pre-check=0' ); |
07 |
header( 'Cache-Control:
public' ); |
08 |
header( 'Content-Type:
application/vnd.ms-excel' ); |
09 |
header( 'Content-Description:
File Transfer' ); |
10 |
header( 'Content-Disposition:
attachment; filename=' . $file_name ); |
11 |
header( 'Content-Transfer-Encoding:
binary' ); |
12 |
header( 'Content-Length:
' . filesize (
CACHE_PATH . $file_name )
); |
13 |
readfile
( CACHE_PATH . $file_name ); |
14 |
} else { |
15 |
$this ->logger->error( 'export
model :' . $id . '
錯誤:未生產檔案' ); |
16 |
echo '<script>alert(\'export
error, file not exists!\')</script>' ; |
17 |
} |
我將程式碼應用到Zend Framework中的一個action中,此action是有對應前端phtml頁面的,當使用者發出下載檔案的請求時,檔案可以下載,顯示檔案大小都正常,可是開啟excel檔案報錯,提示檔案型別與副檔名不一致。
從顯示的問題可以推斷,檔案並非我們想要的excel格式檔案,似乎是一個網頁,找不到css檔案。是下載檔案的程式碼有問題麼?
解決方法:
我將下載檔案的程式碼單獨拿出來試驗,放在Apache伺服器的根目錄下,在瀏覽器中開啟試驗檔案,發現下載正常,檔案也可以開啟。
倒騰了一些時間發現僅僅是因為一個函式在作怪,exit(); !!!!!
在下載檔案的程式碼中readfile ()後就截止了,而我在框架中的action方法裡readfile()函式後面沒有加入exit()函式,使得錯誤的發生。
相關文章
- sra檔案下載及解析的問題
- Web 開發中的檔案下載問題Web
- 使用 header 頭下載檔案Header
- 解決下載的CHM檔案無法顯示網頁問題網頁
- 解決“阻塞效應”-解決指令碼檔案下載阻塞網頁渲染的問題指令碼網頁
- 過濾器解決檔案上傳下載跨域問題過濾器跨域
- 解決java web中safari瀏覽器下載後檔案中文亂碼問題JavaWeb瀏覽器
- Zend Framework在windows下的安裝FrameworkWindows
- 解決VC中增加類檔案的問題 (轉)
- JS 下載檔案方法分享(解決圖片檔案無法直接下載和 IE相容問題)JS
- Mac常見問題|Safari下載檔案沒有反應的解決方法Mac
- 解決go get 下載github專案慢或無法下載的問題!GoGithub
- Zend Framework和Smarty在php中的配置FrameworkPHP
- Composer 下載較慢的問題解決
- 解決 macOS HomeBrew 下載緩慢的問題Mac
- OSS物件儲存的檔案追加上傳問題及解決方案物件
- excel檔案內容匯入資料庫的問題及解決Excel資料庫
- 為Windows Azure Web站點新增MIME型別解決檔案下載失敗的問題WindowsWeb型別
- 前端JS 下載大檔案解決方案前端JS
- JS中toFixed()方法的問題及解決方案JS
- Excel下載的檔名問題Excel
- 解決vs2010下不能建立專案及檔案的問題
- Linux中常見的檔案讀寫錯誤問題及解決方法!Linux
- Windows下ElasticSearch安裝中的問題解決WindowsElasticsearch
- 關於檔案上傳下載的編碼問題
- invalid stream header: EFBFBDEF 問題解決Header
- 使用this.Ctx.Output.Header解決跨域問題Header跨域
- 徹底解決Hive小檔案問題Hive
- Trace檔案過量生成問題解決
- 解決 git 忽略了不在.gitignore中的檔案的問題,不在.gitignore 中的檔案被忽略了無法提交的的問題Git
- 解決Android studio中gradle依賴下載太慢的問題AndroidGradle
- ssh,下載檔案遇到的埠號別篡改的問題
- 解決純js檔案國際化的問題JS
- Laradock 網路問題不能下載解決
- VMware下安裝Ubuntu遇到的問題及解決方案Ubuntu
- 解決git下載時斷開連線的問題Git
- 多專案管理中的難題及解決方案專案管理
- 解決:ThinkPHP 下載專案提示“Call to undefined function captcha_src()”問題PHPUndefinedFunctionAPT