zoukankan      html  css  js  c++  java
  • PHP(http协议)文件下载

    <?php
    
        //文件下载,下载一张图片
        //$file_name="Angel.mp3";
    
        $file_name="小丸子.jpg";  //出现中文 程序无法完成下载 提示:文件不存在 
        //对文件进行转码(PHP文件函数 比较古老 需对中文码转成 gb2312)
        //iconv — Convert string to requested character encoding
        $file_name=iconv("utf-8","gb2312",$file_name);
    
        //设置文件下载路径(相对路径)
        //$file_path="./dowm/".$file_name;
    
        //使用绝对路径
        $file_path=$_SERVER['DOCUMENT_ROOT']."/http/dowm/".$file_name;
    
        //打开文件---先判断再操作
        if(!file_exists($file_path)){
            
            echo "文件不存在";
            return ;    //直接退出
        }
    
        //存在--打开文件
    
        $fp=fopen($file_path,"r");
        
        //获取文件大小
        $file_size=filesize($file_path);
    
        //http 下载需要的响应头    
        header("Content-type: application/octet-stream");    //返回的文件    
        header("Accept-Ranges: bytes");            //按照字节大小返回
        header("Accept-Length: $file_size");    //返回文件大小
        header("Content-Disposition: attachment; filename=".$file_name);//这里客户端的弹出对话框,对应的文件名
    
        //向客户端返回数据
        //设置大小输出
        $buffer=1024;
    
        //为了下载安全,我们最好做一个文件字节读取计数器
        $file_count=0;
        //判断文件指针是否到了文件结束的位置(读取文件是否结束)
        while(!feof($fp) && ($file_size-$file_count)>0){
    
            $file_data=fread($fp,$buffer);
            //统计读取多少个字节数
            $file_count+=$buffer;
            //把部分数据返回给浏览器
            echo $file_data;
        }
    
        //关闭文件
    
        fclose($fp);
    ?>

     2、封装函数:

    <?php
        
        /*
            封装函数:
            参数说明----$file_name:文件名
                        $file_sub_dir:文件下载的子路径 
        */
        function file_dowm($file_name,$file_sub_dir){
            //文件转码
            $file_name=iconv("utf-8","gb2312",$file_name);
    
            //使用绝对路径
            $file_path=$_SERVER['DOCUMENT_ROOT']."$file_sub_dir".$file_name;
    
            //打开文件---先判断再操作
            if(!file_exists($file_path)){
                
                echo "文件不存在";
                return ;    //直接退出
            }
    
            //存在--打开文件
    
            $fp=fopen($file_path,"r");
            
            //获取文件大小
            $file_size=filesize($file_path);
            /*
            //这里可以设置超过多大不能下载
            if($file_size>50){
                echo "文件太大不能下载";
                return ;
            }*/
    
            //http 下载需要的响应头    
            header("Content-type: application/octet-stream");    //返回的文件    
            header("Accept-Ranges: bytes");            //按照字节大小返回
            header("Accept-Length: $file_size");    //返回文件大小
            header("Content-Disposition: attachment; filename=".$file_name);//这里客户端的弹出对话框,对应的文件名
    
            //向客户端返回数据
            //设置大小输出
            $buffer=1024;
    
            //为了下载安全,我们最好做一个文件字节读取计数器
            $file_count=0;
            //判断文件指针是否到了文件结束的位置(读取文件是否结束)
            while(!feof($fp) && ($file_size-$file_count)>0){
    
                $file_data=fread($fp,$buffer);
                //统计读取多少个字节数
                $file_count+=$buffer;
                //把部分数据返回给浏览器
                echo $file_data;
            }
    
            //关闭文件
            fclose($fp);
        }
        
        file_dowm("小丸子.jpg","/http/dowm/");
    
    ?>
  • 相关阅读:
    作一份高水准的简历
    使用该JavaBean可以将数据在JSP页面中以表格的形式显示出来,并具有动态排序 动态生成查询 自动分页功能
    javah命令 C Header and Stub File Generator
    Java内部类(Inner Class)
    集合(Collection)与迭代器(Iterator)
    Mysql数据库从本地导出 服务器上导入时报 ERROR 2005 HY000 Unknown MySQL ser
    Cassandra操作入门
    表示不同文件类型的魔术数字
    JAVA中實現鏈表--LinkedList的使用
    在oracle数据库中如何插入CLOB值
  • 原文地址:https://www.cnblogs.com/pwm5712/p/2991124.html
Copyright © 2011-2022 走看看