`
jj7878jj
  • 浏览: 10952 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

让你的网站文件下载速度快点,更快点,更更快点

 
阅读更多
开篇跟大家推荐我自己也在使用的PHP视频教程

我自己也是搜寻了很多网上的资料,发现现在使用的PHP视频教程常不错!
希望对和我一样喜欢自学的朋友,一起实现理想!

 

今天在一个技术贴吧中发现了一张非常好帖子。关于网站中的文件下载提速,关键的核心技术在于Apache的module mod_xsendfile这个功能模块的使用。废话不多说,原帖如下,供大家参考学习。

一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件.

  但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作. 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载.

  $file = "/tmp/dummy.tar.gz";

  header("Content-type: application/octet-stream");

  header('Content-Disposition: attachment; filename="' . basename($file) . '"');

  header("Content-Length: ". filesize($file));

  readfile($file);

  但是这个有一个问题, 就是如果文件是中文名的话, 有的用户可能下载后的文件名是乱码.

  于是, 我们做一下修改(参考: :

  

  $file = "/tmp/中文名.tar.gz";

  $filename = basename($file);

  header("Content-type: application/octet-stream");

  //处理中文文件名

  $ua = $_SERVER["HTTP_USER_AGENT"];

  $encoded_filename = urlencode($filename);

  $encoded_filename = str_replace("+", "%20", $encoded_filename);

  if (preg_match("/MSIE/", $ua)) {

  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');

  } else if (preg_match("/Firefox/", $ua)) {

  header("Content-Disposition: attachment; filename*=\"utf8''" . $filename . '"');

  } else {

  header('Content-Disposition: attachment; filename="' . $filename . '"');

  }

  header('Content-Disposition: attachment; filename="' . $filename . '"');

  header("Content-Length: ". filesize($file));

  readfile($file);

  输出的时候, 如果是Apache + PHP mod, 那么还需要发送到Apache的输出缓冲区. 最后才发送给用户. 而对于Nginx + fpm如果他们分开部署的话, 那还会带来额外的网络IO.

  恩, 现在看起来好多了, 不过还有一个问题, 那就是readfile, 虽然PHP的readfile尝试实现的尽量高效, 不占用PHP本身的内存, 但是实际上它还是需要采用MMAP(如果支持), 或者是一个固定的buffer去循环读取文件, 直接输出.

  那么, 能不能不经过PHP这层, 直接让Webserver直接把文件发送给用户呢?

  今天, 我看到了一个有意思的文章: How I PHP: X-SendFile.

  我们可以使用Apache的module mod_xsendfile, 让Apache直接发送这个文件给用户:

  

  $file = "/tmp/中文名.tar.gz";

  $filename = basename($file);

  header("Content-type: application/octet-stream");

  //处理中文文件名

  $ua = $_SERVER["HTTP_USER_AGENT"];

  $encoded_filename = urlencode($filename);

  $encoded_filename = str_replace("+", "%20", $encoded_filename);

  if (preg_match("/MSIE/", $ua)) {

  header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');

  } else if (preg_match("/Firefox/", $ua)) {

  header("Content-Disposition: attachment; filename*=\"utf8''" . $filename . '"');

  } else {

  header('Content-Disposition: attachment; filename="' . $filename . '"');

  }

  header('Content-Disposition: attachment; filename="' . basename($file) . '"');

  //让Xsendfile发送文件

  header("X-Sendfile: $file");

  Lighttpd和Nginx也有类似的模块, 大家有兴趣的可以去找找看

  X-Sendfile头将被Apache处理, 并且把响应的文件直接发送给Client

1
6
分享到:
评论

相关推荐

    Java程序性能优化 让你的Java程序更快、更稳定pdf文档视频资源

    视频教程可能通过实例演示上述概念,让你更直观地学习如何应用这些理论知识。通过实战练习,你可以更好地掌握性能调优技巧。 除此之外,重构也是性能优化的一个重要环节。重构是为了改善代码的结构和可读性,而不...

    下载速度最快的软件,绝对是一流速度

    描述中提到的“比迅雷、快车等下载软件下载速度快很多”,进一步确认了这个软件在下载性能上具有显著优势,可能采用了独特的优化策略或算法,使得用户在下载大文件或处理多个下载任务时能体验到更快的速度。...

    Everything 全球速度最快的电脑文件搜索工具 快到你吐血喷饭

    如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,如果正在使用或放弃了Locate32,都值得推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具...

    电驴积分文件下载,提高你的下载速度

    标题中的“电驴积分文件下载,提高你的下载速度”指的是使用电驴(eMule)这款P2P(点对点)文件分享软件时,通过获取和使用积分来优化下载体验的一种方法。电驴是一个开源的文件共享网络客户端,用户可以通过它来搜索...

    Everything是速度最快的文件搜索软件

    Everything软件简介 Everything是速度最快的文件搜索软件...或者用了Locate32也不满意(或满意),推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything! 注意:文件系统需要NTFS格式

    让Oracle跑得更快

    "让Oracle跑得更快Ch1-3.CHM"这个文件很可能包含了上述内容的详细讲解,涵盖了数据库性能优化的多个层面,包括基础理论、实践技巧和案例分析。通过深入学习这个文档,你可以掌握如何诊断和解决Oracle性能问题,实现...

    让你的CPU 处理的更快

    标题中的“让你的CPU 处理的更快”指的是提高计算机中央处理器(CPU)的性能,使其能更高效地处理计算任务。这通常涉及到优化系统设置、升级硬件、使用性能优化软件,以及理解如何分配系统资源。 1. **CPU优化基础*...

    让oracle跑得更快

    由于文件中的部分内容是重复的链接,我们将忽略这些重复内容,并专注于标题和描述中提到的“让oracle跑得更快”以及“如果你深入学习oracle,如果你想学习优化oracle,下它吧!”。以下是对这些知识点的详细说明: ...

    网络文件下载和网络测速

    通过这些资源,你可以更好地理解网络文件下载的原理,学习如何优化下载速度,同时也能掌握网络测速的方法,从而对自己的网络连接进行全面的评估和优化。 总的来说,网络文件下载和网络测速是网络使用中的基础技能,...

    移动winsxs文件 让Windows 7运行速度更快

    标题 "移动winsxs文件 让Windows 7运行速度更快" 暗示了这个话题主要关注如何通过优化Windows 7系统中的winsxs文件夹来提升系统性能。winsxs(Windows Side-by-Side)文件夹是Windows操作系统的一个核心组成部分,它...

    点对点文件上传下载软件.zip_下载软件_文件上传下载_点对点的文件传输

    点对点文件上传下载软件是一种专门用于实现两个或多个用户之间直接进行文件交换的应用程序。在传统的文件传输中,我们通常依赖于中心服务器来存储和分发文件,但点对点(P2P)技术打破了这种模式,允许用户之间直接...

    搜索速度快得让你震惊!极为优秀的免费文件搜索工具Everything中文绿色版下载 (不到1MB)

    “搜索速度快得让你震惊”这句话暗示了Everything的突出特点,即它的即时搜索功能。这种功能的实现依赖于其后台持续更新的文件索引,使得无论何时输入关键词,都能立刻返回相关文件的列表。对于经常需要处理大量文件...

    快速拷贝工具。G级以上文件更快

    用户只需下载并安装这个压缩包中的软件,按照界面指示进行操作,即可体验到比系统自带复制功能更快的拷贝速度。 总的来说,快速拷贝工具是针对大数据量文件转移场景的有效解决方案,它通过优化的技术手段提升了拷贝...

    小兰下载王下载软件超快速度下载!超越迅雷!

    下载速度是评价一款下载工具的关键指标,小兰下载王通过优化的多线程技术和智能调度算法,实现了比迅雷更快的下载速度。这意味着用户可以在更短的时间内完成大文件的下载,极大地提升了效率。此外,它可能支持HTTP、...

    图象的随机载入,方法繁了点,不过,速度更快(13KB)

    标题中的“图象的随机载入,方法繁了点,不过,速度更快”指的是在编程中实现图像资源的异步加载技术,以提高程序运行效率。这种方法通常在处理大量图像或者需要快速响应用户操作的场景下使用。图像的随机载入意味着...

    下载器用于更快网速下载

    在标题"下载器用于更快网速下载"中,我们可以理解到下载器的关键作用是优化下载过程,使得用户能够在网速不稳定或者较差的情况下,依然能够以较高的速度获取网络上的文件。 下载器的工作原理通常是通过多线程或者多...

    电脑文件搜索工具速度快

    用户界面直观,支持关键词模糊匹配和多种搜索条件,如文件名、文件大小、修改日期等,让你能更精确地找到目标文件。 此外,"Everything"还提供了一些高级功能,比如支持通配符搜索,你可以使用"*"和"?"进行模糊匹配...

    电驴积分文件(可在迅雷中导入,提高下载速度)

    将“电驴积分文件”导入迅雷新版客户端,可以使得迅雷用户在下载电驴网络上的文件时,享受到更快的下载速度。这得益于积分系统为用户提供的优先权,高积分用户在下载时会受到更多其他用户的优先服务。 "clients.met...

    将xp系统速度变的更快

    2. **优化DNS设置**:使用更快的DNS服务器,如Google的公共DNS(8.8.8.8 和 8.8.4.4),可以加快网页的解析速度。 3. **清除浏览器缓存和Cookies**:定期清理IE或Firefox等浏览器的缓存和Cookies,可以提高网页加载...

    让Oracle跑得更快.pdf

    鉴于提供的文件信息中没有包含可分析的具体内容,我无法针对"让Oracle跑得更快.pdf"这一电子书提供详细的知识点。然而,基于标题中提到的“Oracle”和“跑得更快”,我可以提供一些普遍性的知识点和建议,这些建议...

Global site tag (gtag.js) - Google Analytics