PHP判斷上傳檔案型別(防修改字尾)

2021-08-25 15:49:13 字數 1099 閱讀 6797

網上流傳著一種說法,用php讀檔案頭部兩個位元組判斷檔案真實型別,其實這樣判斷也是不精確的,就拿office的檔案型別來說。

word以前的格式是storage方式儲存,但是現在最新版本的docx是乙個zip包。

即使是以前的storage方式儲存的格式,也不能確定就是word文件,因為qq聊天記錄也是採用這種方式儲存的。所以,如果從檔案格式分析的話,將會是很複雜的事情,但是可以實現精確的判斷是不是word文件

比如,讀取storage結構,判斷裡面的子節點名字,如果是docx格式,先用zlib解壓,再判斷裡面的xml檔案和目錄名字,等等,其他office格式類似。

從上面乙個簡單的判斷,我們可以得知,讀檔案頭是不能真實判斷檔案型別的,判斷檔案型別,是乙個很複雜的工作,下面是php讀檔案頭判斷檔案型別的**,但是不精準,可以作為參考。不過,除了office,其他還是挺準的。

但是我不知道反過來定義 6063或者6033 就是指php的話 是不是不夠嚴謹啊。

對於上傳檔案型別的判斷,一直沒有太好的辦法,即使使用上面的**,也有辦法構造假的的(如何構造不再傳播),有人使用getimagesize來判斷,不失為一種好辦法:

PHP判斷上傳檔案型別(防修改字尾)

網上流傳著一種說法,用php讀檔案頭部兩個位元組判斷檔案真實型別,其實這樣判斷也是不精確的,就拿office的檔案型別來說。word以前的格式是storage方式儲存,但是現在最新版本的docx是乙個zip包。即使是以前的storage方式儲存的格式,也不能確定就是word文件,因為qq聊天記錄也是...

js 判斷上傳檔案型別

用js來控制檔案上傳型別的時候,按照如下 進行控制的時候,我第一次選擇乙個檔案,會觸發onchange事件,但是我把內容清空,在選擇同樣的檔案,就不觸發onchange事件了 如下 function isvalidatefile obj else return true 可能是上述方法只是清空了頁面...

PHP 判斷檔案型別

參考 黑夜路人 一般我們都是按照副檔名來判斷檔案型別,但是這個很不靠譜,輕易就通過修改副檔名來躲避了,一般必須要讀取檔案資訊來識別。foreach files as file 注 檔名擴充套件 linux不使用檔名擴充套件來識別檔案的型別。相反,linux根據檔案的頭內容來識別其型別。為了提高人類可...