使用php的header实现下载功能
2016-09-26 13:08
399 查看
<?php /** * Author: Pele <1170420826@qq.com> * * 文件下载: * 一般来说, 我们可以通过直接让URL指向一个位于Document Root下面的文件, 来引导用户下载文件。 * 但是, 这样做, 就没办法做一些统计, 权限检查, 等等的工作。 于是, 很多时候, 我们采用让PHP来做转发, 为用户提供文件下载。 * * 相关地址: * http://www.laruence.com/2012/05/02/2613.html * https://my.oschina.net/junn/blog/97699 */ // 当文件名为中文时,可能会出现乱码。 $file = '中文.zip'; // 处理中文文件名 $file = iconv("UTF-8", "GBK", $file); // 通过这句代码客户端浏览器就能知道服务端返回的文件形式(告诉浏览器文档类型(mime类型); octet-stream指的是二进制文件类型; 下载任何类型的文件都可以这么指定) header("Content-Type: application/octet-stream"); // 告诉浏览器返回的文件的名称(如果将attachment换成inline意思为在线打开) header("Content-Disposition: attachment; filename=" . $file); // 告诉客户端浏览器返回的文件大小是按照字节进行计算的 header("Accept-Ranges: bytes"); // 告诉浏览器返回的文件大小 header("Content-Length: " . filesize($file)); // 传输方式(二进制的) header("Content-Transfer-Encoding: binary"); /** * 虽然PHP的readfile尝试实现的尽量高效, 不占用PHP本身的内存, * 但是实际上它还是需要采用MMAP(如果支持), 或者是一个固定的buffer去循环读取文件, 直接输出。 * * 输出的时候, 如果是Apache + PHP mod, 那么还需要发送到Apache的输出缓冲区。 * 最后才发送给用户。 而对于Nginx + fpm如果他们分开部署的话, 那还会带来额外的网络IO。 * * 那么, 能不能不经过PHP这层, 直接让Webserver直接把文件发送给用户呢? * 我们可以使用Apache的module mod_xsendfile, 让Apache直接发送这个文件给用户。 * * 让Xsendfile发送文件: * header("X-Sendfile: $file"); * * 此外还可以: * $fp = @fopen($file, "r"); * echo @fread($fp, filesize($file)); * @fclose($fp); */ @readfile($file);
相关文章推荐
- PHP使用header方式实现文件下载功能
- PHP使用header方式实现文件下载
- php header()函数实现下载功能
- 使用PHP实现密保卡功能实现代码<打包下载直接运行>
- php使用curl实现ftp文件下载功能
- php使用ftp实现文件上传与下载功能
- PHP header()函数实现文件下载功能
- 使用PHP实现密保卡功能实现代码<打包下载直接运行>
- 使用PHP 实现二维码扫描下载的功能
- ubuntu下,使用postfix实现php发送mail功能
- 使用PHP实现密保卡功能
- 使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能
- iphone开发--使用ASIHTTPRequest实现下载,断点续传功能
- 使用QRcode 一行代码实现二维码扫描下载的功能
- 使用QRCode轻松实现二维码扫描下载的功能
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- 使用PHP实现生成固定大小图片缩略图功能(智能裁剪,图片不失真)
- php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)
- Ajax应用:使用jQuery和PHP实现功能开关效果
- ubuntu下,使用postfix实现php发送mail功能。[转]