学习地址:http://www.imooc.com/video/2473
<?php header("content-type:text/html;charset=utf-8"); /** * 生成唯一字符串 * @return string */ function getUniName(){ return md5(uniqid(microtime(true),true)); } /** * 得到文件的扩展名 * @param string $filename * @return string */ function getExt($filename){ return strtolower(end(explode(".",$filename))); } //$_FILES $filename=$_FILES['myFile']['name']; $type=$_FILES['myFile']['type']; $tmp_name=$_FILES['myFile']['tmp_name']; $error=$_FILES['myFile']['error']; $size=$_FILES['myFile']['size']; $allowExt=array("gif","jpeg","jpg","png","wbmp"); $maxSize=1512000; $imgFlag=true; //判断下错误信息 if($error==UPLOAD_ERR_OK){ $ext=getExt($filename); //限制上传文件类型 if(!in_array($ext,$allowExt)){ exit ("非法文件类型"); } if($size>$maxSize){ exit ("文件过大"); } if($imgFlag){ //如何验证图片是否是一个真正的图片类型 //getimagesize($filename):验证文件是否是图片类型 $info=getimagesize($tmp_name); //var_dump($info);exit; if(!$info){ exit("不是真正的图片类型"); } } //需要判断下文件是否是通过HTTP POST方式上传上来的 //is_uploaded_file($tmp_name): $filename=getUniName().".".$ext; $path="uploads"; if(!file_exists($path)){ mkdir($path,0777,true); } $destination=$path."/".$filename; if(is_uploaded_file($tmp_name)){ if(move_uploaded_file($tmp_name, $destination)){ $mes="文件上传成功"; }else{ $mes="文件移动失败"; } }else{ $mes="文件不是通过HTTP POST方式上传上来的"; } }else{ switch($error){ case 1: $mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE break; case 2: $mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE break; case 3: $mes="文件部分被上传";//UPLOAD_ERR_PARTIAL break; case 4: $mes="没有文件被上传";//UPLOAD_ERR_NO_FILE break; case 6: $mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR break; case 7: $mes="文件不可写";//UPLOAD_ERR_CANT_WRITE; break; case 8: $mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION break; } } echo $mes; //服务器端进行的配置 //1》file_uploads = On,支持通过HTTP POST方式上传文件 //2》;upload_tmp_dir =临时文件保存目录 //3》upload_max_filesize = 2M默认值是2M,上传的最大大小2M //4》post_max_size = 8M,表单以POST方式发送数据的最大值,默认8M //客户端进行配置,form表单必须是post,也必须有enctype="multipart/form-data" // <form action="doAction1.php" method="post" enctype="multipart/form-data"> // 请选择上传文件:<input type="file" name="myFile" /><br/> // <input type="submit" value="上传"/> // </form>
函数封装版本
header("content-type:text/html;charset=utf-8"); /** * 生成唯一字符串 * @return string */ function getUniName(){ return md5(uniqid(microtime(true),true)); } /** * 得到文件的扩展名 * @param string $filename * @return string */ function getExt($filename){ return strtolower(end(explode(".",$filename))); } function uploadFile($fileInfo,$path="uploads",$allowExt=array("gif","jpeg","jpg","png","wbmp"),$maxSize=1512000,$imgFlag=true){ //判断下错误信息 if($fileInfo['error']==UPLOAD_ERR_OK){ $ext=getExt($fileInfo['name']); //限制上传文件类型 if(!in_array($ext,$allowExt)){ exit ("非法文件类型"); } if($fileInfo['size']>$maxSize){ exit ("文件过大"); } if($imgFlag){ //如何验证图片是否是一个真正的图片类型 //getimagesize($filename):验证文件是否是图片类型 $info=getimagesize($fileInfo['tmp_name']); //var_dump($info);exit; if(!$info){ exit("不是真正的图片类型"); } } $filename=getUniName().".".$ext; if(!file_exists($path)){ mkdir($path,0777,true); } $destination=$path."/".$filename; if(is_uploaded_file($fileInfo['tmp_name'])){ if(move_uploaded_file($fileInfo['tmp_name'], $destination)){ $mes="文件上传成功"; }else{ $mes="文件移动失败"; } }else{ $mes="文件不是通过HTTP POST方式上传上来的"; } }else{ switch($fileInfo['error']){ case 1: $mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE break; case 2: $mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE break; case 3: $mes="文件部分被上传";//UPLOAD_ERR_PARTIAL break; case 4: $mes="没有文件被上传";//UPLOAD_ERR_NO_FILE break; case 6: $mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR break; case 7: $mes="文件不可写";//UPLOAD_ERR_CANT_WRITE; break; case 8: $mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION break; } } return $mes; }
使用方法:
header("content-type:text/html;charset=utf-8"); $fileInfo=$_FILES['myFile']; $info=uploadFile($fileInfo); echo $info;
单文件多上传
#html代码示例
<form action="doAction2.php" method="post" enctype="multipart/form-data"> 请选择上传文件:<input type="file" name="myFile1" /><br/> 请选择上传文件:<input type="file" name="myFile2" /><br/> 请选择上传文件:<input type="file" name="myFile3" /><br/> <input type="submit" value="上传"/> </form> #你需要先引用上面的封装几个函数的文件 foreach($_FILES as $val){ $mes=uploadFile($val); echo $mes; }
单文件、数组文件上传封装
<?php header("content-type:text/html;charset=utf-8"); /** * 生成唯一字符串 * @return string */ function getUniName(){ return md5(uniqid(microtime(true),true)); } /** * 得到文件的扩展名 * @param string $filename * @return string */ function getExt($filename){ return strtolower(end(explode(".",$filename))); } /** * 构建上传文件信息 * @return array */ function buildInfo(){ if(!$_FILES){ return ; } $i=0; foreach($_FILES as $v){ //单文件,因为如果是多文件数组上传的话这个值会是一个数组类型 if(is_string($v['name'])){ $files[$i]=$v; $i++; }else{ //多文件 foreach($v['name'] as $key=>$val){ $files[$i]['name']=$val; $files[$i]['size']=$v['size'][$key]; $files[$i]['tmp_name']=$v['tmp_name'][$key]; $files[$i]['error']=$v['error'][$key]; $files[$i]['type']=$v['type'][$key]; $i++; } } } return $files; } function uploadFile($path="uploads",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$maxSize=2097152,$imgFlag=true){ if(!file_exists($path)){ mkdir($path,0777,true); } $i=0; $files=buildInfo(); if(!($files&&is_array($files))){ return ; } foreach($files as $file){ if($file['error']===UPLOAD_ERR_OK){ $ext=getExt($file['name']); //检测文件的扩展名 if(!in_array($ext,$allowExt)){ exit("非法文件类型"); } //校验是否是一个真正的图片类型 if($imgFlag){ if(!getimagesize($file['tmp_name'])){ exit("不是真正的图片类型"); } } //上传文件的大小 if($file['size']>$maxSize){ exit("上传文件过大"); } if(!is_uploaded_file($file['tmp_name'])){ exit("不是通过HTTP POST方式上传上来的"); } $filename=getUniName().".".$ext; $destination=$path."/".$filename; if(move_uploaded_file($file['tmp_name'], $destination)){ $file['name']=$filename; unset($file['tmp_name'],$file['size'],$file['type']); $uploadedFiles[$i]=$file; $i++; } }else{ switch($file['error']){ case 1: $mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZE break; case 2: $mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZE break; case 3: $mes="文件部分被上传";//UPLOAD_ERR_PARTIAL break; case 4: $mes="没有文件被上传1111";//UPLOAD_ERR_NO_FILE break; case 6: $mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIR break; case 7: $mes="文件不可写";//UPLOAD_ERR_CANT_WRITE; break; case 8: $mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSION break; } echo $mes; } } return $uploadedFiles; }
使用方法
#html <form action="doAction3.php" method="post" enctype="multipart/form-data"> 请选择上传文件:<input type="file" name="myFile[]" /><br/> 请选择上传文件:<input type="file" name="myFile[]" /><br/> 请选择上传文件:<input type="file" name="myFile[]" /><br/> 请选择上传文件:<input type="file" name="myFile1" /><br/> 请选择上传文件:<input type="file" name="myFile2" /><br/> <input type="submit" value="上传"/> </form> #你需要先引用上面的封装几个函数的文件 foreach($_FILES as $val){ $mes=uploadFile($val); echo $mes; }