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

    1,文件类型

    (1)文本文件,如xx.txt。

    (2)二进制文件,如图片、视频、音频。

    2,文件下载流程如下图所示,首先浏览器向服务器发送下载请求,服务器将下载资源读入内存,再通过http将资源返回到指定的目录。

    3,下载具体代码如下:

    function down_file($file_name, $file_sub_dir){
    //    $file_name="se.jpg";
    //php文件系统默认是gb2312,我们现在通用的utf-8,因此需要把文件名转化为gb2312
        $file_name = iconv("utf-8","GB2312",$file_name);
    
        $file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;
    //    $file_path = $_SERVER['DOCMENT_ROOT']."/images/".$file_name;
    
    //1。打开文件
        if(!file_exists($file_path)){
            echo "文件不存在!";
            return;
        }
        $fp = fopen($file_path,"r");
    
        $file_size = filesize($file_path);
    
        if($file_size > 1024*10*1024){   //限制下载大文件,10M
    //        echo "文件过大,不能下载";
            echo "<script language='javascript'>window.alert('文件太大,不提供下载服务!');</script>";
            return;
        }
    
    //返回的文件
        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);
    }
    
    down_file("se.jpg", "/blog/webroot/images/");
    

      注意:(1)php的文件系统比较旧,用的字符编码是gb2312,现在大部份文件是utf-8编码,因此需要对文件名进行转码,将utf-8转化为gb2312:

    $file_name = iconv("utf-8","GB2312",$file_name);

    (2)文件路径用绝对路径,也可以使用相对路径,绝对路径效率更高,

    $file_path = $_SERVER['DOCUMENT_ROOT'].$file_sub_dir.$file_name;

    php相对路径表示,比如代码页a.php,同目录下有个文件夹image,文件夹中有b.jpg,那么a.php;利用相对路径引用b.jpg时候

    $file_path = "./image/b.jpg";

    如果image和a.php的父目录同级别,

    $file_path = "./../image/b.jpg";

    4,网页禁止某个ip访问,

    if($_SERVER['REMOTE_ADDR'] == "192.168.1.100"){
        echo "禁止你访问!";
    }
    

    5,防盗链技术,网站中某些网页希望登陆之后查看,

    <?php
    /**
     * Created by PhpStorm.
     * User: usa007lhy
     * Date: 2015/10/18
     * Time: 19:54
     */
    if(isset($_SERVER['HTTP_REFERER'])){
        if(strpos($_SERVER['HTTP_REFERER'],"http://localhost/http") == 0){
            echo "韩顺平的账号信息...";
        }else{
            header("Location:warning.php");
        }
    }else{
        header("Location:warning.php");
    }
    ?>
  • 相关阅读:
    [ScreenOS] How to change the certificate that is used for SSL (HTTPS) WebUI Management
    [ScreenOS] How to manually generate a new system self-signed certificate to replace the expired system self-signed certificate without resetting the firewall
    ELK日志分析之安装
    用ElasticSearch存储日志
    Elasticsearch5安装以及部署Head插件
    Elasticsearch+Hbase实现海量数据秒回查询
    展示消息提醒信息,2019年1月1日 09:52:54
    cvc-complex-type.2.3: Element 'dependency' cannot have character [children], because the type's cont
    layui 上传图片回显并点击放大实现
    layui table 行按钮事件,启用禁用切换
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4888120.html
Copyright © 2011-2022 走看看