php下載文件是通常使用readfile函數讀取文件進行下載,在遇到大文件下載的時候,往往不太適用,效率不怎麼樣。
使用x-sendfile模塊則可以繞過php讀取文件的方式了,直接設置頭部信息就可以,利用服務器將文件發送到客戶端進行下載
x-sendfile模塊
apache服務器的配置
設置xsendfile模塊打開
<Directory>
XSendFile On
</Directory>
php測試代碼
header("X-Sendfile: $path_to_somefile"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$somefile\"");
ngnix服務器的配置
location /protected/ { internal; root /some/path; //下載文件的目標路徑 }
如果需要重定向則
X-Accel-Redirect: /protected/iso.img;
php測試代碼如下
header('Content-type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $basefilename); header('X-Accel-Redirect: ' . UPLOAD_PATH . $filename);