在PHP中如何通過unpack來準確擷取檔案格式

來源:互聯網
上載者:User
目的:識別使用者上傳的XML

問題1:使用者上傳的XML可能存在修改尾碼的情況,即本身是指令碼語言,卻偽裝成XML,例如PHP

已解決:那麼我通過下面的代碼來準確擷取檔案尾碼

問題2:代碼是通過fread讀取檔案頭兩位元組,在識別圖片方面非常好使,但是在區別xml和PHP方面卻不是很清晰了,因為他們頭兩個位元組都是'

            if (($fp = fopen($this->path, 'rb')) == FALSE)            {                throw new \Exception('開啟檔案失敗。');            }            if (!($read = fread($fp, 2)))            {                throw new \Exception('檔案內容讀取為空白或讀取失敗');            };            $info = unpack('C2chars', $read);            $code = intval($info['chars1'].$info['chars2']);            fclose($fp);            switch ($code)            {                case 3780: return 'pdf';                case 5666: return 'psd';                case 6033: return 'html';                case 6063: return 'xml';    // php                default: throw new \Exception('檔案格式超出了系統識別範圍。');            }

回複內容:

目的:識別使用者上傳的XML

問題1:使用者上傳的XML可能存在修改尾碼的情況,即本身是指令碼語言,卻偽裝成XML,例如PHP

已解決:那麼我通過下面的代碼來準確擷取檔案尾碼

問題2:代碼是通過fread讀取檔案頭兩位元組,在識別圖片方面非常好使,但是在區別xml和PHP方面卻不是很清晰了,因為他們頭兩個位元組都是'

            if (($fp = fopen($this->path, 'rb')) == FALSE)            {                throw new \Exception('開啟檔案失敗。');            }            if (!($read = fread($fp, 2)))            {                throw new \Exception('檔案內容讀取為空白或讀取失敗');            };            $info = unpack('C2chars', $read);            $code = intval($info['chars1'].$info['chars2']);            fclose($fp);            switch ($code)            {                case 3780: return 'pdf';                case 5666: return 'psd';                case 6033: return 'html';                case 6063: return 'xml';    // php                default: throw new \Exception('檔案格式超出了系統識別範圍。');            }

其實我覺得沒你想的那麼複雜啊,不要太在意尾碼這個問題嘛,關鍵是檔案內容。你只要用XML類解析就好咯,比如simplexml,如果不是規範的XML文檔的話是會返回false的,另外最後也可以將內容全部轉換為string防止檔案內代碼的執行。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.