现在的位置: 首页学习笔记>正文
PHP上传文件问题解决
发表于6年前 学习笔记 评论数 3

今天我再继续进度来深度详解做上传文件的那些事.

PHP上传两个验证问题.

解决第一个问题如果上传错误怎么办.

我先用一个IF循环内嵌一个SWITCH循环解决这个问题.

PHP上传问题

 



  1.  if($_FILES['userfile']['error']>0)   

  2.  {   

  3.  switch($_FILES['userfile']['error'])   

  4.   

  5.  {   

  6.     case 1:echo "<script>alert('文件上传超过了约定值 PHP配置文件里面的');history.back();</script>";   

  7.     break;   

  8.     case 2:echo "<script>alert('文件超过了设置的最大值');history.back();</script>";   

  9.     break;   

  10.     case 3:echo "<script>alert('文件只上传了一半');history.back();</script>";   

  11.     break;   

  12.     case 4:echo "<script>alert('表示没有上载任何文件');history.back();</script>";   

  13.  }   

  14.  exit;   

  15.  }   

  16.     

  17.  //OK ,这样就做了一定的限制.   

  18.  //然后我们再来做一个验证.   

  19.  //让他只能上传JPG格式的图片.   

  20.     

  21.  if ($_FILES['userfile']['type']!="image/jpeg")   

  22.  {   

  23.     echo "<script>alert('图片的格式不对');history.back();</script>";   

  24.     exit;   

  25.  }   

  26.  //OK 这段代码就可以控制上传文件的格式.   

  27.   

  28.   

  29. 文件上传做到这里.普通的就差不多了.   

  30. 但是还是有很多问题.   

  31. 比如现在上传的时候   

  32. 还记得我们以前的那个phpSC.php文件.   

  33. <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />   

  34. 这是一个表单的控制文件大小代码.   

  35. 但是我们把这个代码删除的话。   

  36. 我们再上传就任意大小就可以了.   

  37. 这样我们就暴露出了一个问题.   

  38. 因为我们在配置PHP的那个文件里   

  39. 里面那个控制大小的就失效了.   

  40. 被绕了过去了.   

  41. 我们应该怎么办呢.   

  42.  //我们先创立一个常量.   

  43.  //判断配置大小   

  44.   

  45.  define('MAX_SIZE',2000000);   

  46.  //这就是一个2MB的文件控制的最大值.   

  47.   

  48.  if ($_FILES['userfile']['size']>MAX_SIZE)   

  49.  {   

  50.     echo "<script>alert('文件超过内配的最大值');history.back();</script>";   

  51.     exit;   

  52.  }   

  53.     

  54.   

  55.  //OK 这样就好了,不怕被绕过了.   

  56.     

  57.     

  58.  //还有一个问题就是IE的兼容性.   

  59.  //火狐的浏览器我们上传图片是没的问题的 但是IE浏览器...   

  60.  //上传JPG文件也会提示格式不正确.   

  61.  //这是怎么回事呢?  在IE点击查看原页面的时候会发现PJPG   

  62.  //我们现在就来一个switch()循环   

  63.  switch ($_FILES['userfile']['type'])   

  64.  {   

  65.     case 'image/jpeg': //这是火狐上传图片的.   

  66.     breack;   

  67.     case 'image/pjpeg'://这是IE上传图片的格式.   

  68.         break;   

  69.     case 'image/gif':   

  70.         break;   

  71.     case 'image/png';//这个是火狐   

  72.     break;   

  73.     case 'image/x-png'://这个是IE的,这些都是图片格式.   

  74.         default:echo "<script>alert('上传格式不正确');history.back();</script>";   

  75.         exit;   

  76.  }   

  77.     

  78.  //这样就可以解决这个问题了.   

  79.  //也可以用个更简单的方法.   

  80.  //创建一个常量.  然后把路径改成相对路径.   

  81.  //用这种方法 注意改了常量的话, 要把所有路径代码改下.否则避免出错.   

  82.     

  83.     

  84.  define('URL',dirname(__FILE__).'\uploads');   

  85.     $fileMimes = array('image/jpeg','image/pjpeg','image/png','image/x-png','image/gif');   

  86.        

  87.     //判断类型是否是数组里的一种   

  88.     if (is_array($fileMimes)) {   

  89.         if (!in_array($_FILES['userfile']['type'],$fileMimes)) {   

  90.              echo "<script>alert('本站只允许jpg、gif、png图片!');history.back();</script>";   

  91.              exit;   

  92.         }   

  93.     }   

  94.     

  95.     

  96.  //还有一个判断我们上传文件的目录有没有   

  97.  //没有的话就创建一个   

  98. //判断目录是否存在   

  99.     if (!is_dir(URL)) {   

  100.         mkdir(URL,0777);  //最大权限0777,意思是,如果没有这个目录,那么就创建   

  101.     }    

  102.     

  103.     

  104.     上传文件安全性还有很多问题和技巧.   

  105.     这个都是经验积累的...   

  106.     暂时学这些吧.   

  107.     PHP上传文件到这就结束了.   

【上篇】
【下篇】
×
腾讯微博