php下载文件代码

本文提供了一段PHP代码示例,用于解决不同浏览器环境下含有中文名称文件的正确下载问题。通过判断用户代理来适配IE、Firefox等浏览器,确保文件名正确显示。

    如果单单是下载文件, 可简单得很,

      $file='/path/filename.txt';

      $filename='filename.txt';

      header("Content-Type: ".filetype($file));

      header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');

      header("Content-Length: ".filesize($file));

      readfile($file);

    这样即可, 但是,如果$filename中有中文字(比如$filename="文档.txt"),下载的文件就会是乱码。所以,完整的写法为:

 

 

    $file='/path/filename.txt';
   
    if(!file_exists($file)) throw new Exception('File was not exist.');
   
    $filename='filename.txt';
   
    $ua = $_SERVER["HTTP_USER_AGENT"];
   
    $encoded_filename = urlencode($filename);
    $encoded_filename = str_replace("+", "%20", $encoded_filename);
   
    header("Content-Type: ".filetype($file));
    if (preg_match("/MSIE/", $ua)) {
        header('Content-Disposition: attachment; filename="' . $encoded_filename . '"');
    } else if (preg_match("/Firefox/", $ua)) {
        header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"');
    } else {
        header('Content-Disposition: attachment; filename="' . $filename . '"');
    }
    header("Content-Length: ".filesize($file));
   
    @readfile($file);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值