php強制下載類型的實現(xiàn)代碼
更新時間:2011年04月21日 22:58:16 作者:
有時需要一些文件不能在線打開,而是執(zhí)行后需要下載,這時就用這個函數(shù)就可以解決了
復(fù)制代碼 代碼如下:
function downloadFile($file){
/*Coded by Alessio Delmonti*/
$file_name = $file;
$mime = 'application/force-download';
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Type: '.$mime);
header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile($file_name); // push it out
exit();
}
php將文件下載下來而不是超鏈接下載,這樣可以減少盜鏈的情況!將文件給瀏覽器讓瀏覽器下載
以txt類型為例
由于現(xiàn)在的瀏覽器已經(jīng)可以識別txt文檔格式,如果只給txt文檔做一個文字鏈接的話,點擊后只是打開一個新窗口顯示txt文件的內(nèi)容,并不能實現(xiàn)點擊下載的目的。當(dāng)然這個問題的解決辦法也可以是將txt文件改名為瀏覽器不認識的文件(比如rar),這樣的話,由于瀏覽器不能識別rar類型的文件,只能讓用戶下載了。還有一種辦法,就是利用代碼通過header設(shè)置文檔的格式來實現(xiàn)點擊下載的目的。
PHP代碼如下:
復(fù)制代碼 代碼如下:
$filename = '/path/'.$_GET['file'].'.txt'; //文件路徑
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".basename($filename));
readfile($filename);
簡要說明:
第一個header函數(shù)設(shè)置Content-Type的值為application/force-download;
第二個header函數(shù)設(shè)置要下載的文件。注意這里的filename是不包含路徑的文件名,filename的值將來就是點擊下載后彈出對話框里面的文件名,如果帶路徑的話,彈出對話框的文件名就是未知的;
最后通過readfile函數(shù),將文件流輸出到瀏覽器,這樣就實現(xiàn)了txt文件的下載。
您可能感興趣的文章:
相關(guān)文章
分析php://output和php://stdout的區(qū)別
本篇文章給大家詳細分析了php://output和php://stdout的用法區(qū)別以及實例代碼分享,有需要的朋友可以參考學(xué)習(xí)下。2018-05-05
php實現(xiàn)36進制與10進制轉(zhuǎn)換功能示例
這篇文章主要介紹了php實現(xiàn)36進制與10進制轉(zhuǎn)換功能,結(jié)合實例形式分析了php數(shù)值運算與字符串操作的相關(guān)技巧,需要的朋友可以參考下2017-01-01
用mysql_fetch_array()獲取當(dāng)前行數(shù)據(jù)的方法詳解
本篇文章是對使用mysql_fetch_array()獲取當(dāng)前行數(shù)據(jù)的方法進行了詳細的分析介紹,需要的朋友參考下2013-06-06
php合并數(shù)組array_merge函數(shù)運算符加號與的區(qū)別
“+”運算符和array_merge():array array_merge ( array array1, array array2 [, array ...] ) 都可以合并多個數(shù)組,但使用過程中有一點小區(qū)別。2008-10-10

