PHP文件下載實(shí)例代碼淺析
文件下載的功能對(duì)一個(gè)網(wǎng)站而言基本上是必備的了,今天就來看看PHP是如何實(shí)現(xiàn)文件下載的吧。
無控制類型
這里說的無控制類型是指 沒有添加PHP代碼控制的資源可以被直接下載的那些類型。一般而言,壓縮文件.rar; 音視頻文件:..avi等等也可以被直接下載。但是音頻和mp4則會(huì)直接被瀏覽器解析播放。
如下圖:
.avi文件

.rar文件

.mp4,MP3,圖片等會(huì)被直接解析

核心代碼
使用php代碼控制文件的下載合適很簡(jiǎn)單的。我們住需要很少的代碼便可以完成如此復(fù)雜的工作。
類型
// 使用basename函數(shù)可以獲得文件的名稱而不是路徑信息,保護(hù)了服務(wù)器的目錄安全性
header("content-disposition:attachment;filename=".basename($filename));
長(zhǎng)度
header("content-length:".filesize($filename));
實(shí)現(xiàn)函數(shù)
<?php
$filename = $_GET['filename'];
// 使用basename函數(shù)可以獲得文件的名稱而不是路徑信息,保護(hù)了服務(wù)器的目錄安全性
header("content-disposition:attachment;filename="$filename);
header("content-length:".filesize($filename));
readfile($filename);
?>
優(yōu)化
上面指定文件名稱的時(shí)候我們沒有使用一個(gè)叫basename的函數(shù),這樣我們下載文件的時(shí)候?qū)?huì)連帶著其在服務(wù)器上的文件的完整的路徑。
注意: 下載文件的名稱一定不能包含其在服務(wù)器上的完整路徑名稱,否則有可能會(huì)導(dǎo)致部分資源的泄露。即使有辦法能控制訪問資源的權(quán)限,但是使用basename函數(shù)也是很好的。
原始下載文件的名稱

優(yōu)化后的文件下載名稱

總結(jié)
php文件下載使用起來相較于Java實(shí)現(xiàn)真的是太方便了呢。在下載文件的內(nèi)部,有許多的信息提供給我們,通過這些封裝好的信息,我們可以實(shí)現(xiàn)更加優(yōu)雅的文件下載系統(tǒng)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 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通過header實(shí)現(xiàn)文本文件下載的代碼
- 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)文件下載)
相關(guān)文章
php簡(jiǎn)單計(jì)算權(quán)重的方法示例【適合抽獎(jiǎng)?lì)悜?yīng)用】
這篇文章主要介紹了php簡(jiǎn)單計(jì)算權(quán)重的方法,結(jié)合實(shí)例形式分析了php概率相關(guān)的數(shù)值計(jì)算操作技巧,適合抽獎(jiǎng)?lì)悜?yīng)用,需要的朋友可以參考下2019-06-06
PHP實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的類庫用法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)導(dǎo)出excel數(shù)據(jù)的類庫用法,結(jié)合實(shí)例形式分析了php操作Excel數(shù)據(jù)的讀取與導(dǎo)出操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-10-10
PHP字符串與數(shù)組處理函數(shù)用法小結(jié)
這篇文章主要介紹了PHP字符串與數(shù)組處理函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了PHP字符串與數(shù)組常用處理函數(shù)功能、定義、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2020-01-01
php中用date函數(shù)獲取當(dāng)前時(shí)間有誤的解決辦法
以下是對(duì)php中用date函數(shù)獲取當(dāng)前時(shí)間有誤的解決辦法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下2013-08-08
PHP實(shí)現(xiàn)的簡(jiǎn)單排列組合算法應(yīng)用示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的簡(jiǎn)單排列組合算法,結(jié)合具體應(yīng)用實(shí)例分析了排列組合算法的實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-06-06
phpstudy無法啟動(dòng)MySQL服務(wù)的三種問題解決
本文主要介紹了phpstudy無法啟動(dòng)MySQL服務(wù)的問題解決,包括停止本地mysql服務(wù)、修改phpstudy中的mysql端口號(hào)以及暫時(shí)刪除本地服務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下2025-03-03
PHP使用mpdf實(shí)現(xiàn)導(dǎo)出pdf文件功能
這篇文章主要為大家詳細(xì)介紹了PHP如何使用mpdf實(shí)現(xiàn)導(dǎo)出pdf文件功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
PHP 命令行工具 shell_exec, exec, passthru, system詳細(xì)使用介紹
PHP 為執(zhí)行外部命令提供大量函數(shù),其中包括 shell_exec()、exec()、passthru() 和 system()。這些命令是相似的,但為您運(yùn)行的外部程序提供不同的界面。2011-09-09

