Heim  >  Artikel  >  Backend-Entwicklung  >  php判断上传文件类型的代码一例

php判断上传文件类型的代码一例

WBOY
WBOYOriginal
2016-07-25 08:59:41969Durchsuche
  1. /**
  2. * 判断上传文件类型
  3. * Edit bbs.it-home.org
  4. */
  5. function file_type($filename)
  6. {
  7. $file = fopen($filename, "rb");
  8. $bin = fread($file, 2); //只读2字节
  9. fclose($file);
  10. $strInfo = @unpack("C2chars", $bin);
  11. $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
  12. $fileType = '';
  13. switch ($typeCode)
  14. {
  15. case 7790:
  16. $fileType = 'exe';
  17. break;
  18. case 7784:
  19. $fileType = 'midi';
  20. break;
  21. case 8297:
  22. $fileType = 'rar';
  23. break;
  24. case 8075:
  25. $fileType = 'zip';
  26. break;
  27. case 255216:
  28. $fileType = 'jpg';
  29. break;
  30. case 7173:
  31. $fileType = 'gif';
  32. break;
  33. case 6677:
  34. $fileType = 'bmp';
  35. break;
  36. case 13780:
  37. $fileType = 'png';
  38. break;
  39. default:
  40. $fileType = 'unknown: '.$typeCode;
  41. }
  42. //Fix
  43. if ($strInfo['chars1']=='-1' AND $strInfo['chars2']=='-40' ) return 'jpg';
  44. if ($strInfo['chars1']=='-119' AND $strInfo['chars2']=='80' ) return 'png';
  45. return $fileType;
  46. }
  47. //调用
  48. echo file_type('start.php'); // 6063 or 6033
  49. ?>
复制代码

不知道反过来定义 6063或者6033 就是指php的话 是不是不够严谨啊。

上面的代码,对于构造假的图片的文件类型判断,不是很好使。 此时可以考虑使用getimagesize来判断,参考代码如下:

  1. /**
  2. * getimagesize判断文件类型
  3. * Edit bbs.it-home.org
  4. */
  5. if(in_array($attach['ext'], array('jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp')) && function_exists('getimagesize') && !@getimagesize($target))
  6. {
  7. unlink($target);
  8. upload_error('post_attachment_ext_notallowed', $attacharray);
  9. }
  10. ?>
复制代码


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn