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

    PHP文件下载其实不复杂,依然遵循http协议原理,一个请求对应一个响应,

    然后其实一个文本就是一串流文件组成的,

    不然你随便点开一个图片,里面用二进制查看其实就是很多了的二进制代码组成的东西,所以说白了

    下载:就是讲那串加密后的二进制文件保存的过程,至于解析就是自己电脑的应用程序的事情了

     <?php 
    header("Content-type:text/html;charset=utf-8"); 
    // $file_name="cookie.jpg"; 
    $file_name="test.txt"; 
    //用以解决中文不能?示出来的?? 
    $file_name=iconv("utf-8","gb2312",$file_name); 
    //$file_sub_path="http://files.jb51.net/file_images/article/201206/"; 
    $file_sub_path="";
    $file_path=$file_sub_path.$file_name; 
    //首先要判断?定的文件存在与否 
    if(!file_exists($file_path)){ 
    echo "没有?文件文件"; 
    return ; 
    } 
    $fp=fopen($file_path,"r"); 
    $file_size=filesize($file_path); 
    //下?文件需要用到的? 
    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_count<$file_size){ 
    $file_con=fread($fp,$buffer); 
    $file_count+=$buffer; 
    echo $file_con; 
    } 
    fclose($fp); 
    ?> 
    

     几点注意事项: 

    header("Content-type:text/html;charset=utf-8")的作用:在服务器响应浏览器的请求时,告诉浏览器以编码格式为UTF-8的编码显示该内容 
    关于file_exists()函数不支持中文路径的问题:因为php函数比较早,不支持中文,所以如果被下载的文件名是中文的话,需要对其进行字符编码转换,否则file_exists()函数不能识别,可以使用iconv()函数进行编码转换 
    $file_sub_path() 我使用的是绝对路径,执行效率要比相对路径高 
    Header("Content-type: application/octet-stream")的作用:通过这句代码客户端浏览器就能知道服务端返回的文件形式 
    Header("Accept-Ranges: bytes")的作用:告诉客户端浏览器返回的文件大小是按照字节进行计算的 
    Header("Accept-Length:".$file_size)的作用:告诉浏览器返回的文件大小 
    Header("Content-Disposition: attachment; filename=".$file_name)的作用:告诉浏览器返回的文件的名称 
    以上四个Header()是必需的 
    fclose($fp)可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

  • 相关阅读:
    从零一起学Spring Boot之LayIM项目长成记(五)websocket
    从斐波那契数列看递归和尾递归
    通讯框架 t-io 学习——websocket 部分源码解析
    通讯框架 t-io 学习——给初学者的Demo:ShowCase设计分析
    从零一起学Spring Boot之LayIM项目长成记(四) Spring Boot JPA 深入了解
    从零一起学Spring Boot之LayIM项目长成记(三) 数据库的简单设计和JPA的简单使用。
    从零一起学Spring Boot之LayIM项目长成记(二) LayIM初体验
    从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot
    初始Turtle
    python介绍
  • 原文地址:https://www.cnblogs.com/sunxun/p/4308366.html
Copyright © 2011-2022 走看看