php上传文件那些事

来源:互联网 发布:sql笔试题及答案 编辑:程序博客网 时间:2024/06/04 19:26

有好几天没有更新博文了,最近博主去学车去了,晒的可黑了。回到正题,本次,博主给大家带来php上传文件。


  • 客户端
    在网页中,必须采用post方式来上传文件,并且必须设置表单的enctype属性为multipart/form-data,还需要设置input标签type 属性为filename属性中的内容用于服务器端进行标识,定义代码如下。
<form action="01.php" method="post" enctype="multipart/form-data">    <input type="file" name="pic"/><br/>    <input type="submit" value="提交"/></form>

  • 服务器端获取上传文件信息
    当客户端提交表单后,服务器端就可以获取上传文件的信息了。上传文件的信息都会存储到$_FILES这样的一个全局数组中,我们可以打印数组查看结果。

    代码

<?phpprint_r($_FILES);?>

打印结果

打印结果如下,是一个数组,pic 是客户端的标识,name 下标指的是上传文件的文件名,type下标指的是上传文件的类型,tmp_name 下标指的是上传的文件在服务器端存放的临时文件名,error 下标是上传文件错误的表示,可用于检测文件是否上传,以便找到错误的原因,size 下标是上传文件的大小,单位是字节。

这里写图片描述


  • 保存文件
    上传文件后,文件被上传到服务器端用于存放上传文件的临时目录中,如果在php代码执行结束后并没有将文件保存到其他位置,那么该临时文件将会被删除。所以,文件上传之后,都应该进行移动操作,将文件保存到其他位置。
<?phpecho 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服务,希望这篇文章能给大家带来帮助。

0 0
原创粉丝点击