山河-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