文件上传分为两个部分,HTML显示部分和PHP处理部分,HTML部分主要是让用户来选择所要上传的文件,然后通过PHP中的$_FILES,我们可以把文件上传到服务器的指定目录。

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="上传"> </form></body>

2.处理页面doaction

$_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="字节数">

通过accept属性限制上传文件的类型

<input type="file" name="myfile" accept="文件的MIME类型">

《服务器端限制》

1.限制上传文件大小

2.限制上传文件类型

3.检测是否为真实图片类型

4.检测是否为HTTP POST方式上传

5.判断服务器上存储的文件夹在不在

6.防止重名产生覆盖

<?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;      }    }?>

5.完整的上传文件步骤

第一步:表单页内容

<body> <form action="doaction.php" method="post" enctype="multipart/form-data">//通过表单隐藏域限制上传文件的最大值<input type="hidden" name="MAX_FILE_SIZE" value="字节数">//通过accept属性限制上传文件的类型<input type="file" name="myfile" accept="文件的MIME类型"></form> </body>

第二步:处理界面。定义变量

<?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.限制上传文件大小

2.限制上传文件类型

3.检测是否为真实图片类型

4.检测是否为HTTP POST方式上传

5.判断服务器上存储的文件夹在不在

6.防止重名产生覆盖 

//服务器端限制<?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;  $destination=inocv("UTF-8","gb2312",$destination); //如果上传的文件名中有汉字,需要转码一下,用inocv函数,把utf-8转为gb2312.  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文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网页设计网站的支持!