php大文件下載,使用apache/nginx x-sendFile模塊替換

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);

 

posted @ 2014-08-22 16:39  timily  阅读(253)  评论(0编辑  收藏  举报