thinkphp实现文件下载函数

thinkphp实现文件下载函数

ps:本人亲测,阿里云2核4G5M的服务器性价比很高,新用户一块多一天,老用户三块多一天,最高可以买三年,感兴趣的可以戳一下:阿里云折扣服务器

验证用户权限后调用此函数可以下载文件,文件可以放在任意位置。
客户端不会出现乱码
不会知道所下载文件真实路径。

1./**
2. * 下载文件
3. * @param string $file
4. *               被下载文件的路径
5. * @param string $name
6. *               用户看到的文件名
7. */
8. function download($file,$name=''){
9.    $fileName = $name ? $name : pathinfo($file,PATHINFO_FILENAME);
10.    $filePath = realpath($file);
11.    
12.    $fp = fopen($filePath,'rb');
13.    
14.    if(!$filePath || !$fp){
15.        header('HTTP/1.1 404 Not Found');
16.        echo "Error: 404 Not Found.(server file path error)<!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding --><!-- Padding -->";
17.        exit;
18.    }
19.    
20.    $fileName = $fileName .'.'. pathinfo($filePath,PATHINFO_EXTENSION);
21.    $encoded_filename = urlencode($fileName);
22.    $encoded_filename = str_replace("+", "%20", $encoded_filename);
23.    
24.    header('HTTP/1.1 200 OK');
25.    header( "Pragma: public" );
26.    header( "Expires: 0" );
27.    header("Content-type: application/octet-stream");
28.    header("Content-Length: ".filesize($filePath));
29.    header("Accept-Ranges: bytes");
30.    header("Accept-Length: ".filesize($filePath));
31.    
32.    $ua = $_SERVER["HTTP_USER_AGENT"];
33.    if (preg_match("/MSIE/", $ua)) {
34.        header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
35.    } else if (preg_match("/Firefox/", $ua)) {
36.        header('Content-Disposition: attachment; filename*="utf8\'\'' . $fileName . '"');
37.    } else {
38.        header('Content-Disposition: attachment; filename="' . $fileName . '"');
39.    }
40.    
41.    // ob_end_clean(); <--有些情况可能需要调用此函数
42.    // 输出文件内容
43.    fpassthru($fp);
44.    exit;
45. }

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值