• 十,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");
    }
    ?>
  • 相关阅读:
    初级Springboot(一)
    java.lang.NoClassDefFoundError: Could not initialize class xxx
    Python requests.post嵌套多层json参数调用接口
    weblogic安装部署war包——windows
    angularJs 页面{{xxx}}使用三目运算符
    liunx下误删除/var目录下的empty文件,导致ssh连接不上
    Java判断一个时间是否在时间区间内
    centos7下配置免密码登录
    左连接去重(objec)
    java util.Date和sql.Date转换(时区转换)
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/4888120.html
Copyright © 2020-2023  润新知