我自己也是搜寻了很多网上的资料,发现现在使用的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
分享到:
相关推荐
如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,如果正在使用或放弃了Locate32,都值得推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具...
移动winsxs文件让Win7运行速度更快.docx
Everything软件简介 Everything是速度最快的文件搜索软件...或者用了Locate32也不满意(或满意),推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything! 注意:文件系统需要NTFS格式
通过文档可以让你了解到是什么在影响着数据库的性能,如何才能让数据库更为优化,让系统速度更快
工具包.rar 集合文件分割器,磁盘数据恢复工具,让你的CPU处理的更快等工具。
如果不满意Windows自带的搜索工具、Total Commander的搜索、Google 桌面搜索或百度硬盘搜索,如果正在使用或放弃了Locate32,都值得推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具...
清除电脑使用过程中产生的无用的垃圾文件,让电脑运行速度更快!
如何让SQL运行得更快
像 git-filter-branch 一样删除大的或麻烦的 blob,但速度更快 - 并用 Scala 编写-资助 BFG $ bfg --strip-blobs-bigger-than 1M --replace-text banned.txt repo.git BFG 是一种更简单、更快(快10 - 720倍)的...
NULL 博文链接:https://authware.iteye.com/blog/1391507
Everything软件简介 Everything是速度最快的文件搜索软件...或者用了Locate32也不满意(或满意),推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything! 注意:文件系统需要NTFS格式
是一款跨平台速度快的免费远程连接/远程桌面控制/远程发送、接受文件软件,据说是前 TeamViewer 开发小组人员自立门户的产品,它拥有先进的视频压缩技术 DeskRT, 可以轻松穿透防火土「qi」啬「ang」/路由器,实测在...
用于更快速,准确下载需要的文件。 5) 深度分析。eGet可对目标网站或页面进行快速分析,支持任意网页深度。 6) 干净。eGet会实时释放占用的系统资源,从而确保大批量下载的同时不影响其他使用。 7) 简洁快速的...
泛微OA ecology 9二次开发培训 01 / 流程表单校验,建模表单校验 ...资源很全面,下载不会吃亏,Ecology泛微的学习文件,有PPT,有二次开发的学习文档,学习完之后会对泛微有一个新的认识,开发起来速度更快,效率更高
Everything是速度最快的文件搜索软件,可以瞬间搜索到你需要的文件。...或者用了Locate32也不满意(或满意),推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything!
Totalcmd是相当好用的资源管理器,并且具有最快的复制文件的速度。本人实测,基本可以达到磁盘能达到的最快速度,绝对是比fastcopy之类的复制工具速度更快,使用过之后你就知道了。
相比较初代 GNU Wget,Wget2 速度更快,支持更多的协议,特别是围绕 HTTP/2 和压缩,支持多线程/并行连接,以及其他改进。 GNU Wget2 2.0 增加了 HTTP2 上传,通过新的 -download-attr 选项支持 HTML5 下载属性,...
百度文档免费下载软件,让你不再担心自己的积分多少!速度快!下载更方便!!
或者用了Locate32也不满意(或满意),我会推荐这款体积小巧、免安装、免费、速度极快(比Locate32更快)的文件搜索工具Everything. 特点: 它体积小巧,界面简洁易用,快速建立索引,快速搜索,同时占用极低的系统...
更快的复制/移动文件:TeraCopy 使用动态调整磁盘缓冲区,以减少寻道时间。异步复制加速两个物理硬盘之间的文件传输。 断点续传文件传输功能:你可以暂停复制文件过程以释放系统资源,并在想继续传输时通过一次单击...