ホームページ  >  記事  >  バックエンド開発  >  PHPダウンロードファイルの文字化け問題を解決する方法

PHPダウンロードファイルの文字化け問題を解決する方法

王林
王林オリジナル
2020-11-06 14:04:472977ブラウズ

php でファイルをダウンロードするときに文字化けするコードの解決策: まず、ファイルをダウンロードする前に ob_clean 関数を使用して出力バッファをクリアし、次に、flush 関数を使用して出力バッファを更新し、最後にファイルをダウンロードします。

PHPダウンロードファイルの文字化け問題を解決する方法

解決策:

次の 2 つの関数を使用して、ダウンロード前に処理します。

(推奨チュートリアル: java コース)

flush — 出力バッファをフラッシュします

ob_clean — 出力バッファをクリア (消去)

この関数は、出力バッファの内容を破棄するために使用されます。

この関数は出力バッファを破壊しませんが、ob_end_clean() のような関数は出力バッファを破壊します。

コードサンプル:

// 文件名不要用中文//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トレーニング

以上がPHPダウンロードファイルの文字化け問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。