首页 > 代码库 > php部分---文件上传:错误处理、 客户端和服务器端的限制

php部分---文件上传:错误处理、 客户端和服务器端的限制

1.客户端页面

<!---客户端的配置    1.表单页面    2.表单发送方式为post    3.表单form中添加enctype="multipart/form-data"
 ------->
<body> <form action="doaction.php" method="post" enctype="multipart/form-data"> <input type="file" name="myfile"> <input type="submit" value="http://www.mamicode.com/上传"> </form></body>

2.处理页面doaction

<?php//$_FILES:文件上传变量print_r($_FILES);//$_FILES:保存着上传文件的信息/*1.name:上传文件的名称2.type:上传文件的MIME类型3.tmp_name:上传到服务器上的临时文件名4.size:上传文件的大小5.error:上传文件的错误号*/$filename=$_FILES[‘myfile‘][‘name‘];$type=$_FILES[‘myfile‘][‘type‘];$tmp_name=$_FILES[‘myfile‘][‘tmp_name‘];$size=$_FILES[‘myfile‘][‘size‘];$error=$_FILES[‘myfile‘][‘error‘];//将服务器上的临时文件移动到指定文件夹//1.move_uploaded_file(临时文件名,‘文件夹名’.$filename);   将服务器上的临时文件移动到指定文件夹,叫什么名字($filename),移动成功返回true,移动失败返回false。//move_uploaded_file($tmp_name,"wenjian/".$filename);//2.copy("临时文件名","文件名".$filename)  将服务器上的临时文件拷贝到指定文件夹//文件上传配置/*file_uploads = on,支持HTTP上传upload_tmp_dir=  ,临时文件保存的目录upload_max_filesize=2M,允许上传文件的最大值max_file_uploads=20,允许一次上传的最大文件数post_max_size=8M,post方式发送数据的最大值*/

3.错误信息处理

//上传文件失败时,判断一下错误号,只有为0或者UPLOAD_ERR_OK,才没有错误发生,上传成功//下面是抓取错误if($error==UPLOAD_ERR_OK){    if(move_uploaded_file($tmp_name,"wenjian/".$filename))    {        echo "文件".$filename."上传成功";        }else        {            echo "文件".$filename."上传失败";            }        }    else    {        //匹配错误信息        switch($error)        {            case 1:            echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";            break;            case 2:            echo "超过了表单MAX_FILE_SIZE的限制大小";            break;            case 3:            echo "文件部分被上传";            break;            case 4:            echo "没有选择上传文件";            break;            case 6:            echo "没有找到临时目录";            break;            case 7:            case 8:            echo "系统错误";            break;                        }                }?>

4.上传文件限制

//客户端限制://通过表单隐藏域限制上传文件的最大值<input type="hidden" name="MAX_FILE_SIZE" value="http://www.mamicode.com/字节数">//通过accept属性限制上传文件的类型<input type="file" name="myfile" accept="文件的MIME类型">

//服务器端限制限制上传文件大小限制上传文件类型检测是否为真实图片类型检测是否为HTTP POST方式上传<?php$fileinfo=$_FILES["myfile"];$maxsize=2097152;         //写最大的字节数,自己算$allowext=array(‘jpeg‘,‘jpg‘,‘pnd‘,‘gif‘,‘wbmp‘);   //定义一下允许的上传文件类型//1.判断错误号if($fileinfo[‘error‘]==0){    //1.判断上传文件大小if($fileinfo[‘size‘]>$maxsize)    {        exit(‘上传文件过大‘);        } //2.判断上传文件类型是不是在规定类型中$ext=strtolower(end(explode(‘,‘,$fileinfo[‘name‘])));//截取上传文件扩展名    if(!in_array($ext,$allowext))    // 判断上传文件的扩展名是不是在定义类型中    {         exit(‘非法文件类型‘);            } //3.判断文件是否是通过HTTP POST方式上传上来的if(!is_uploaded_file($fileinfo[‘tmp_name‘]))    {        exit(‘文件不是通过HTTP POST方式上传上来的‘);        }         //4.检测是否为真实的图片类型,而不是认为改动的$flag=true;    if($flag)    {        if(!getimagesize($fileinfo[‘tmp_name‘]))        {            echo "不是真实的图片类型";            }        }        $path=‘uploads‘;  //服务器上存储文件的文件名//5.判断服务器上存储的文件夹在不在if(!file_exists($path))    {        mkdir($path,0777,true);//不存在就创建一个目录        chmod($path,0777);//加一个权限                }  //6.确保文件名唯一,防止重名产生覆盖$uniname=md5(uniqid(microtime(true),true)).‘.‘.$ext;   //通过MD5加密等措施给文件名取名        $destination=$path.‘/‘.$uniname;    if(move_uploaded_file($fileinfo[‘tmp_name‘],$destination)) //上传文件    {        echo "文件上传成功";        }else        {            echo "文件上传失败";            }        }else    {//匹配错误信息   switch($error)        {            case 1:            echo "上传文件超过了PHP配置文件中upload_max_filesize选项的值";            break;            case 2:            echo "超过了表单MAX_FILE_SIZE的限制大小";            break;            case 3:            echo "文件部分被上传";            break;            case 4:            echo "没有选择上传文件";            break;            case 6:            echo "没有找到临时目录";            break;            case 7:            case 8:            echo "系统错误";            break;                        }                        }?> 

 

php部分---文件上传:错误处理、 客户端和服务器端的限制