学习地址: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;
}