php上传(二)

上传的主体页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <title>Document</title>
</head>
<body>
    <form action="doAction.php" method='post' enctype='multipart/form-data'>
        请选择头像: <input   type="file" name="myFile" id="" /><br/>
        <input type="submit" value="上传" />
    </form>    
</body>
</html>
处理页面 doAction.php
<?php
header('content-type:text/html;charset=utf-8');
//1.接受数据
$fileInfo=$_FILES['myFile'];
$filename=$fileInfo['name'];
$type=$fileInfo['type'];
$tmp_name=$fileInfo['tmp_name'];
$size=$fileInfo['size'];
$error=$fileInfo['error'];

//2.判断错误号

if($error>0){
    //匹配错误信息
    switch($error){
        case 1:
            $msg='超过了PHP配置文件中upload_max_filesize的值';
            break;
        case 2:
            $msg='超过了MAX_FILE_SIZE选项的值';
            break;
        case 3:
            $msg='文件部分被上传';
            break;
        case 4:
            $msg='没有选择上传文件';
            break;
        case 6:
        case 7:
        case 8:
            $msg='系统错误';
            break;
    }
    exit($msg);
}

//检测上传文件的大小
$maxSize=2097152;//2M 允许上传的最大大小
if($size>$maxSize){
    exit('上传文件过大');
}

//检测上传文件的类型
$ext=strtolower(pathinfo($filename,PATHINFO_EXTENSION));
$allowExt=array('jpeg','jpg','png','gif');//允许上传文件的扩展名
if(!in_array($ext,$allowExt)){
    exit('非法文件类型');
}
//检测是否是真实图片
$flag=true;//默认检测是否是真实图片
if($flag){
    if(!getimagesize($tmp_name)){
        exit('文件不是真实图片');
    }
}
//检测是否是通过HTTP POST方式上传上来的

if(!is_uploaded_file($tmp_name)){
    exit('文件不是通过HTTP POST方式上传上来的');
}


//开始移动文件
$uploadPath='uploads';
//检测目录是否存在,如果不存在则创建
if(!file_exists($uploadPath)){
    //创建目录
    mkdir($uploadPath,0777,true);
}
//防止文件重名,生成唯一的文件名
$uniName=md5(uniqid()).'.'.$ext;
$destination=$uploadPath.'/'.$uniName;
if(!@move_uploaded_file($tmp_name, $destination)){
    exit('文件移动失败');
}
echo "文件{$filename}上传成功";

另一种写法

<?php
header('content-type:text/html;charset=utf-8');
//在服务器端做限制

$fileInfo=$_FILES['myFile'];
$filename=$fileInfo['name'];
$type=$fileInfo['type'];
$tmp_name=$fileInfo['tmp_name'];
$error=$fileInfo['error'];
$size=$fileInfo['size'];//上传文件的大小
$maxSize=2097152;//字节,允许上传文件的最大值
$allowExt=array('jpeg','jpg','png','gif');//允许上传文件的扩展名
$reUpload="<p><a href='upload.php'>重新上传</a></p>";
//2.判断错误号
if($error==UPLOAD_ERR_OK){
    //3.检测上传文件的大小是否符合规范
    if($size<=$maxSize){
        //4.检测上传文件的扩展名在允许的范围内
        //取出上传文件的扩展名
        $arr=explode('.',$filename);
        $ext=end($arr);
        $ext=strtolower($ext);
        //echo $ext;
        if(in_array($ext,$allowExt)){
            //echo '上传成功<br/>';
            //5.检测文件是否是通过HTTP POST方式上传上来
            //is_uploaded_file($tmp_name):检测服务器端的临时文件
            //是否是通过HTTP POST方式上传上来的
            if(is_uploaded_file($tmp_name)){
                //6.移动文件
                if(@move_uploaded_file($tmp_name, "../uploads/".$filename)){
                    echo '文件上传成功,信息如下:<hr/>';
                    echo '文件名:'.$filename,'<br/>';
                    echo '文件大小:'.$size,'<br/>';
                    echo '文件类型:'.$type,'<br/>';
                }else{
                    die('文件移动失败'.$reUpload);
                }
                
                
            }else{
                die('文件不是通过HTTP POST方式上传上来的'.$reUpload);
            }
            
        }else{
            die('非法文件类型'.$reUpload);
        }
        
    }else{
        die('上传文件过大<br/>'.$reUpload);
    }
}else{
    //匹配错误信息
    switch($error){
        case 1:
            $msg='超过了PHP配置文件upload_max_filesize选项的值';
            break;
        case 2:
            $msg='超过了表单的MAX_FILE_SIZE选项的值';
            break;
        case 3:
            $msg='文件部分被上传';
            break;
        case 4:
            $msg='没有选择上传文件';
            break;
        case 6:
        case 7:
        case 8:
            $msg='系统错误';
            break;
    }
    die($msg);
    
    
}

上传类

<?php
class Upload{
    //把文件保存
    function saveFile($toPath="./",$allowType=array('image/png','image/gif','image/jpeg','image/pjpeg'),$allowSize=2000000){
        if(!empty($_FILES)){//有文件上传
            $reArr=array();
            foreach($_FILES['upload']['error'] as $k=>$v){
                if($v===0){//文件上传没有出错
                    //获取类型进行判断
                    $type=$_FILES['upload']['type'][$k];
                    if(in_array($type,$allowType)){//类型是否合法
                        //判断size
                        $size=$_FILES['upload']['size'][$k];
                        if($size<=$allowSize){
                            //转移
                            $oldName=$_FILES['upload']['name'][$k];
                            $newName=$this->newName($oldName);
                            //保存
                            $re=move_uploaded_file($_FILES['upload']['tmp_name'][$k],$toPath."/".$newName);
                            if($re){
                                $reArr[$k]=$newName;
                            }else{
                                $reArr[$k]=false;
                            }
                        }else{
                            $reArr[$k]=false;
                        }
                    }else{
                        $reArr[$k]=false;
                    }
                }else{
                    $reArr[$k]=false;
                }
            }
            return $reArr;
        }else{
            return false;
        }
    }
    //产生新名称
    private function newName($oldName){//a.jpg
        $name=md5(uniqid(microtime(),true));
        $ext=pathinfo($oldName,PATHINFO_EXTENSION);
        return $name.".".$ext;
    }
}
 
posted @ 2015-09-02 10:35  tiandi2050  阅读(312)  评论(0编辑  收藏  举报