zoukankan      html  css  js  c++  java
  • PHP文件下载

    一.PHP下载文件时不能用ajax下载,ajax会下载成二进制文件,可以用get与post方式

    二.代码与注释,粘贴可以用

    /**
    * 下载文件
    * filesize()函数只能读取本地文件大小,路径是绝对路径或者相对路径
    * get_headers()函数能获取远程文件大小,路径是一个URL,获得是一个数组
    * 传url参数(即文件地址),
    * 我用的是远程的方法get_headers()
    */
    public function Dowloads(){
    //接收文件名参数
    $url=$this->request->get('url');
    //统计文件大小
    $lengths=get_headers($url);
    //get_headers获得的是一个数组,获得文件大小,你可以打印$length看下数据结构
    $length=explode(":",$lengths[2]);
    //这是去掉空格后的文件大小
    $file_length=trim($length[1]);

    //这两个是会下面用到的参数$file_length(文件大小),$file_name(下载后文件名称)
    //$file_name你可以随便命名,也可以像下面我这样拼接
    //把文件地址?后面的给去掉
    $res2=explode("?",$url);
    $res3=trim($res2[0]);
    //把文件地址拆分
    $file_names=explode("/",$res3);
    //拼接下载后的文件名称
    $file_name=$file_names[4]."/".$file_names[5]."/".$file_names[6]."/".$file_names[7];

    //打开文件
    $file = fopen ( $url, "rb" );
    //告诉浏览器这是一个文件流格式的文件
    Header ( "Content-type: application/octet-stream" );
    //请求范围的度量单位
    Header ( "Accept-Ranges: bytes" );
    //Content-Length是指定包含于请求或响应中数据的字节长度,注意用我的Content-Length,不要用Accept-Length
    Header ( "Content-Length: " .$file_length);
    //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
    Header ( "Content-Disposition: attachment; filename=" . $file_name);

    //读取文件内容并直接输出到浏览器
    $contents = '';
    while (!feof($file)) { //这步一定要加,不然下载有大小限制的
    $contents = fread($file, $file_length);
    echo $contents;//一定要把文件输出到浏览器上
    }
    fclose($file);
    exit ();
    }
  • 相关阅读:
    mybatis动态拼接条件的技巧 where 1=1 或者where标签
    cron表达式
    java获取电脑mac物理地址
    js 正则表达式:价格的校验
    java 当前时间月份
    中文保存在properties乱码的解决
    java 手机号码+邮箱的验证
    27.openpyxl 向指定单元格添加图片并修改图片大小 以及修改单元格行高列宽
    26.python操作Excel
    25.xlrd、xlwt和openpyxl模块的比较和使用
  • 原文地址:https://www.cnblogs.com/dyj--php/p/9299376.html
Copyright © 2011-2022 走看看