apache mod_xsendfile 让php提供更快的文件下载

2023-05-16

服务器提供一个文件下载,一般使用一个url指向服务器中的文件即可提供下载。

但这样就不能进行统计,权限检测等操作。

因此,一般使用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);
}
?>
处理中文文件名:
<?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,让apache直接将文件发给用户

安装:

sudo apxs2 -cia mod_xsendfile.c
sudo a2enmod xsendfile
sudo /etc/init.d/apache2 restart
apxs2 用于编译apache module,需要安装apache2-dev

设置xsendfile打开:
<Directory>
XSendFile On
</Directory>
代码如下:
<?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.'"');
	}
	header('X-Sendfile:'.$file);
}
?>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

apache mod_xsendfile 让php提供更快的文件下载 的相关文章

随机推荐

  • PostgreSQL的视图以及物化视图的特点

    1 视图 PostgreSQL视图其实和mysql视图是一样的 xff0c 视图其实是个虚拟的表 xff0c 实际上是一个SQL拼接而成的虚拟表 xff08 假表 xff09 xff0c 可能是有一个表或者多个表 视图关联而成的复杂的SQL
  • 尚硅谷---Vue3同步笔记

    一 初识Vue3 Vue3带来了什么 xff1f 1 性能上的提升 xff1a 更快 占用内存更少 2 源码的升级 xff1a 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现和Tree Shaking Tre
  • 移动mgv2000_JL代工_s905l2_MT7668_emmc_免拆卡刷固件包

    移动mgv2000 JL代工 s905l2 MT7668 emmc 免拆卡刷固件包 特点 xff1a 1 适用于卡刷 xff1b 2 开放原厂固件屏蔽的市场安装和u盘安装apk xff1b 3 修改dns xff0c 三网通用 xff1b
  • 魔百和CM311-1A_YST、(YM)_安卓9_S905L3A_默认开启ADB_纯净精简语音_完美线刷包

    魔百和CM311 1A YST YM 安卓9 S905L3A 默认开启ADB 纯净精简语音 完美线刷包 固件特点 xff1a 1 修改dns xff0c 三网通用 xff1b 2 开放原厂固件屏蔽的市场安装和u盘安装apk xff1b 3
  • C++11:变长模板的迭代与递归扩展

    迭代的运行效率始终强于递归 xff0c 递归始终比迭代方便开发 变长模板属于C 43 43 11中比较复杂的技术 xff0c 在此简单介绍下 include lt iostream gt using namespace std templa
  • 虚拟机Secure Boot安全启动

    概述 Secure Boot 作为 UEFI 的一个选项 xff0c 它可以被设置为开启或关闭 Secure Boot 所需要的公钥证书被保存在计算机的主板的 FLASH 里面 xff0c FLASH 里面保存着 PK xff0c KEK
  • 端口被占用的原因及解决办法

    运行软件或者项目的时候 xff0c 出现以下问题 xff1a panic blademaster listen tcp 0 0 0 0 8080 listen tcp 0 0 0 0 8080 bind An attempt was mad
  • Rust 学习,与 node.js 交互

    1 背景 近期 xff0c 参与了一个活动 xff1a 学 Rust xff0c 免费拿树莓派 主要内容为开发应用 xff0c 在 node js 中调用 Rust 函数 实际上我认为在很多地方都能用上 Rust xff0c 鉴于活动要求
  • Zeal--一款支持207个离线文档的浏览器

    小编作为一个全栈工程师 xff0c 每个语言都会一点 xff0c 在写前端和后端的时候 xff0c 时长会打开好几个开发文档 xff0c 比如java css html 等 xff0c 有没有打开一个软件 xff0c 就能打开所有的帮助文档
  • Linux之间图像界面的传输 ssh -X username@{remote ip}

    之前用windows平台连接Linux平台 xff0c 总是通过Xshell 43 Xming来传输Linux系统的界面 现在在linux系统平台下 xff0c 通过ssh连接另一个Linux系统 xff0c 如何将远程Linux的图形界面
  • 利用图片Etag判断用户

    原理 xff1a 不使用Javascript xff0c SESSION xff0c COOKIES xff0c FLASH 利用图片Etag识别用户 1 根据用户的 REMOTE ADDR 与 HTTP USER AGENT 生成唯一Et
  • 音视频基础知识---封装格式介绍

    音视频基础知识汇总 xff1a 音视频基础知识 协议相关RTSP RTMP HLS 音视频基础知识 封装格式 音视频基础知识 视频编码格式 音视频基础知识 音频编码格式 音视频基础知识 像素格式RGB 音视频基础知识 像素格式YUV 1 什
  • php output_buffering 缓存使用

    buffer是一个内存地址空间 xff0c linux系统默认大小一般为4096 4kb 主要用于存储速度不同步的设备或优先级不同的设备之间传递数据的区域 通过buffer可以使进程之间的相互等待变少 例如 xff0c 当你打开一个文本编辑
  • 同一域名对应不同IP,访问指定主机文件内容的方法

    PHP获取远程主机文件内容方法很多 xff0c 例如 xff1a file get contents xff0c fopen 等 lt php echo file get contents 39 http demo fdipzone com
  • php 实现BigPipe分块输出

    原理 xff1a 利用 ob flush 与 flush 将缓冲区的内容提前输出 xff0c 浏览器可提早加载这部分的内容 xff0c 无需等待所有输出完成再加载 将页面内容划分为一个个小块 xff0c 输出一个后再输出下一个 xff0c
  • php 利用fsockopen GET/POST 提交表单及上传文件

    php 利用 fsockopen GET POST 提交表单及上传文件 1 GET get php lt php host 61 39 demo fdipzone com 39 port 61 80 errno 61 39 39 errst
  • php 过滤html标记属性类

    php 过滤html标记属性类 HtmlAttributeFilter class php lt php HTML Attribute Filter Date 2013 09 22 Author fdipzone ver 1 0 Func
  • php HTTP请求类,支持GET,POST,Multipart/form-data

    PHP HTTP请求类 xff0c 支持GET POST Multipart form data HttpRequest class php lt php HttpRequest class HTTP请求类 xff0c 支持GET POST
  • HTTP 204 与 205 应用

    HTTP 204 no content 表示响应执行成功 xff0c 但没有数据返回 xff0c 浏览器不用刷新 xff0c 不用导向新页面 HTTP 205 reset content 表示响应执行成功 xff0c 重置页面 xff08
  • apache mod_xsendfile 让php提供更快的文件下载

    服务器提供一个文件下载 xff0c 一般使用一个url指向服务器中的文件即可提供下载 但这样就不能进行统计 xff0c 权限检测等操作 因此 xff0c 一般使用php提供下载 xff0c 代码如下 xff1a lt php file 61