您的位置:首页 > 编程语言 > PHP开发

php上传文件那些事

2016-07-23 22:22 621 查看
有好几天没有更新博文了,最近博主去学车去了,晒的可黑了。回到正题,本次,博主给大家带来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服务,希望这篇文章能给大家带来帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: