山河-PHP下载功能实现

大家好我是山河,有部分学习PHP的新手不太能理解这个PHP的下载功能啊,一般下载有些人直接丢文件之类的东西到服务器上,想让用户/游客下载,但是直接使用会,浏览器会解析你的文件,解析成功的就不能下载了,只能展示出来,就比如HTML,txt,JPG等文件/图片,怎么解决这个问题呢?我用PHP实现。三种方法实现,有两种只是写法不同。

当然,注释我也写好了,方便新手小白更好的理解。

上代码:

<?php

    // PHP 文件下载
    // 设定解析字符集
    header('Content-type:text/html;charset=utf-8');

    $file = 'cswjj/dom.png';    //设定下载的内容的路径

    //  设定下载响应头
    header('Content-type:application/octem-stream');    //以文件流形式传输数据给浏览器
    header('Accept-ranges:bytes');      //以字节方式计算(传递)     
    header('Content-disposition:attachment;filename=' . $file);     //附件下载,指定名字
    header('Accept-length:' . filesize($file));     //设置文件大小
    // 如果文件的名字是从文件夹读取出来,而且存在中文,那么如果直接使用名字作为下载名字会出现乱码
    // 出现这种情况需要进行字符转码: 从GBK转成 UTF-8: $file = iconv('GBK','UTF-8',$file); 

    // 输出文件
    // PHP5 小文件 (低于8兆用 8MB 效率更快)
    /*
        echo file_get_contents($file);
    */

// 哔哩哔哩: https://space.bilibili.com/442772630  up主:山河web UID:442772630

    // 方案2 文件比较大(网络不好) 可以使用PHP4 的文件操作方式 一次读取一点
    $f = @fopen($file,'r') or die();
    // 写法1 (更多人用) 直接读,然后输出
    while($row = fread($f,1024)) {
        echo $row;
    }

    // 写法2 判断是否可读,然后再读
    /*
        while(!feof($f)) {
            echo fread($f,1024);
        }   
    */

    // 关闭资源
    fclose($f);

?>

最后认识一下:

哔哩哔哩: https://space.bilibili.com/442772630                 up主:山河web       UID:442772630