apache mod_xsendfile提高php文件下载速度的方法

说明:
在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/459394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原 Linux搭建SVN 服务器2

原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55) 阅读&#xff08;12257&#xff09; | 评论&#xff08;3&#xff09; 31人收藏此文章, 我要收藏赞3摘要 Linux搭建SVN 服务器目录[-] Linux搭建SVN 服务器1 安装SVN2 使用客户端连接2.1 使用…

网络层核心:路由和路由生成算法

一、路由和路由算法简介&#xff1a; 路由就是通过互连的网络把信息从源地址传送到目的地址的活动。路由发生在OSI网络参考模型的第三层即网络层。 路由引导封包转送&#xff0c;经过一些中间的节点后&#xff0c;到达目的地。把该功能做成硬件的话称为路由器。路由通常根据路…

LeetCode--Sum Root to Leaf Numbers

题目&#xff1a; Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents the number 123. Find the total sum of all root-to-leaf numbers. For ex…

在树莓派2上折腾kali2.0小记(1)

在树莓派2上折腾kali2.0小记&#xff08;1&#xff09;本文主要是对自己在树莓派2上折腾kali2.0过程的一个记录&#xff0c;主要面向初学者&#xff0c;欢迎各位大神赐教。很久之前就听说过树莓派大名&#xff0c;刚好今年发布2.0版本&#xff0c;而且刚好最近有空&#xff0c;…

网络:常见的端口号及分类

一、端口号概念 在网络技术中&#xff0c;端口&#xff08;Port&#xff09;包括逻辑端口和物理端口两种类型。物理端口指的是物理存在的端口&#xff0c;如ADSL Modem、集线器、交换机、路由器上用 于连接其他网络设备的接口&#xff0c; 如RJ-45端口、SC端口等等。逻辑端口…

EditPlus 技巧大全:[1]怎么配置PHP编译环境

editplus是一款小巧但功能强大易扩展的文本编辑器&#xff0c;可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。 工具/原料 EditPlus v3.3.1 php 5.3.14 方法/步骤 1.打开editplus 2.点击菜单栏“工具” 3.选择下拉菜单的“配置用户工具”&#xff0c;进入配置…

grub加密

grub加密有明文加密码和密文加密命令&#xff1a;grub-md5-crypt[rootlnmp01 rc.d]# grub-md5-crypt Password: Retype password: $1$p9Y9a$Id5hMpbsHLNZFs0gPbRRI.密码加密后密文&#xff1a;$1$p9Y9a$Id5hMpbsHLNZFs0gPbRRI.配置/boot/grub/grub.…

网络:传输层 TCP报文格式解析

一、TCP报文格式 1、为了提供可靠的数据传输&#xff0c;TCP报文首部字段有较多的字段&#xff0c;TCP报文格式如下图&#xff1a; 图2 TCP报文格式 16位源和目标端口&#xff08;16位&#xff09;&#xff1a;用于多路复用/多路分解来自或送至上层应用的数据&#xff0c;可以…

sigsuspend sigprocmask函数的用法

一个进程的信号屏蔽字规定了当前堵塞而不能递送给该进程的信号集。调用函数sigprocmask能够检測或更改其信号屏蔽字&#xff0c;或者在一个步骤中同一时候运行这两个操作。 #include <signal.h> int sigprocmask( int how, const sigset_t *restrict set, sigset_t *rest…

MATLAB图像小波变换

为什么80%的码农都做不了架构师&#xff1f;>>> 小波变换与小波包变换 人脸图像f(x,y) 的一层小波变换如下图所示&#xff1a; 图中L 和H 分别表示低通滤波器和高通滤波器&#xff0c;l(n) 和h(n) 分别表示它们相应的脉冲响应&#xff0c;2↓1表示降2采样fLL和fHH分…

网络:TCP维护安全可靠机制提供的定时器

一、TCP为维护安全可靠机制提供了七大定时器 1、连接建立(connectionestablishment)”定时器&#xff1a; 在发送SYN报文段建立一条新连接时启动。如果在75秒内没有收到响应&#xff0c;连接建立将中止。 2、重传(retransmission)定时器&#xff1a; 在TCP发送某个数据段时设定…

grunt之Gruntfile(1)

grunt 执行的时候&#xff0c;他会找该目录下的Gruntfile文件&#xff0c;所以&#xff0c;要在目录下创建Gruntfile文件。 下面我demo一个copy任务&#xff1a; 执行copy&#xff0c;首先我们要一个copy的模块&#xff0c;那么我们先安装下copy模块 首先&#xff0c;我到H盘&a…

MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程

2019独角兽企业重金招聘Python工程师标准>>> 开发项目涉及到的表太多&#xff0c;一个一个的写JAVA实体类很是费事。MyEclipse提供简便的方法&#xff1a;反向数据库 步骤大致如下: 第一步&#xff1a; window-->open Perspective-->MyEclipse Java Persisten…

TCP的定时器系列 — 超时重传定时器(有图有代码有真相!!!)

转载 主要内容&#xff1a;TCP定时器概述&#xff0c;超时重传定时器、ER延迟定时器、PTO定时器的实现。 内核版本&#xff1a;3.15.2 我的博客&#xff1a;http://blog.csdn.net/zhangskd Q&#xff1a;一条TCP连接会使用多少个定时器呢&#xff1f; A&#xff1a;目前的答案…

Python try/except/finally等

Python try/except/finally等 [代码块]x abc def fetcher(obj, index): return obj[index] fetcher(x, 4) 输出&#xff1a; File "test.py", line 6, in <module> fetcher(x, 4) File "test.py", line 4, in fetcher retur…

TCP的定时器系列 — SYNACK定时器

转载 主要内容&#xff1a;SYNACK定时器的实现&#xff0c;TCP_DEFER_ACCPET选项的实现。 内核版本&#xff1a;3.15.2 我的博客&#xff1a;http://blog.csdn.net/zhangskd 在上一篇博客中&#xff0c;已经连带介绍了SYNACK定时器的创建和删除&#xff0c;所以本文直接从它的…

android -- 蓝牙 bluetooth (二) 打开蓝牙

4.2的蓝牙打开流程这一部分还是有些变化的&#xff0c;从界面上看蓝牙开关就是设置settings里那个switch开关&#xff0c;widget开关当然也可以&#xff0c;起点不同而已&#xff0c;后续的流程是一样的。先来看systemServer.java的代码&#xff0c;蓝牙服务开启的地方&#xf…

开始nodejs+express的学习+实践(8)

为什么80%的码农都做不了架构师&#xff1f;>>> 1.session使用 介绍的非常详细&#xff1a; http://www.cnblogs.com/chenchenluo/p/4197181.html 对比我们的app.js需要引入express-session模块和使用这个模块&#xff0c;在package依赖&#xff0c;并加载。 我们修…

TCP的定时器系列 — 保活定时器(有图有代码有真相!!!)

转载 主要内容&#xff1a;保活定时器的实现&#xff0c;TCP_USER_TIMEOUT选项的实现。 内核版本&#xff1a;3.15.2 我的博客&#xff1a;http://blog.csdn.net/zhangskd 原理 HTTP有Keepalive功能&#xff0c;TCP也有Keepalive功能&#xff0c;虽然都叫Keepalive&#xff0c…

浅谈 Scala 中下划线的用途

Scala 作为一门函数式编程语言&#xff0c;对习惯了指令式编程语言的同学来说&#xff0c;会不大习惯&#xff0c;这里除了思维方式之外&#xff0c;还有语法层面的&#xff0c;比如 underscore&#xff08;下划线&#xff09;就会出现在多种场合&#xff0c;令初学者相当疑惑&…