说明:
在apache服务器中提供一个文件下载,一般使用一个url指向服务器中的文件即可提供下载。
缺点:不能进行统计,权限检测等操作。

1,一般使用php提供下载,例如:

复制代码代码示例:
<?php  
$file = 'test.zip';  
if(file_exists($file)){  
    header('content-type:application/octet-stream');  
    header('content-disposition:attachment; filename='.basename($file));  
    header('content-length:'.filesize($file));  
    readfile($file);  
}  
?> 

2,处理中文文件名:

复制代码代码示例:
<?php  
$file = 'test.zip';  
$filename = '中文.zip';  
  
if(file_exists($file)){  
    $user_agent = $_SERVER['Http_User_agent'];  
    $encode_filename = rawurlencode($filename);  
  
    if(preg_match("/MSIE/", $user_agent)){  
        header('content-disposition:attachment; filename="'.$encode_filename.'"');  
    }else if(preg_match("/Firefox/", $user_agent)){  
        header("content-disposition:attachment; filename*=\"utf8''".$filename.'"');  
    }else{  
        header('content-disposition:attachment; filename="'.$filename.'"');  
    }  
    readfile($file);  
}  
?>  
 

使用php readfile,需要经过php这层。

如果可以直接通过apache将文件发送给用户,不经过php这层,将会提高下载速度。
那么就需要用到本文的主角了,它就是apache mod_xsendfile模块,下载地址:mod_xsendfile(https://tn123.org/mod_xsendfile/),让apache直接将文件发给用户

1,安装mod_xsendfile模块:

复制代码代码示例:
sudo apxs2 -cia mod_xsendfile.c  
sudo a2enmod xsendfile  
sudo /etc/init.d/apache2 restart  
 

apxs2 用于编译apache module,需要安装apache2-dev

2,设置xsendfile打开:

复制代码代码示例:
<Directory>  
XSendFile On  
</Directory> 

3,mod_xsendfile模块的实例代码。

复制代码代码示例:
<?php
/**
* mod_xsendfile模块 加速文件下载
* edit: www.jbxue.com
*/
$file = 'test.zip';  
$filename = '中文.zip';  
  
if(file_exists($file)){  
    $user_agent = $_SERVER['Http_User_agent'];  
    $encode_filename = rawurlencode($filename);  
  
    if(preg_match("/MSIE/", $user_agent)){  
        header('content-disposition:attachment; filename="'.$encode_filename.'"');  
    }else if(preg_match("/Firefox/", $user_agent)){  
        header("content-disposition:attachment; filename*=\"utf8''".$filename.'"');  
    }else{  
        header('content-disposition:attachment; filename="'.$filename.'"');  
    }  
    header('X-Sendfile:'.$file);  
}  
?> 

转载于:https://www.cnblogs.com/yepanpan/p/4512137.html

apache mod_xsendfile提高php文件下载速度的方法相关推荐

  1. 提高CSS文件可维护性的五种方法

    当完成一项前端的工作之后,许多人都会忘记该项目的结构与细节.然而代码并不是马上就能完全定型,在余下的时间里还有不断的维护工作,而这些工作也许不会是你自己完成.所以,结构优良的代码能很大程度上优化它的可 ...

  2. linux apache 大文件,Apache下error.log文件太大的处理方法

    Apache下error.log文件太大的处理方法 2019年05月03日 | 萬仟网网络运营 | 我要评论 清除error.log.access.log并限制apache日志文件大小的方法 有个客户 ...

  3. java动态加载jar文件并执行方法

    在项目开发的过程中,有时候需要动态灵活的加载某个jar包并执行里面的方法的时候,我们可以使用本篇文章写得方式去动态的加载jar包而不用使用原始方式引入jar包作为lib去使用,接下来介绍如何动态加载j ...

  4. Docker--提高下载速度的方法

    原文网址:Docker--提高下载速度的方法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍如何提高Docker的下载速度. docker默认连接的国外官方镜像,国内进行docker pull ...

  5. ubuntu 12.04 提高更新网速的方法

    ubuntu 12.04 提高更新网速的方法 ubuntu用户经常会在终端下使用sudo apt-get update对软件源进行更新,但从默认的下载服务器下载速度只有不及正常网速的1/5.下面介绍更 ...

  6. Apache伪静态(Rewrite).htaccess文件详解以及RewriteCond 规则

    Htaccess(超文本访问)是一个简单的配置文件,它允许设计师,开发者和程序员通过它来改变Apache Web服务器的配置. 这些功能包括用户重定向.URL重写(url rewrite,国内很多称为 ...

  7. 文件批量下载方法 文件批量下载工具

    软件版本:Internet Download Manager 在当今数字化时代,我们日常使用电脑进行各种工作和娱乐活动.有时候,我们需要从互联网上下载大量文件,例如电影.音乐.文档等.在这种情况下,手 ...

  8. windows下apache配置虚拟主机的两个方法

    windows下apache配置虚拟主机方法一: 对httpd.conf进行设置: 1.注释以下三行 #ServerAdmin #ServerName #DocumentRoot 2.去掉mod_pr ...

  9. linux大文件拷贝,Linux如何提高大文件的拷贝效率

    Linux系统操作中,当你在进行机器直接的拷贝时,遇到大文件的时候非常浪费时间,特别是将文件同时拷贝到多台机器上的时候,那么有什么好的方法能够提高大文件的拷贝效率呢?一起来学习下吧. 你可以从源机器逐 ...

最新文章

  1. android系统短信库的一些用法
  2. 深入讨论PHP5对象复制技术
  3. 用户金字塔模型详解及在实际运营工作中的意义
  4. Java第八天听课总结--jar 包的使用(1)
  5. mysql填写账户远程_如何开启MySQL的远程帐号
  6. python 文件指针及文件覆盖
  7. 绑定方法与非绑定方法
  8. python深拷贝_python 深拷贝与浅拷贝的区别
  9. 学习:java原理—反射机制
  10. redis命令执行流程分析
  11. android 9宫格输入法,Android/WP原生九宫格输入法对比_诺基亚 Lumia 925_手机iOS频道-中关村在线...
  12. 通过IP获取相应所在地的地址
  13. 素数生成器的算法【PHP EDITION】
  14. TSAP(1) : DateTimes
  15. 服务器连交换机配置lacp协议,LACP(链路聚合控制协议)
  16. 线程的学习,和线程的相关概念及多线程的学习指引
  17. memcached的安装
  18. 前端页面性能优化的几种方式(强烈推荐)
  19. 装修主要的污染源有哪些?
  20. 设置日语输入法遇到的各种问题

热门文章

  1. 【ZOJ - 2724】【HDU - 1509】Windows Message Queue(优先队列)
  2. 图解算法学习笔记(八):贪婪算法
  3. 修改DNS的Linux脚本,Shell脚本-配置网络
  4. linux中创建目录树,如何在C++/Linux中创建目录树?
  5. 武汉超级计算机中心,加快打造“五个中心” 武汉率先开建人工智能计算中心...
  6. java dfs_Java数据结构与算法 深搜(DFS)的简单使用(一)之排列组合
  7. edtext 从右边开始输入 安卓_转换iOS和安卓的视频至任何格式
  8. android fragment动画,Fragment 的过场动画
  9. 为什么叫日上_古雷150万吨乙烯,为啥叫芒果项目?
  10. 剑指offer:22-25记录