今天给大家介绍的是PHP文件的上传与下载,分为两部分,第一部分:文件的上传,第二部分:文件的下载;
一.文件的上传
原理:将客户端的文件上传到服务器端,在将服务器端的临时文件移动到指定目录即可。
客户端:准备一个表单页面,表单的发送方式为post,并且添加enctype="multipart/form-data",记住:发送方式一定为post,并且form里面一定要添加enctype="multipart/form-data",两者缺一不可。
以下为客户端的简单实现代码:

服务器:用PHP预定义变量$_FILES来接收传过来文件,以下为客户端接收页面的截图:

$_FILES变量解析,以下为截图:

数组解析:myfile为表单提交页面自定义的name;name为上传文件的名字;type为上传文件的原始名称;tmp_name为上传文件的临时保存文件的位置;error为上传文件的错误信息;size为上传文件的大小;
服务端保存文件的两种方式:
第一种:通过move_uploaded_file($tmp_name,$filename)函数实现,以下为截图:

第二种:通过copy()函数实现,以下为截图:

文件上传常规配置解析,这些配置选项都在php.ini文件中,以下为截图:

文件上传的其他配置解析,以下为截图:

上传文件错误信息说明,以下为截图:

客户端上传文件限制,以下为截图:

服务器端上传文件限制(单文件上传实例):以下为截图:



二.文件的下载
文件的下载一种是可以通过表单的超链接方式实现,这个主要是实现浏览器不识别的文件类型,例如:

对于一些浏览器识别的文件,比如图片,视频来说就要通过PHP代码来实现了,以下为实现过程:

上面的这种方式虽然实现了文件的下载,但是也是有他的缺陷性的,比如不能批量下载,而且下载完之后浏览器的页面会跳转,严重影响我们的业务,下面的这种方式就解决了这个问题。
<?php
/**
*@params string $url 要下载的文件地址
*@params string $filePath 要保存的文件位置
*/
function downFile($url,$filePath){
if($url=='' || $url==NULL){
return "下载地址不能为空";
}
$ext_name = strrchr($url,'.');//获取文件的扩展名
ob_start();//打开输出缓冲区,所有的输出信息不在发送给浏览器,保存在缓冲区
readfile($url);//将文件写入到缓冲区
$file_data = ob_get_contents();//获取缓冲区文件内容,内容为二进制
$filename = "./".$filePath.time().$ext_name;//构建保存文件位置
ob_end_clean();//清空缓冲区
$local_file = fopen($filename,'a');//打开文件
$fwrite($local_file,$file_data);//将内容写入文件
fclose($local_file);//关闭文件
}
通过这个函数,我们就可以轻松实现文件的下载,而且我们可以循环调用来实现批量下载。
网友评论