yii文件下载

来源:互联网 发布:js log 编辑:程序博客网 时间:2024/05/22 06:06
 //文件下载
        header("Content-Type:text/html;charset=utf-8");//文件的类型
        $file='简历.doc';//要下载的文件
//        $file='11.txt';
        $file=iconv('utf-8','gb2312',$file);//文件名中文转换
       $str="<meta charset='utf-8'><table border='1'><tr><td>你会</td><td>慢慢来</td></tr></table>";//之下载内容
//        if(!is_file($file)){
            //判断文件是否存在
//            echo "没有文件";die;
//        }
        header('Content-Type: application/octet-stream');//告诉浏览器文件形式 文件流
//        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');//告诉浏览器文件形式 文件流
//        header("Accept-Ranges:bytes");//告诉浏览器文件大小是按照字节进行计算的默认写不写都可以
//        header('Accept-Length:'.strlen($str));//只下载内容
        header('Accept-Length:'.filesize($file));//告诉浏览器文件大小默认字节为单位显示下载的大小
        header('Content-Disposition: attachment;filename='.$file);//描述文件。文件当作附件下载和文件名【$file下载后的文件名】
//        header('Cache-Control: max-age=0');【把文件当作附件下载】
//        echo $str;die;
        //readfile是一种下载方式
//        readfile($file);die;//通过readfilr读取文件输出到浏览器上


//分次读取文件来下载,如果文件比较大,不适合一次行读取下载[文件大,相应时间太长,服务器压力大]
        $fp=fopen($file,'r');//打开文件
        $file_count=0;//已读取的文件内容的大小.使读取文件内容大小更加准确
        $buffer=1024;//每次读取的长度
        //feof读取文件时的指针是否是指向最后。检测是否已达到文件末尾。是true,[包括socket超时]否false
        while(!feof($fp)&&$file_count<filesize($file)){
            $file_info=fread($fp,$buffer);//读取文件
            $file_count+=$buffer;//文件长度
            echo $file_info;//每次读取1024大小就告诉浏览器
        }
        fclose($fp);die;