Home  >  Article  >  Backend Development  >  How to solve the problem of garbled php download files

How to solve the problem of garbled php download files

藏色散人
藏色散人Original
2020-12-02 09:49:542409browse

Solutions to garbled PHP downloaded files: 1. Use the flush function to refresh the output buffer to solve the problem of garbled PHP downloaded files; 2. Use the ob_clean function to clear the output buffer to solve the problem of garbled PHP downloaded files.

How to solve the problem of garbled php download files

The operating environment of this tutorial: Windows 7 system, PHP version 7.1. This method is suitable for all brands of computers.

Recommended: "PHP Video Tutorial"

PHP method of using file stream to download files (attached: solving the problem of garbled downloaded file content)

1. flush - refresh the output buffer

2. ob_clean - clear (erase) the output buffer

This function is used to discard the contents of the output buffer.

This function will not destroy the output buffer, but functions like ob_end_clean() will destroy the output buffer.

Note: The above two functions can solve the problem of garbled content of PHP download files

The code is as follows

// 文件名不要用中文
//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");

The above is the detailed content of How to solve the problem of garbled php download files. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn