2009-11-18 116 views
2

我正在處理需要用戶上傳Microsoft Word文檔的文檔。驗證上傳的文件

除了檢查文件擴展名是.doc還是.docx,有沒有其他方法可以驗證上傳的文件實際上是Microsoft Word文檔,而不是任何其他文件重命名爲.doc或.docx擴展名。

在此先感謝。

回答

6

如果您不使用PHP 5.3,那麼mime_content_type函數可能會讓您感興趣。

如果您使用PHP 5.3和/或可以安裝PECL擴展,新的Fileinfo庫應該可以完成這項工作;有關更多信息,請參見finfo_file
在給出的例子中,其中一個識別的MIME類型是「application/vnd.ms-excel」;所以,有一點點運氣,它應該能夠處理MS Word文件太;-)

5

.docx是一組使用標準zip壓縮方案壓縮的XML文件。因此,您可以嘗試將它傳遞給解壓縮算法,並查看它是否解壓縮,然後嘗試查看其中正確的xml文件並檢查期望在文檔中找到的字段。

3

你可以嘗試:

$type = `file -bi $UploadedFilePath`; 

這將啓動linux的file計劃,將考慮該文件的內容,並檢測它的文件類型。

它適用於很多文件類型(我們在生產代碼中使用它來檢測上傳的文件),但不確定在Microsoft Word文檔版本上。

3

對於微軟的.doc文件,您可以檢查文件的前幾個字節的幻數:

D0 CF 11 E0 A1 B1 1A E1

和字節偏移512處的「副標題」。