我正在處理需要用戶上傳Microsoft Word文檔的文檔。驗證上傳的文件
除了檢查文件擴展名是.doc還是.docx,有沒有其他方法可以驗證上傳的文件實際上是Microsoft Word文檔,而不是任何其他文件重命名爲.doc或.docx擴展名。
在此先感謝。
我正在處理需要用戶上傳Microsoft Word文檔的文檔。驗證上傳的文件
除了檢查文件擴展名是.doc還是.docx,有沒有其他方法可以驗證上傳的文件實際上是Microsoft Word文檔,而不是任何其他文件重命名爲.doc或.docx擴展名。
在此先感謝。
如果您不使用PHP 5.3,那麼mime_content_type
函數可能會讓您感興趣。
如果您使用PHP 5.3和/或可以安裝PECL擴展,新的Fileinfo庫應該可以完成這項工作;有關更多信息,請參見finfo_file
。
在給出的例子中,其中一個識別的MIME類型是「application/vnd.ms-excel
」;所以,有一點點運氣,它應該能夠處理MS Word文件太;-)
.docx
是一組使用標準zip
壓縮方案壓縮的XML文件。因此,您可以嘗試將它傳遞給解壓縮算法,並查看它是否解壓縮,然後嘗試查看其中正確的xml文件並檢查期望在文檔中找到的字段。
你可以嘗試:
$type = `file -bi $UploadedFilePath`;
這將啓動linux的file
計劃,將考慮該文件的內容,並檢測它的文件類型。
它適用於很多文件類型(我們在生產代碼中使用它來檢測上傳的文件),但不確定在Microsoft Word文檔版本上。
對於微軟的.doc文件,您可以檢查文件的前幾個字節的幻數:
D0 CF 11 E0 A1 B1 1A E1
和字節偏移512處的「副標題」。