當我們在網頁中提供一些文件下載鏈接時,需要使用到file.php這個文件進行下載。
一般來說,我們需要在PHP代碼中指定文件的路徑和MIME類型,以確定要提供的文件。同時,為了保護文件安全,我們還需在代碼中進行文件權限檢查,確保只有授權用戶才能下載文件。
$file = 'download.zip'; $mime = 'application/zip'; $filesize = filesize($file); if(!is_auth()){ exit('沒有權限下載此文件'); } if(file_exists($file)){ header('Content-type: '.$mime); header('Content-Length: '.$filesize); header('Content-Disposition: attachment; filename='.$file); readfile($file); exit(); }else{ exit('文件不存在'); }
上述代碼檢查文件是否存在,如果存在則設置文件MIME類型和文件名,通過readfile函數將文件輸出到瀏覽器端下載,同時設置頭信息告訴瀏覽器下載文件。
在某些情況下,可能需要為文件下載進度添加進度條。我們可以在readfile函數中添加Ob_level()函數和flush()函數來實現下載進度顯示。
$file = 'download.zip'; $mime = 'application/zip'; $filesize = filesize($file); if(!is_auth()){ exit('沒有權限下載此文件'); } if(file_exists($file)){ header('Content-type: '.$mime); header('Content-Length: '.$filesize); header('Content-Disposition: attachment; filename='.$file); $chunk = 1024 * 1024; // 每次下載1M $filehandle = fopen($file, 'rb'); while(!feof($filehandle)){ $buffer = fread($filehandle, $chunk); ob_start(); echo $buffer; flush(); ob_end_flush(); sleep(1); // 模擬下載時間 } fclose($filehandle); exit(); }else{ exit('文件不存在'); }
上述代碼中,我們設置每次下載1M的數據塊,先將數據塊寫入輸出緩沖區,再flush()將數據輸出。同時我們用sleep()函數模擬下載時間,以便演示下載進度。
總之,借助file.php,我們可以更加安全和靈活地提供文件下載功能。