thinkphp http扩展下载方法问题

紅著 发布于 2012/09/22 13:36
阅读 2K+
收藏 0

在用 thinkphp 做了一个文件下载的小程序,遇到一个问题,现在下载 txt,bat,exe类型文件(我只测试了这三种类型的文件),浏览器都是直接显示里面的内容了,而不是出现下载,下载方法代码如下:

  //根据文件的ID下载文件

    public function getfile(){

        $fid=$this->_get('fid'); //获取文件ID

        import('ORG.Net.Http');

        $http= new Http();

        $dir= "./Public/Uploads/";  //文件路径

        $file=M("File");

        $fileinfo=$file->where('id='.$fid)->select();

        $http->download($dir.$fileinfo[0]['savename'],$fileinfo[0]['name']);

        //$http->download("./Public/1.txt",'test.txt');        

    }

下载文件我用了一个http扩展,里面实现下载的方法如下:

 /**

     +----------------------------------------------------------

     * 下载文件

     * 可以指定下载显示的文件名,并自动发送相应的Header信息

     * 如果指定了content参数,则下载该参数的内容

     +----------------------------------------------------------

     * @static

     * @access public

     +----------------------------------------------------------

     * @param string $filename 下载文件名

     * @param string $showname 下载显示的文件名

     * @param string $content  下载的内容

     * @param integer $expire  下载内容浏览器缓存时间

     +----------------------------------------------------------

     * @return void

     +----------------------------------------------------------

     * @throws ThinkExecption

     +----------------------------------------------------------

     */

    static public function download ($filename, $showname='',$content='',$expire=180) {

        if(is_file($filename)) {

            $length = filesize($filename);

        }elseif(is_file(UPLOAD_PATH.$filename)) {

            $filename = UPLOAD_PATH.$filename;

            $length = filesize($filename);

        }elseif($content != '') {

            $length = strlen($content);

        }else {

            throw_exception($filename.L('下载文件不存在!'));

        }

        if(empty($showname)) {

            $showname = $filename;

        }

        $showname = basename($showname);

if(!empty($filename)) {

       $type = mime_content_type($filename);

}else{

$type = "application/octet-stream";

}

        //发送Http Header信息 开始下载

        header("Pragma: public");

        header("Cache-control: max-age=".$expire);

        //header('Cache-Control: no-store, no-cache, must-revalidate');

        header("Expires: " . gmdate("D, d M Y H:i:s",time()+$expire) . "GMT");

        header("Last-Modified: " . gmdate("D, d M Y H:i:s",time()) . "GMT");

        header("Content-Disposition: attachment; filename=".$showname);

        header("Content-Length: ".$length);

        header("Content-type: ".$type);

        header('Content-Encoding: none');

        header("Content-Transfer-Encoding: binary" );

        if($content == '' ) {

            readfile($filename);

        }else {

        echo($content);

        }

        exit();

    }

 

希望有人指点解决下!@红薯 @流年 

加载中
0
blu10ph
blu10ph
你这是不是有utf-8的bom头啊~
0
h
hcwccc
header 头不对吧
返回顶部
顶部