仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1050|回复: 19
打印 上一主题 下一主题

[学习教程] PHP教程之nginx sendfile:利用Nginx的X-Sendfile...

[复制链接]
爱飞 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:28:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
给你的建议是,有些最常用的语句是需要记住的 比如if for while这些、其他的一般语句你只要知道有这个函数或者有这个功能就可以了,当你用的时候你可以凭借记忆搜索就可以了。   
良多时分用户需求从网站下载文件,假如文件是可以经由过程一个固定链接公然获得的,那末咱们只需将文件寄存到 webroot 下的目次里就好。但大多半情形下,咱们需求做权限掌握,例以下载 PDF 账单,又例以下载网盘里的档案。这时候,咱们凡是借助于剧本代码来完成,而这无疑会增添办事器的承当。
例以下面的代码:
<?php
    // 用户身份认证,若验证掉败跳转
    authenticate();
    // 获得需求下载的文件,若文件不存在跳转
    $file = determine_file();
    // 读取文件内容
    $content=file_get_contents($file);
    // 发送适合的 HTTP 头
    header("Content-type: application/octet-stream");
    header('Content-Disposition: attachment; filename="' . basename($file) . '"');
    header("Content-Length: ". filesize($file));
    echo $content; // 或 readfile($file);
?>1、如许做有甚么成绩?
如许做意味着咱们的法式需求将文件内容从磁盘经由一个固定的 buffer 去轮回读取到内存,再发送给前端 web 办事器,最初才抵达用户。当需求下载的文件很大的时分,这类体例将损耗大批内存,乃至激发 php 历程超时或溃散。Cache 也很头疼,更不必说中止重连的情形了。
一个幻想的处理体例应当是,由 php 法式停止权限反省等逻辑判别,一切经由过程后,让前台的 web 办事器直接将文件发送给用户――像 Nginx 如许的前台更擅长处置静态文件。如许一来 php 剧本就不会被 I/O 壅塞了。
2、甚么是 X-Sendfile?
X-Sendfile 是一种将文件下载恳求由后端使用转交给前端 web 办事器处置的机制,它可以消弭后端法式既要读文件又要处置发送的压力,从而明显进步办事器效力,出格是处置大文件下载的情况下。
X-Sendfile 经由过程一个特定的 HTTP header 来完成:在 X-Sendfile 头中指定一个文件的地址来公告前端 web 办事器。当 web 办事器检测到后端发送的这个 header 后,它将疏忽后真个其他输入,而利用本身的组件(包含 缓存头 和 断点重连 等优化)机制将文件发送给用户。
不外,在利用 X-Sendfile 之前,咱们必需分明这并非一个尺度特征,在默许情形下它是被大多半 web 办事器禁用的。而分歧的 web 办事器的完成也纷歧样,包含划定了分歧的 X-Sendfile 头格局。假如设置装备摆设恰当,用户能够下载到 0 字节的文件。
利用 X-Sendfile 将答应下载非 web 目次中的文件(例如/root/),即便文件在 .htaccess 回护下制止会见,也会被下载。
分歧的 web 办事器完成了分歧的 HTTP 头 sendfile 头 利用的 web 办事器
X-Sendfile Apache, Lighttpd v1.5, Cherokee
X-LIGHTTPD-send-file Lighttpd v1.4
X-Accel-Redirect Nginx, Cherokee
利用 X-SendFile 的弱点是你得到了对文件传输机制的掌握。例如假如你但愿在完成文件下载后履行某些操作,好比只答应用户下载文件一次,这个 X-Sendfile 是没法做到的,由于后台的 php 剧本其实不晓得下载是不是胜利。
3、如何利用?
Apache 请参考mod_xsendfile模块。上面我引见 Nginx 的用法。
Nginx 默许撑持该特征,不需求加载额定的模块。只是完成有些分歧,需求发送的 HTTP 头为 X-Accel-Redirect。别的,需求在设置装备摆设文件中做以下设定
location /protected/ {
  internal;
  root   /some/path;
}internal 暗示这个途径只能在 Nginx 外部会见,不克不及用阅读器直接会见避免未受权的下载。 本文链接http://www.cxybl.com/html/wlbc/Php/20130504/37467.html掌握静态网页的制作技术是学习开发网站的先决条件,这一点就讲到这里,因为这篇文章不是教程文章,也就不对技术进行深入的刨析了。
活着的死人 该用户已被删除
沙发
发表于 2015-2-3 23:31:32 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
分手快乐 该用户已被删除
板凳
发表于 2015-2-4 15:27:31 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-10 02:57:04 | 只看该作者
建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。
灵魂腐蚀 该用户已被删除
5#
发表于 2015-2-19 10:08:48 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
变相怪杰 该用户已被删除
6#
发表于 2015-3-1 18:04:21 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
若相依 该用户已被删除
7#
发表于 2015-3-3 11:07:08 | 只看该作者
爱上php,他也会爱上你。
透明 该用户已被删除
8#
发表于 2015-3-11 10:09:33 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
再见西城 该用户已被删除
9#
发表于 2015-3-12 09:35:29 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
小魔女 该用户已被删除
10#
发表于 2015-3-17 19:09:48 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
飘灵儿 该用户已被删除
11#
发表于 2015-3-20 09:26:20 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
小女巫 该用户已被删除
12#
发表于 2015-3-27 09:08:49 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
第二个灵魂 该用户已被删除
13#
发表于 2015-4-10 10:11:07 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
因胸联盟 该用户已被删除
14#
发表于 2015-4-18 02:52:20 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
莫相离 该用户已被删除
15#
发表于 2015-4-21 23:15:05 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
冷月葬花魂 该用户已被删除
16#
发表于 2015-4-23 03:15:56 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
精灵巫婆 该用户已被删除
17#
发表于 2015-4-23 14:12:32 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
海妖 该用户已被删除
18#
发表于 2015-5-10 01:50:48 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
乐观 该用户已被删除
19#
发表于 2015-5-10 06:56:50 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
只想知道 该用户已被删除
20#
发表于 2015-5-12 10:15:29 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 01:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表