我正在創建文件上傳腳本,我正在尋找驗證上傳文件的最佳技術和實踐。PHP上傳文件驗證
允許的擴展名是:
$allowed_extensions = array('gif','jpg','png','swf','doc','docx','pdf','zip','rar','rtf','psd');
下面是我在做什麼的清單。
檢查文件擴展名
$path_info = pathinfo($filename); if(!in_array($path_info['extension'], $allowed_extensions)) { die('File #'.$i.': Incorrent file extension.'); }
檢查文件mime類型
$allowed_mimes = array('image/jpeg','image/png','image/gif','text/richtext','multipart/x-zip','application/x-shockwave-flash','application/msword','application/pdf','application/x-rar-compressed','image/vnd.adobe.photoshop'); if(!in_array(finfo_file($finfo, $file), $allowed_mimes)) { die('File #'.$i.': Incorrent mime type.'); }
檢查文件的大小。
我該怎麼做才能確保上傳的文件是有效的文件?我注意到奇怪的事情。我將.jpg文件擴展名更改爲.zip,並將其上傳。我認爲它會有不正確的MIME類型,但之後我注意到我沒有檢查特定的類型,但是如果數組中存在特定的MIME類型。我會在稍後修復它,這對我來說沒有任何問題(當然,如果你有任何好的解決方案/想法,請不要猶豫分享它)。我知道如何處理圖像(嘗試調整大小,旋轉,裁剪等),但不知道如何驗證其他擴展。
現在是我的問題了。
- 你知道驗證這些文件的好技巧嗎?也許我應該解壓縮.zip/.rar文件的檔案,但文檔(doc,pdf)怎麼樣?
- 將旋轉,調整.psd文件的大小?
- 基本上我認爲.PSD文件有以下MIME類型:應用程序/八位字節流,但是當
我試着上傳文件.PSD這表明我(圖片/ vnd.adobe.photoshop)。我對此有點困惑。文件是否總是具有相同的MIME類型?
此外,我不能強制代碼塊工作。有人猜測爲什麼?
所以,糾正我,如果我錯了,如果JPEG的起始字節不同於'0xFF,0xD8;'這意味着文件是無效的權利?有沒有「起始字節」的列表?或...我如何創建它? – Tom 2010-08-20 22:27:58
這裏有一個體面的列表:http://www.mikekunz.com/image_file_header.html雖然它缺少PNG,但是它的頭部與我所看到的非常一致。 – 2010-08-20 23:52:40
@Collin艾倫:非常感謝!現在我知道要搜索什麼。 – Tom 2010-08-21 01:56:45