php上传文件那些事
2016-07-23 22:22
621 查看
有好几天没有更新博文了,最近博主去学车去了,晒的可黑了。回到正题,本次,博主给大家带来php上传文件。
客户端
在网页中,必须采用
服务器端获取上传文件信息
当客户端提交表单后,服务器端就可以获取上传文件的信息了。上传文件的信息都会存储到
代码
打印结果
打印结果如下,是一个数组,
保存文件
上传文件后,文件被上传到服务器端用于存放上传文件的临时目录中,如果在php代码执行结束后并没有将文件保存到其他位置,那么该临时文件将会被删除。所以,文件上传之后,都应该进行移动操作,将文件保存到其他位置。
随机文件名及按日期存储
在做项目时,在处理文件上传时,我们应该这样做处理,使用随机字符串作为文件名,这样后面上传的文件就不会把之前上传的同名文件给覆盖了;还有一个就是让文件夹按日期动态生成,这样比较方便管理员进行管理。
上面这段代码的含义是,先生成随机字符串作为文件名,然后获取上传文件的扩展名,然后根据日期动态生成目录,然后保存文件。
项目中的文件上传
封装常用函数
使用
注意:如果要保存到数据库的话,应当保存的是文件的相对路径
上传文件的相应配置
在php配置文件中,有许多关于上传文件的配置,我们应该也要熟悉。
记得配置好以后,重启apache服务,希望这篇文章能给大家带来帮助。
客户端
在网页中,必须采用
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服务,希望这篇文章能给大家带来帮助。
相关文章推荐
- php7开启强类型模式
- PHP调用Jenkins接口的实现
- PHP数组基本知识
- PHP file_get_content在远程通信之前的准备,服务器中json_decode解析详解
- PHP CMS的pc标签
- PHP数组创建的的两种办法
- php 安全处理多线程同时写操作同一文件
- PHP之路——PHPStudy虚拟主机
- Yii2 Pjax 与 ActionForm ,不刷新提交数据
- php 去除字符串末尾字符
- 如何将Win7做为NTP服务器
- 服务器启用 FTP
- phpwind house2.3房产建站笔记
- Notepad++进行php开发所必需的插件【转】
- php开发入门之开发环境搭建及相应文件配置
- zend studio项目显示点开头的文件
- PHP7 cURL上传文件
- ThinkPHP 3.2.3 入口文件设置总结
- PHP -S 命令
- PHP学习之路之Smarty自定义函数(下)