有好几天没有更新博文了,最近博主去学车去了,晒的可黑了。回到正题,本次,博主给大家带来php上传文件。
- 客户端
在网页中,必须采用post
方式来上传文件,并且必须设置表单的enctype
属性为multipart/form-data
,还需要设置input标签
的type
属性为file
,name
属性中的内容用于服务器端进行标识,定义代码如下。
<form action="01.php" method="post" enctype="multipart/form-data">
<input type="file" name="pic"/><br/>
<input type="submit" value="提交"/>
</form>
服务器端获取上传文件信息
当客户端提交表单后,服务器端就可以获取上传文件的信息了。上传文件的信息都会存储到$_FILES
这样的一个全局数组中,我们可以打印数组查看结果。代码
<?php
print_r($_FILES);
?>
打印结果
打印结果如下,是一个数组,pic
是客户端的标识,name
下标指的是上传文件的文件名,type
下标指的是上传文件的类型,tmp_name
下标指的是上传的文件在服务器端存放的临时文件名,error
下标是上传文件错误的表示,可用于检测文件是否上传,以便找到错误的原因,size
下标是上传文件的大小,单位是字节。
- 保存文件
上传文件后,文件被上传到服务器端用于存放上传文件的临时目录中,如果在php代码执行结束后并没有将文件保存到其他位置,那么该临时文件将会被删除。所以,文件上传之后,都应该进行移动操作,将文件保存到其他位置。
<?php
echo move_uploaded_file($_FILES['pic']['tmp_name'], "./".$_FILES['pic']['name'])?"ok":"fail";
?>
- 随机文件名及按日期存储
在做项目时,在处理文件上传时,我们应该这样做处理,使用随机字符串作为文件名,这样后面上传的文件就不会把之前上传的同名文件给覆盖了;还有一个就是让文件夹按日期动态生成,这样比较方便管理员进行管理。
<?php
/**
* 生成随机文件名,按日期存储
* @author webbc
*/
$fname = rand(10000,99999);//随机文件名
$ext = strrchr($_FILES['pic']['name'],'.');//截取文件的扩展名
$path = './'.date('Y/m/d');//文件存储的路径
//如果目录不存在,就创建目录
if(!is_dir($path)){
mkdir($path,0777,true);
}
$saveFile = $path.'/'.$fname.$ext;//保存的文件名
echo move_uploaded_file($_FILES['pic']['tmp_name'],$saveFile)?"ok":"fail";
?>
上面这段代码的含义是,先生成随机字符串作为文件名,然后获取上传文件的扩展名,然后根据日期动态生成目录,然后保存文件。
- 项目中的文件上传
封装常用函数
<?php
/**
* 创建上传文件的路径
* @return str/bool 上传文件的目录
*/
function createDir(){
$path = '/upload/'.date('Y/m/d');
$fpath = ROOT.$path;
if(is_dir($fpath) || mkdir($fpath,0777,true)){
return $path;
}else{
return false;
}
}
/**
* 随机字符串函数,作为文件名
* @param int $num 指定所要的随机字符串长度
* @return str 随机字符串
*/
function randStr($num=6){
$str = str_shuffle('abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ23456789');
return substr($str,0,$num);
}
/**
* 获取指定文件的扩展名,包括.
* @param str $file 文件名
* @return str 文件扩张名
*/
function getExt($file){
return strchr($file,'.');
}
?>
使用
注意:如果要保存到数据库的话,应当保存的是文件的相对路径
<?php
if($_FILES['pic']['name'] !== '' && $_FILES['pic']['error'] == 0){//判断是否在上传
$file = createDir().'/'.randStr().getExt($_FILES['pic']['name']);//生成文件名
move_uploaded_file($_FILES['pic']['tmp_name'] , ROOT.$file);//保存文件
...可进行数据库操作...
}
?>
- 上传文件的相应配置
在php配置文件中,有许多关于上传文件的配置,我们应该也要熟悉。
file_uploads = On/Off
:代表文件上传是否可用
upload_tmp_dir="D:/Program Files (x86)/wamp/tmp" :代表文件保存到服务器的临时目录
upload_max_filesize = 2M :上传文件的最大限制
记得配置好以后,重启apache服务,希望这篇文章能给大家带来帮助。