對(duì)于下載功能來(lái)說(shuō),往往只需要通過(guò)在網(wǎng)址后面輸入上文件在系統(tǒng)中的路徑地址,就可以實(shí)現(xiàn)直接下載或者訪問(wèn)該文件的目的,但是對(duì)于網(wǎng)絡(luò)安全方面來(lái)說(shuō),這樣就會(huì)直接暴露網(wǎng)站的文件路徑和地址,會(huì)讓攻擊網(wǎng)站的人更加容易的發(fā)現(xiàn)網(wǎng)站的文件結(jié)構(gòu),甚至可以通過(guò)掃描暴力破解目錄下面不應(yīng)該公開(kāi)的文件或者數(shù)據(jù)。
那么,如何解決這個(gè)問(wèn)題呢,我們只需要通過(guò)api接口來(lái)控制就可以避免直接的暴露文件路徑地址。
在PHP中,提供了一個(gè)readfile() ,這個(gè)函數(shù)是 PHP 中一個(gè)用于輸出文件內(nèi)容到瀏覽器或客戶端的函數(shù)。這個(gè)函數(shù)非常適合直接輸出圖片、文本文件或其他類型的文件到用戶端,因?yàn)樗鼤?huì)自動(dòng)設(shè)置正確的 MIME 類型(通過(guò) PHP 的 Content-Type 頭部),并且直接輸出文件內(nèi)容,而不需要你先讀取文件內(nèi)容到變量中。
該函數(shù)提供的參數(shù)有三個(gè)readfile($filename,$use_include_path,$context)
1、$filename:必需。要讀取的文件的路徑。
2、$use_include_path:(可選)如果設(shè)置為 true,PHP 會(huì)在 include_path 中查找文件。默認(rèn)是 false。
3、$context:(可選)指定文件句柄的上下文。
需要特別注意的是,我們?cè)谑褂眠@個(gè)函數(shù)之前需要設(shè)置正確的header的Content-Type,確保瀏覽器可以正確地處理輸出內(nèi)容。