php如何实现文件下载

我用的tp5框架,参考网址如下

第一种方式
https://blog.csdn.net/qq_39376608/article/details/80632772

第二种方式
https://blog.csdn.net/chengxiadenghuo/article/details/79969220

html 页面中按钮

<td><a href="home_xiazai222">下载</a></td>,携带 url 返回控制器即可

第一种,控制器

// 使用的时候,从前台传过来文件地址即可,接收方法添加参数 $file_url
function download($new_name=''){

    $file_url = 'E:\phpstudy2018\PHPTutorial\WWW\thinkphp51130\public\uploads\music/1547515887.mp3';
    $file_name=basename($file_url);
    $file_type=explode('.',$file_url);
    $file_type=$file_type[count($file_type)-1];
    $file_name=trim($new_name=='')?$file_name:urlencode($new_name);
    $file_type=fopen($file_url,'r'); //打开文件
    //输入文件标签
    header("Content-type: application/octet-stream");
    header("Accept-Ranges: bytes");
    header("Accept-Length: ".filesize($file_url));
    header("Content-Disposition: attachment; filename=".$file_name);
    //输出文件内容
    echo fread($file_type,filesize($file_url));
    fclose($file_type);
}

第2种

function download222(){
    // if(!isset($file_url)||trim($file_url)==''){
    //   echo '500';
    // }
   
    $file_url = 'uploads/music/1547515887.mp3';
    $file_name=basename($file_url);
    // 下载文件存放目录,这是完整路径,电脑上的本地路径
    $file_dir = ROOT_PATH.'public'.DS.'uploads'.DS.'music'.'/';  
   
    echo $file_dir.$file_name;

    // die;
    if(!file_exists($file_dir.$file_name)){    //检查文件是否存在
    	  echo '<hr>';
          echo '404,文件找不到';
          exit();

    }else{
    	//echo '<hr>';
    	//echo '找到路径';
    	$file1=fopen($file_dir.$file_name,'r'); //打开文件
        //输入文件标签
        header("Content-type: application/octet-stream");
        header("Accept-Ranges: bytes");
        header("Accept-Length: ".filesize($file_dir.$file_name));
        header("Content-Disposition: attachment; filename=".$file_name);
        ob_clean();
        flush();
        //输出文件内容
        echo fread($file1,filesize($file_dir.$file_name));
        fclose($file1);
        exit();
    }
}

最终效果图

=谷歌浏览器中
火狐浏览器中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值