- 在线时间
- 525 小时
- 专家
- 0
- UID
- 16020
- 注册时间
- 2002-1-19
- 帖子
- 2408
- 精华
- 1
- 积分
- 13384
- 离线
- 112 天
专长: Javascript编程,PHP,MySQL
- 帖子
- 2408
- 体力
- 13345
- 威望
- 39
|
发表于 2007-12-3 23:02:09
|显示全部楼层
如果检测GIF/JPG/PNG/BMP格式图片,可以使用getimagesize函数。
如果是其它的文件,可以检测文件头与扩展名。
附一个检测函数
- /**
- * 检查文件类型
- *
- * @access public
- * @param string filename 文件名
- * @param string realname 真实文件名
- * @param string limit_ext_types 允许的文件类型
- * @return string
- */
- function check_file_type($filename, $realname = '', $limit_ext_types = '')
- {
- if ($realname)
- {
- $extname = strtolower(substr($realname, strrpos($realname, '.') + 1));
- }
- else
- {
- $extname = strtolower(substr($filename, strrpos($filename, '.') + 1));
- }
- $str = $format = '';
- $file = @fopen($filename, 'rb');
- if ($file)
- {
- $str = @fread($file, 0x400); // 读取前 1024 个字节
- @fclose($file);
- }
- else
- {
- if (stristr($filename, ROOT_PATH) === false)
- {
- if ($extname == 'jpg' || $extname == 'jpeg' || $extname == 'gif' || $extname == 'png' || $extname == 'doc' ||
- $extname == 'xls' || $extname == 'txt' || $extname == 'zip' || $extname == 'rar' || $extname == 'ppt' ||
- $extname == 'pdf' || $extname == 'rm' || $extname == 'mid' || $extname == 'wav' || $extname == 'bmp' ||
- $extname == 'swf' || $extname == 'chm' || $extname == 'sql' || $extname == 'cert')
- {
- $format = $extname;
- }
- }
- else
- {
- return '';
- }
- }
- if ($format == '' && strlen($str) >= 2 )
- {
- if (substr($str, 0, 4) == 'MThd' && $extname != 'txt')
- {
- $format = 'mid';
- }
- elseif (substr($str, 0, 4) == 'RIFF' && $extname == 'wav')
- {
- $format = 'wav';
- }
- elseif (substr($str ,0, 3) == "\xFF\xD8\xFF")
- {
- $format = 'jpg';
- }
- elseif (substr($str ,0, 4) == 'GIF8' && $extname != 'txt')
- {
- $format = 'gif';
- }
- elseif (substr($str ,0, 8) == "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
- {
- $format = 'png';
- }
- elseif (substr($str ,0, 2) == 'BM' && $extname != 'txt')
- {
- $format = 'bmp';
- }
- elseif ((substr($str ,0, 3) == 'CWS' || substr($str ,0, 3) == 'FWS') && $extname != 'txt')
- {
- $format = 'swf';
- }
- elseif (substr($str ,0, 4) == "\xD0\xCF\x11\xE0")
- { // D0CF11E == DOCFILE == Microsoft Office Document
- if (substr($str,0x200,4) == "\xEC\xA5\xC1\x00" || $extname == 'doc')
- {
- $format = 'doc';
- }
- elseif (substr($str,0x200,2) == "\x09\x08" || $extname == 'xls')
- {
- $format = 'xls';
- } elseif (substr($str,0x200,4) == "\xFD\xFF\xFF\xFF" || $extname == 'ppt')
- {
- $format = 'ppt';
- }
- } elseif (substr($str ,0, 4) == "PK\x03\x04")
- {
- $format = 'zip';
- } elseif (substr($str ,0, 4) == 'Rar!' && $extname != 'txt')
- {
- $format = 'rar';
- } elseif (substr($str ,0, 4) == "\x25PDF")
- {
- $format = 'pdf';
- } elseif (substr($str ,0, 3) == "\x30\x82\x0a")
- {
- $format = 'cert';
- } elseif (substr($str ,0, 4) == 'ITSF' && $extname != 'txt')
- {
- $format = 'chm';
- } elseif (substr($str ,0, 4) == "\x2ERMF")
- {
- $format = 'rm';
- } elseif ($extname == 'sql')
- {
- $format = 'sql';
- } elseif ($extname == 'txt')
- {
- $format = 'txt';
- }
- }
- if ($limit_ext_types && stristr($limit_ext_types, '|' . $format . '|') === false)
- {
- $format = '';
- }
- if ($extname != $format)
- {
- $format = '';
- }
- return $format;
- }
复制代码
[ 本帖最后由 wenming 于 2007-12-3 23:03 编辑 ] |
|