php-關於檢查檔案類型函數的疑問

來源:互聯網
上載者:User
關鍵字 php
php

 /** * 檢查檔案類型 * * @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));    }    if ($limit_ext_types && stristr($limit_ext_types, '|' . $extname . '|') === false)//??    {        return '';    }    $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'|| $extname == 'pptx' ||                 $extname == 'xlsx' || $extname == 'docx')            {                $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")        {            if (substr($str,0x200,4) == "\xEC\xA5\xC1\x00" || $extname == 'docx')            {                $format = 'docx';            }            elseif (substr($str,0x200,2) == "\x09\x08" || $extname == 'xlsx')            {                $format = 'xlsx';            } elseif (substr($str,0x200,4) == "\xFD\xFF\xFF\xFF" || $extname == 'pptx')            {                $format = 'pptx';            }else            {                $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 = '';    }    return $format;}

整個函數用於檢測檔案類型,其中

 elseif (substr($str ,0, 3) == "\xFF\xD8\xFF")        {            $format = 'jpg';        }                 elseif (substr($str ,0, 8) == "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")        {            $format = 'png';        }                 elseif (substr($str ,0, 4) == "\xD0\xCF\x11\xE0")                   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';            }

這些語句的原理是什嗎?而且為什麼都用十六進位?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.