Home >Backend Development >PHP Problem >How to solve the problem of garbled characters in PHP download files
Solution to the garbled code when downloading files in php: First, use the ob_clean function to clear the output buffer before downloading the file; then use the flush function to refresh the output buffer; and finally download the file.
Solution:
Use the following two functions to process before downloading.
(Recommended tutorial: java course)
flush — Flush the output buffer
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.
Code sample:
// 文件名不要用中文//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");
Related recommendations:php training
The above is the detailed content of How to solve the problem of garbled characters in PHP download files. For more information, please follow other related articles on the PHP Chinese website!