知识大全 让PHP更快的为用户提供文件下载
Posted 文件
篇首语:峥嵘过去已经彪炳史册,璀璨当下正在不断延伸,光明未来需要踏实开拓。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 让PHP更快的为用户提供文件下载相关的知识,希望对你有一定的参考价值。
让PHP更快的为用户提供文件下载 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
一般来说 我们可以通过直接让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(“+” “% ” $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*=”utf “ $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(“+” “% ” $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*=”utf “ $filename ” )
else
header( Content Disposition attachment filename=“ $filename ” )
header( Content Disposition attachment filename=“ basename($file) ” )
//让Xsendfile发送文件
header(“X Sendfile $file”)
cha138/Article/program/PHP/201311/21065相关参考
实只要简单的实现ajax的检测用户名正规点要分三个文件我这里简单点: 第一个indexphp<!DOCTYPEPUBLIC"//WC//DTDXHTMLTransitional//EN""
在php中如何把中的内容生成到word文档中 php把中的内容生成到word文档中时不居中显示问题即会默认按照web视图进行显示 php把中的内容生成到word文档中时相关样式不兼容问题 正
使用PHP会话(Session)实现用户登陆功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n
PHP取得用户浏览器和系统函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! //操作系统fun
如何打开PHP文件,PHP文件怎么打开? 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! “php
营业执照正本、开户证明、组织机构代码证、税务登记证正本、企业法人身份证、开户许可证、专款专用的文件、授权书等。
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()A、直接与网络服务器硬盘和网卡驱动程序连接。B、为本地的应用提供各类网络服务。C、对用户访问服务器的权限和数据加密进行管理。D、对多个用户
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()A、直接与网络服务器硬盘和网卡驱动程序连接。B、为本地的应用提供各类网络服务。C、对用户访问服务器的权限和数据加密进行管理。D、对多个用户
PHP典型模块与项目实战大全:PHP文件下载的原理及实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
新浪微博API开发简介之PHP基础篇-用户授权 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现