当前位置:首页 > 日记 > 正文

让php提供更快的文件下载代码

让php提供更快的文件下载代码
但是,没有办法做一些统计,权限检查等。因此,很多时候,我们使用PHP进行转发,为用户提供文件下载。
复制代码代码如下所示:
< PHP
文件;
标题(内容类型:应用程序/字节流);
头('content-disposition:附件文件名=。basename(文件)。);
标题(内容长度:。文件大小(文件));
ReadFile(文件);

但问题是,如果文件是中文名,有些用户可以下载文件的名称是一个随机代码。

因此,我们做出改变(参考)::
复制代码代码如下所示:
< PHP
文件;
为文件名= basename(文件);
标题(内容类型:应用程序/字节流);
文件名中文/治疗
UA _server美元美元{ =http_user_agent};
encoded_filename美元= urlencode($文件名);
encoded_filename美元= str_replace(+
如果(preg_match( / / MSIE
头('content-disposition:附件文件名=。encoded_filename美元。);
} else if(preg_match( / / 火狐
标题(内容配置:依恋;文件名=utf8。文件名;
{人}
头('content-disposition:附件文件名=。文件名;
}
头('content-disposition:附件文件名=。文件名;
标题(内容长度:。文件大小(文件));
ReadFile(文件);

好了,现在看起来好多了,但是有一个问题,那就是ReadFile,而PHP ReadFile来实现高效,不占用内存,但它仍然需要使用mmap(如果支持的话),或固定循环缓冲区直接读取文件的输出。

如果输出是Apache + PHP mod mod,它也需要发送到Apache的输出缓冲区。最后,它将被发送给用户。Nginx + FPM,如果他们单独部署,它会带来额外的网络IO ..

那么,你能直接将文件直接引导到用户,而不必经过PHP层吗
今天,我看到了一篇有趣的文章:我x-sendfile PHP。

我们可以使用Apache的模块mod_xsendfile让Apache发送此文件,直接向用户:

复制代码代码如下所示:
< PHP
文件;
为文件名= basename(文件);
标题(内容类型:应用程序/字节流);
文件名中文/治疗
UA _server美元美元{ =http_user_agent};
encoded_filename美元= urlencode($文件名);
encoded_filename美元= str_replace(+
如果(preg_match( / / MSIE
头('content-disposition:附件文件名=。encoded_filename美元。);
} else if(preg_match( / / 火狐
标题(内容配置:依恋;文件名=utf8。文件名;
{人}
头('content-disposition:附件文件名=。文件名;
}
头('content-disposition:附件文件名=。basename(文件)。);
/ /让xsendfile发送文件
标题(x-sendfile:文件);

的x-sendfile头将由Apache处理和发送响应文件直接给客户。
Lighttpd和Nginx有相似的模块,和人们在寻找感兴趣的。

相关文章

对ob_start使用分析()函数在PHP

对ob_start使用分析()函数在PHP

函数,电脑软件,ob_start,PHP,ob_start()函数用来打开缓冲,如header()函数之前,如果有输出,包括输入 / / /太空包会有头都准备好发送错误,这可以用ob_start第一(开)PHP代码和回声的缓冲区(数据块)的产量将进入缓冲区并没有立即输出。当然打开缓冲的作用…

与Linux站和sbin目录的作用差异

与Linux站和sbin目录的作用差异

作用,差异,目录,电脑软件,Linux,导读:本文介绍了在Linux中的两个主要目录:bin和sbin,他们的角色和差异,和朋友学习linux参考 在Linux系统中,有两个重要的目录:bin和sbin,包括 / / / usr bin,bin / / sbin,和 / usr / sbin /,分别。 箱子: Bin是二进…

Solaris系统无法启动图形界面故障

Solaris系统无法启动图形界面故障

系统,无法启动,故障,图形界面,解决方案,点评:1、OK设置问题,输出设置为串口,屏幕可运行花屏。 2,显示的是不匹配的,非太阳或其兼容的显示器使用,其指标不与显示卡的输出相匹配。一般来说,太阳的显示卡可以自动识别和匹配的显示器显示参数根据显示…

MWD是mwd.exe-使用

MWD是mwd.exe-使用

电脑软件,MWD,mwd,exe,点评:mwd.exe是W32 / graps-a蠕虫相关程序。该病毒利用Windows默认的隐藏共享过程中传播,并猜测管理员密码 进程文件:MWD或mwd.exe 进程名称:W32 / graps-a蠕虫 过程类别:安全风险的过程 英文描述: mwd.exe加入系统由于W3…

PHP数组不确定层次数据的分层处理

PHP数组不确定层次数据的分层处理

分层,数组,数据,不确定,代码,复制代码代码如下所示: *创建父树树数组 *参数 * AR数组,由邻接表组织的数据 *作为id数组中的主键或键连接。 *作为$键数组下标关联中的父键或键。 *返回多维数组 ** 功能find_parent($ ar,$id = 'id',PID = 'pi…

坦克指挥官指挥官直觉技能技能直觉

坦克指挥官指挥官直觉技能技能直觉

指挥官,恢复,直觉,技能,坦克,问题: 最近,玩坦克世界的电脑,发现司机的直觉技巧从不失败,太亮的灯泡;我发现了敌人。原因是什么 答案uff1a 指挥官在坦克的直觉,游戏世界不工作,这是由于最近0.8.3版本的更新,在UI界面的衣服增加了一个消息,通知所有…

改进的TimesTen数据库软件Oracle收

改进的TimesTen数据库软件Oracle收

收购,数据库,绩效,电脑软件,TimesTen,Oracle当然你看到的是:提高软件性能的TimesTen数据库Oracle收购。Oracle在6月9日宣布,它同意收购的公司。TimesTen是一家私营软件公司的产品,可以提高数据库应用程序需要快速响应时间的性能,如股票市场和机…

与$相对的$相对路径的PHP代码。

与$相对的$相对路径的PHP代码。

相对路径,代码,电脑软件,PHP,面试问题中的PHP问题: 美元= ' / / / / B C D / e.php;B =美元/ / / / 34 B 12 / / / c.php;B美元计算相对于美元的路径应该..或.. / C / D PHP面试问题的答案: 复制代码代码如下所示: 功能getrelative($,$){ $ ARR =…

如何设置Win7窗口自动改变窗口的颜

如何设置Win7窗口自动改变窗口的颜

条件,窗口,如何设置,颜色,天气,注释:我们知道在Windows 7系统中,当窗口没有改变时,窗口的颜色是固定的。 我们知道,在Windows 7系统中,当窗口不是取代,窗口的颜色是固定的。下面,萧边教你修改Windows 7窗口的颜色,让窗口与天气的变化自动改变,这样…

如何在WIN7系统开始搜索框消失

如何在WIN7系统开始搜索框消失

搜索,系统,如何在,电脑软件,点评:Win7的搜索框,无论是寻找软件,使用命令打开什么,通过这一功能,没有它,真的很不习惯,如果没有怎么找得回来这里有一个很好的方法来指一个感兴趣的朋友。 win7,我认为最好的办法是使用Win7的搜索框。无论是寻找软件和…

苹果为AppStore测试搜索提供了新功

苹果为AppStore测试搜索提供了新功

新功能,搜索,测试,电脑软件,AppStore,北京时间3月26日,根据macstories网站,苹果应用商店测试搜索推荐的功能,为用户提供应用建议。 时间规划的共同创始人Olga Osadcha首先发现了这个功能,他发表了对Twitter的新功能的截图,截图显示,当用户输入在…

微软升级iPad办公室:支持无线打印

微软升级iPad办公室:支持无线打印

支持,升级,办公室,电脑软件,iPad,北京时间4月30日消息,微软刚刚升级了iPad版的Office套件,对苹果公司的AirPrint功能实现无线打印的应用。 上个月,微软刚刚推出的iPad的Office办公套件包括Word、Excel和PowerPoint,和AirPrint是苹果的OS X Lio…