PHP文件下载实例代码浅析

yipeiwu_com6年前PHP代码库

文件下载的功能对一个网站而言基本上是必备的了,今天就来看看PHP是如何实现文件下载的吧。

无控制类型

这里说的无控制类型是指 没有添加PHP代码控制的资源可以被直接下载的那些类型。一般而言,压缩文件.rar; 音视频文件:..avi等等也可以被直接下载。但是音频和mp4则会直接被浏览器解析播放。
如下图:

.avi文件

.avi文件会被直接下载

.rar文件

.rar文件会被直接下载

.mp4,MP3,图片等会被直接解析

.mp3,4,图片等文件会被浏览器直接解析播放

核心代码

使用php代码控制文件的下载合适很简单的。我们住需要很少的代码便可以完成如此复杂的工作。

类型

// 使用basename函数可以获得文件的名称而不是路径信息,保护了服务器的目录安全性
header("content-disposition:attachment;filename=".basename($filename));

长度

header("content-length:".filesize($filename));

实现函数

<?php

$filename = $_GET['filename'];
// 使用basename函数可以获得文件的名称而不是路径信息,保护了服务器的目录安全性
header("content-disposition:attachment;filename="$filename);
header("content-length:".filesize($filename));
readfile($filename);


?>

优化

上面指定文件名称的时候我们没有使用一个叫basename的函数,这样我们下载文件的时候将会连带着其在服务器上的文件的完整的路径。

注意: 下载文件的名称一定不能包含其在服务器上的完整路径名称,否则有可能会导致部分资源的泄露。即使有办法能控制访问资源的权限,但是使用basename函数也是很好的。 

原始下载文件的名称

附带服务器上的路径

优化后的文件下载名称

使用了basename之后的效果

总结

php文件下载使用起来相较于Java实现真的是太方便了呢。在下载文件的内部,有许多的信息提供给我们,通过这些封装好的信息,我们可以实现更加优雅的文件下载系统。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持【宜配屋www.yipeiwu.com】。

相关文章

PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解

本文实例讲述了PHP创建文件及写入数据(覆盖写入,追加写入)的方法。分享给大家供大家参考,具体如下: 这里主要介绍了PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码,需要的朋友可...

学习php设计模式 php实现工厂模式(factory)

学习php设计模式 php实现工厂模式(factory)

一、意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method使用一个类的实例化延迟到其子类【GOF95】 二、工厂模式结构图 三、工厂模式中主要角色...

CakePHP去除默认显示的标题及图标的方法

去除的办法是: 修改cake\libs\view\templates\layouts\default.thtml,这个是视图文件的通用模板框架(带头部和脚部)。 另外: cakephp视...

自己前几天写的无限分类类

前一周写的吧,使用中效果还不错。 主要思想来自:http://www.phpobject.net/b...[url=http://www.phpobject.net/blog/...

PHP文件操作之获取目录下文件与计算相对路径的方法

获取目录下文件 1、获取目录下文件,不包括子目录 //获取某目录下所有文件、目录名(不包括子目录下文件、目录名) $handler = opendir($dir); wh...