PHP通過(guò)header實(shí)現(xiàn)文本文件下載的代碼
更新時(shí)間:2010年08月08日 13:26:57 作者:
所謂實(shí)現(xiàn)文本文件的下載就是說(shuō)當(dāng)我們點(diǎn)擊一個(gè)文本文件的鏈接的時(shí)候不是打開(kāi)這個(gè)文件,而是彈出一個(gè)下載對(duì)話框讓我們下載
這就是今天討論的主要問(wèn)題。PHP幫助文檔里面關(guān)于PHP通過(guò)header觸發(fā)下載的說(shuō)明比較簡(jiǎn)單,而網(wǎng)上關(guān)于此方面的文章也少的可憐,有很多文章都無(wú)法實(shí)現(xiàn)所需要的效果。今天我也來(lái)談一下這個(gè)方面的話題,如果你感覺(jué)比網(wǎng)上的某些文章有所改進(jìn),那我就很知足了。
如果從準(zhǔn)確的角度來(lái)說(shuō),那PHP文檔是最準(zhǔn)確的,因?yàn)樗芎?jiǎn)練的列出了實(shí)現(xiàn)文本類文件觸發(fā)下載所需要的三條語(yǔ)句,以PDF為例就是:
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
這三句是正確的,但是在真正用的過(guò)程中很容易出現(xiàn)一些無(wú)法預(yù)料的問(wèn)題,如果你是一個(gè)很仔細(xì)的人的話,也可以很容易的避免這些問(wèn)題。而我不是,所以我就遇到了這樣的問(wèn)題,這里就以我的問(wèn)題來(lái)簡(jiǎn)單說(shuō)一下。
對(duì)于第一句,應(yīng)該沒(méi)啥說(shuō)的,是必須的,只要改一下文檔的類型就行,例如是下載txt文件,那就改為header(‘Content-type: application/txt');,第二句也沒(méi)啥說(shuō)的,就是為你的下載文檔起一個(gè)名字,如果是txt文件的話,可以改為header(‘Content-Disposition: attachment; filename=”downloaded.txt”‘);,第三句的問(wèn)題就比較多了,readfile這個(gè)函數(shù)的意思就是讀取一個(gè)文件然后輸出,這里文件的路徑需要是真實(shí)的文件路徑,如果是downloads文件夾下面的一個(gè)original.txt文件,可以這樣寫readfile(‘downloads/original.txt');,而如果提交的頁(yè)面會(huì)輸出文本等字符,那么下載到的文件會(huì)是原文件original.txt和提交的頁(yè)面輸出的文字的混合文件。我在這里就缺少了仔細(xì)的觀察,一看下面不對(duì)就立即去查代碼了,而沒(méi)發(fā)現(xiàn)上面的文本就是我需要的內(nèi)容,發(fā)現(xiàn)了這部分內(nèi)容,你可能就很快想到怎么來(lái)解決這個(gè)問(wèn)題了,也就是關(guān)閉提交到的頁(yè)面的文本內(nèi)容的輸出。
到這里,我們的問(wèn)題就解決了,從而也就實(shí)現(xiàn)了文本文件鏈接被點(diǎn)擊的時(shí)候會(huì)觸發(fā)下載對(duì)話框的效果。
如果從準(zhǔn)確的角度來(lái)說(shuō),那PHP文檔是最準(zhǔn)確的,因?yàn)樗芎?jiǎn)練的列出了實(shí)現(xiàn)文本類文件觸發(fā)下載所需要的三條語(yǔ)句,以PDF為例就是:
復(fù)制代碼 代碼如下:
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
這三句是正確的,但是在真正用的過(guò)程中很容易出現(xiàn)一些無(wú)法預(yù)料的問(wèn)題,如果你是一個(gè)很仔細(xì)的人的話,也可以很容易的避免這些問(wèn)題。而我不是,所以我就遇到了這樣的問(wèn)題,這里就以我的問(wèn)題來(lái)簡(jiǎn)單說(shuō)一下。
對(duì)于第一句,應(yīng)該沒(méi)啥說(shuō)的,是必須的,只要改一下文檔的類型就行,例如是下載txt文件,那就改為header(‘Content-type: application/txt');,第二句也沒(méi)啥說(shuō)的,就是為你的下載文檔起一個(gè)名字,如果是txt文件的話,可以改為header(‘Content-Disposition: attachment; filename=”downloaded.txt”‘);,第三句的問(wèn)題就比較多了,readfile這個(gè)函數(shù)的意思就是讀取一個(gè)文件然后輸出,這里文件的路徑需要是真實(shí)的文件路徑,如果是downloads文件夾下面的一個(gè)original.txt文件,可以這樣寫readfile(‘downloads/original.txt');,而如果提交的頁(yè)面會(huì)輸出文本等字符,那么下載到的文件會(huì)是原文件original.txt和提交的頁(yè)面輸出的文字的混合文件。我在這里就缺少了仔細(xì)的觀察,一看下面不對(duì)就立即去查代碼了,而沒(méi)發(fā)現(xiàn)上面的文本就是我需要的內(nèi)容,發(fā)現(xiàn)了這部分內(nèi)容,你可能就很快想到怎么來(lái)解決這個(gè)問(wèn)題了,也就是關(guān)閉提交到的頁(yè)面的文本內(nèi)容的輸出。
到這里,我們的問(wèn)題就解決了,從而也就實(shí)現(xiàn)了文本文件鏈接被點(diǎn)擊的時(shí)候會(huì)觸發(fā)下載對(duì)話框的效果。
您可能感興趣的文章:
- Php中文件下載功能實(shí)現(xiàn)超詳細(xì)流程分析
- php利用header函數(shù)實(shí)現(xiàn)文件下載時(shí)直接提示保存
- PHP文件下載類
- php實(shí)現(xiàn)文件下載代碼分享
- 解決PHP超大文件下載,斷點(diǎn)續(xù)傳下載的方法詳解
- PHP連接SQLSERVER 注意事項(xiàng)(附dll文件下載)
- php實(shí)現(xiàn)的支持?jǐn)帱c(diǎn)續(xù)傳的文件下載類
- Flash兩個(gè)上傳示例ASP和PHP(原文件下載,包括后臺(tái)程序)
- php實(shí)現(xiàn)文件下載簡(jiǎn)單示例(代碼實(shí)現(xiàn)文件下載)
- PHP文件下載實(shí)例代碼淺析
相關(guān)文章
Smarty是一個(gè)php模板引擎,它分開(kāi)了邏輯程序和外在的內(nèi)容,提供了一種易于管理的方法. Smarty要求web服務(wù)器運(yùn)行php4.0.6和以上版本. smarty安裝需要smarty庫(kù)文件??梢匀ス俜骄W(wǎng)站http://smarty.php.net下載。 網(wǎng)上講了很多安裝的教程,但是我都沒(méi)有成功,所以直接把整個(gè)目錄名改為smarty直接復(fù)制到了網(wǎng)站所在的目錄下,然后打開(kāi)http://網(wǎng)站路徑/smarty/demo/index.php,顯示正常,應(yīng)該算是安裝成功了。2008-03-03
PHP實(shí)現(xiàn)壓縮圖片尺寸并轉(zhuǎn)為jpg格式的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)壓縮圖片尺寸并轉(zhuǎn)為jpg格式的方法,涉及php針對(duì)圖片的讀取、計(jì)算、轉(zhuǎn)換、輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-05-05
PHP調(diào)試的強(qiáng)悍利器之PHPDBG
這篇文章主要為大家詳細(xì)介紹了PHP調(diào)試的強(qiáng)悍利器之PHPDBG的相關(guān)資料,感興趣的小伙伴們可以參考一下2016-02-02
PHP中的strtr函數(shù)使用介紹(str_replace)
PHP的 strtr 函數(shù), 性能要比 str_replace 函數(shù)高, 可以代替 str_replace 來(lái)使用2011-10-10
深入理解require與require_once與include以及include_once的區(qū)別
本篇文章是對(duì)require與require_once與include以及include_once的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
php計(jì)算數(shù)組相同值出現(xiàn)次數(shù)的代碼(array_count_values)
這篇文章主要介紹了php計(jì)算數(shù)組相同值出現(xiàn)次數(shù)的代碼,需要的朋友可以參考下2015-01-01
在WINDOWS中設(shè)置計(jì)劃任務(wù)執(zhí)行PHP文件的方法
在網(wǎng)上找了些WINDOWS執(zhí)行PHP的計(jì)劃任務(wù)的方法,有一個(gè)寫得很全,可惜在我這竟然沒(méi)通過(guò)。最后不得不綜合各門派的方法,才能在我這運(yùn)行成功2011-12-12
PHP提示W(wǎng)arning:phpinfo() has been disabled函數(shù)禁用的解決方法
這篇文章主要介紹了PHP提示W(wǎng)arning:phpinfo() has been disabled函數(shù)禁用的解決方法,涉及針對(duì)配置文件中禁用函數(shù)的修改技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-12-12
zen cart新進(jìn)商品的隨機(jī)排序修改方法
由于新進(jìn)商品的數(shù)量可能比頁(yè)面上能顯示的數(shù)量多,所以采用的是隨機(jī)顯示的方式。如果想改為按時(shí)間順序顯示,可以按照radnows提供的 方法修改。(記住使用文件替代)2010-09-09

