现在的位置: 首页 > 综合 > 正文

php下载文件操作

2018年05月20日 ⁄ 综合 ⁄ 共 1604字 ⁄ 字号 评论关闭

1:代码如下

   

<?php
    $filename = "鲜花.jpg";
    
    //因为php的函数比较古老不识别utf-8码,所以需要转换成它可以识别的gb2312
    $filename = iconv("utf-8", "gb2312", $filename);
    
    if(!file_exists($filename)) {
    	echo '文件不存在';
    	return;
    }
    
    $fp = fopen($filename, "r");
    
    //获取文件的大小
    $filesize = filesize($filename);
    //echo "文件大小:$filesize";
    
    //返回的文件
    header("Content-type:application/octet-stream");
    //按照字节大小返回
    header("Accept-Ranges:bytes");
    //返回文件大小
    header("Accept-Length:$filesize");
    //这里客户端的弹出对话框,对应的文件名
    header("Content-Disposition:attachment;filename=".$filename);
    
    //向客户端回送数据
    
    $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: 下载文件的子路径  /xxx/xxx/
    function down_file($filename, $file_sub_dir) {
    	
    //因为php的函数比较古老不识别utf-8码,所以需要转换成它可以识别的gb2312
    $filename = iconv("utf-8", "gb2312", $filename);
    
    $file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$filename;
    
    echo $file_path;
    
    if(!file_exists($file_path)) {
    	echo '文件不存在';
    	return;
    }
    
    $fp = fopen($file_path, "r");
    
    //获取文件的大小
    $filesize = filesize($file_path);
    //echo "文件大小:$filesize";
    
    //返回的文件
    header("Content-type:application/octet-stream");
    //按照字节大小返回
    header("Accept-Ranges:bytes");
    //返回文件大小
    header("Accept-Length:$filesize");
    //这里客户端的弹出对话框,对应的文件名
    header("Content-Disposition:attachment;filename=".$filename);
    
    //向客户端回送数据
    
    $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);
    
  }
  
  down_file('鲜花.jpg', '/Test/40/HTTP/images/');
    
?>

抱歉!评论已关闭.