PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)

记得高中时候做过游戏私服,那时候的游戏主页是用PHP写的,因为文件很固定,客户端,登陆器和一些小工具,文件数目也不是很多,所以都是直接把下载链接写死的,直接链接到本地服务器的文件目录,今天QQ群有个朋友突然问我用文件流做PHP下载功能,顺手写了个小Demo,代码很简单,注释也全,直接上代码吧~

1、flush — 刷新输出缓冲

2、ob_clean — 清空(擦掉)输出缓冲区

此函数用来丢弃输出缓冲区中的内容。

此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。

注:上面2个函数可以解决PHP下载文件内容乱码

<?php

    //fname为要下载的文件名
    //$fpath为下载文件所在文件夹,默认是downlod
    function download($fname,$fpath="download/"){

        //避免中文文件名出现检测不到文件名的情况,进行转码utf-8->gbk
        $filename=iconv(‘utf-8‘, ‘gb2312‘, $fname);
        $path=$fpath.$filename;
        if(!file_exists($path)){//检测文件是否存在
            echo "文件不存在!";
            die();
        }

        $fp=fopen($path,‘r‘);//只读方式打开
        $filesize=filesize($path);//文件大小

        //返回的文件(流形式)
        header("Content-type: application/octet-stream");
        //按照字节大小返回
        header("Accept-Ranges: bytes");
        //返回文件大小
        header("Accept-Length: $filesize");
        //这里客户端的弹出对话框,对应的文件名
        header("Content-Disposition: attachment; filename=".$filename);
        //================重点====================
        ob_clean();
        flush();
        //=================重点===================
        //设置分流
        $buffer=1024;
        //来个文件字节计数器
        $count=0;
        while(!feof($fp)&&($filesize-$count>0)){
            $data=fread($fp,$buffer);
            $count+=$data;//计数
            echo $data;//传数据给浏览器端
        }

        fclose($fp);

    }

    download("CGEX脚本清单.doc");

?>

PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)

时间: 2024-10-17 00:00:28

PHP使用文件流下载文件方法(附:解决下载文件内容乱码问题)的相关文章

ASP.NET(C#) Web Api通过文件流下载文件到本地实例

下载文件到本地是很多项目开发中需要实现的一个很简单的功能.说简单,是从具体的代码实现上来说的,.NET的文件下载方式有很多种,本示例给大家介绍的是ASP.NET Web Api方式返回HttpResponseMessage下载文件到本地.实现的方法很简单,其中就是读取服务器的指定路径文件流,将其做为返回的HttpResponseMessage的Content.直接贴出DownloadController控件器的代码: using System; using System.Collections.

Amazon 解决下载文件乱码

Amazon 解决下载文件乱码 大家在做多个站点的时候,可能会遇到下载下来的报告文件出现乱码. 法国站点和意大利站点均会出现这样的情况,那怎么解决呢? 这是由于编码的问题而导致,在我们读取数据插入到本地数据库的时候,不妨先将格式转成对应国家能正确识别的格式. 在文档中也有看到. 还要一个问题需要说明,由于操作系统设置默认语言的原因,在小国家站点,我们下载下来的报告可能会出现乱码的情况.这种情况很正常,在调用接口的时候,也没有办法去解决直接下载就出现正常编码. 现在的方法是将下载下来的乱码文件,通

putty windows上传文件到linux服务器 &amp; 从linux服务器 下载文件到 windows

从putty官网下载putty软件:putty.exepscp.exepsftp.exe等软件 也可以自己下windows安装包putty-0.63-installer.exe 本人直接下载putty-0.63-installer.exe安装包了,然后直接安装 使用pscp方式从windows上传文件到linux服务器 在CMD命令行中进入到putty安装目录 输入pscp 回车 pscp 跟我们平时使用的linux scp命令操作的都是类似的 现在我直接从windows本地上传一个文件到lin

Struts2 文件下载(中文处理方法以及控制下载文件名称和扩展名)

Struts2的框架提供了现成的文件下载方式,大大简化的问价下载的使用便利性.网上的列子有很多,我把一些大家普遍比较关注的点,集中一下,给出一个整体方案. 一般我们照着书本或者网上的列子写出了一个Demo,都会存在几个疑问: 1.下载文件的文件名怎么搞?不搞的话浏览器默认名字是提交的action的名字 2.文件名里面想搞中文,但是实际上下载文件名出现了乱码或不显示中文怎么搞? 3.文件的扩展名怎么搞?比如要下载的文件是word(doc,docx)或者excel(xls,xlsx)怎么办?难道让用

文件下载(解决下载文件文件名乱码)

不同浏览器下载文件时会出现文件名乱码问题,根据请求浏览器类型处理文件名.

更新下载文件,chrome报告“不常用的下载文件 可能存在风险”(&lt;file&gt; is not commonly downloaded and could be dangerous),记录

主站更新pc客户端exe安装文件,chrome下载后报告“不常用的下载文件”.搜索中文没有找到问题,搜索google也没有找到有用的解决办法. 1. response的header中content-type字段不是标准mime格式 2. 将文件移动至其它域名 都没有用,最后忽然就不报错了,看来应该就像chrome中介绍的那样,当chrome无法判定一个新文件是否恶意时会提示用户,那么当下载次数达到一定的时候这个警告就会取消了. 这是来自黑盒外的猜测 来自 https://bugs.chromiu

Asp.net WebAPI 使用流下载文件注意事项

public HttpResponseMessage Post(string version, string environment, string filetype) { var path = @"C:\Temp\test.exe"; HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); var stream = new FileStream(path, FileMode.Open, File

解决下载文件时,多种浏览器下中文乱码问题

<?php $ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20", $encoded_filename); header('Content-Type: application/octet

Asp.Net Web Api 2 实现多文件打包并下载文件示例源码_转

一篇关于Asp.Net Web Api下载文件的文章,之前我也写过类似的文章,请见:<ASP.NET(C#) Web Api通过文件流下载文件到本地实例>本文以这篇文章的基础,提供了ByteArrayContent的下载以及在下载多个文件时实现在服务器对多文件进行压缩打包后下载的功能.关于本文中实现的在服务器端用.NET压缩打包文件功能的过程中,使用到了一个第方类库:DotNetZip,具体的使用将在正文中涉及.好了,描述了这么多前言,下面我们进入本文示例的正文. 一.创建项目 1.1 首先创