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

      我们常常通过网页下载各种各样的文件,到底是怎样实现地呢?本文从php的角度,结合http相关内容对文件下载做出相关讨论。

      一般来说,通过超链接的方式可以直接下载文件。

    <a href='要下载的文件'>点击下载</a>

      这一招可以应对很多格式的文件如.exe,.rar等格式,但是应对图片格式,html,txt等类型的文件,点击链接只会直接显示在浏览器上。那么如何应对这种情况呢?这时候就需要php出场了。

      在我有限的php编程经历中,遇到过两种php下载文件的形式。整体上都是利用通过设置响应的header 来实现文件下载。原理上没有本质的不同。

      第一种:

    $file_name='文件名';
    header ( 'Content-Disposition: attachment; filename=' . basename ( $file_name ));
    header ( 'Content-Length: '.filesize ( $file_name ));
    readfile ( $file_name );

      其中$filename设置的是下载文件的名称。  通过readfile()读入一个文件并且写入到输出缓存。

      第二种:

    $file_name='要下载的文件名';
    
    
    $fp=fopen($file_name,"r+");
    $file_size=filesize($file_name);
    //header("Content-type: application/octet-stream"); //返回的文件类型
    //header("Accept-Ranges: bytes");//按照字节格式返回
    header("Accept-Length: ".$file_size);
    header("Content-Disposition: attachment; filename=".$file_name);
    $buffer=1024;
    while(!feof($fp)){
        $file_data=fread($fp,$buffer);
        echo $file_data;
    }
    fclose($fp);

      这种方式更加详细描述了下载文件的过程。

    1. 打开文件,写入内存。
    2. 计算文件大小
    3. 设置头信息
    4. 输出数据到缓存
    5. 关闭文件
    越学习越感到自己无知
  • 相关阅读:
    apache2.4+php7.3.2+mysql5.7
    redis 中的key值过期后,触发通知事件
    zookeeper之分布式锁以及分布式计数器(通过curator框架实现)
    SpringCloud学习笔记(4)——Zuul
    SpringCloud学习笔记(3)——Hystrix
    SpringCloud学习笔记(2)——Ribbon
    c++各种排序的简单实现
    c++动态规划dp算法题
    华为机试练习
    ubuntu遇到的 the system is runing low-graphics mode 问题
  • 原文地址:https://www.cnblogs.com/DeanChopper/p/4651185.html
Copyright © 2011-2022 走看看