php文件下载步骤

代码实例:

<?php
header("Content-type:text/html;charset=utf-8");
//PHP文件下载过程,将下载过程封装成函数
//对函数的说明
//参数说明说明:
//$file_name    文件名
//$file_sub_dir:     下载文件的子路径 "/xxx/xxx/"
function down_file($file_name,$file_sub_dir){
    //如果文件名称是中文,需要进行转码.              
    //原因 php文件函数,比较古老,需要对中文转码 gb2312,使用iconv()函数进行编码转换 
    $file_name=iconv("utf-8","gb2312",$file_name);
    //用相对路径表示      $file_sub_dir=./wml/
    //$file_path=$file_sub_dir.$file_name;
    //用绝对路径表示      $file_sub_dir=/wml/
    // $_SERVER['DOCUMENT_ROOT']  表示当前运行脚本所在的文档根目录
    $file_path=$_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
    //绝对路径,执行效率要比相对路径高,建议使用绝对路径             
    //1.判断文件是否存在
    if(!file_exists($file_path)){
        echo "文件不存在!";
        return ;
    }
    //2.以只读的方式,打开文件
    $fp=fopen($file_path,"r");
              
    //获取下载文件的大小
    $file_size=filesize($file_path);
    //防止下载大文件,括号中数字单位为字节
    if($file_size>30000000){                
        echo "<script>window.alert('文件过大,不能下载!')</script>";
        return ;
    }
    //下载文件需要用到的头,以下四个Header()是必需的 
    //通过这句代码客户端浏览器就能知道服务端返回的文件形式
    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) ){
        //每次读取1024字节
        $file_data=fread($fp,$buffer);
        //统计读了多少个字节
        $file_count+=$buffer;
        //把部分数据回送给浏览器;
        echo $file_data;
    }
    //关闭文件,释放资源
    fclose($fp);
}
//测试函数是否可用
down_file("分单号给他人.png","/wml/");
?>


你可能感兴趣的:(php文件下载步骤)