Codeigniter檔案上傳型別不匹配錯誤

2022-02-12 15:25:34 字數 1132 閱讀 2010

codeigniter的檔案上傳類方便了我們使用php來處理檔案上傳的操作,使用起來非常簡單,如下:

如果只是處理型別的檔案,基本上不會遇到這個坑,如果處理到了 excel、zip、rar型別的檔案,你可能就會遇到明明在 allowed_types 中允許的檔案型別,最後收穫了 「the filetype you are attempting to upload is not allowed.」的錯誤,為什麼會這樣呢?

codeigniter的檔案上傳型別判斷在 is_allowed_filetype 這個函式中處理,造成這個錯誤的主要原因是因為判斷邏輯中有乙個 mime 型別判斷的步驟。

什麼是 mime 呢?

mime是multipurpose internet mail extention的縮寫,是描述訊息內容型別的網際網路標準。

為什麼需要判斷 mime?因為如果只從檔案字尾來判斷檔案型別,是非常危險的。不懷好意的使用者可能會把乙個可執行檔案字尾改成型別,上傳成功後,如果能夠獲得檔案的位址,並且檔案在可執行目錄,就能夠執行動態指令碼,還是很危險的。著名的dedecms就很多這種漏洞。

針對不同的字尾,codeigniter會從 config/mimes.php 檔案匹配post過來的資料中的 file_type 屬性,只有一樣才會校驗通過,否則就會發生檔案型別不匹配的錯誤。

找到問題的原因,解決起來就很方便了。我們只需要在 config/mimes.php 檔案中,新增對應的字尾以及file_type 這樣就能解決這個問題。下面是我為幾種常見檔案增加的配置:

補充:我這裡使用的codeigniter是2.x版本的,至於現在3.x版本中是否還存在這個問題並沒有測試,有遇到的朋友可以分享一下。

CodeIgniter檔案上傳類上傳中文名檔案出錯

由於upload.php中的寫檔案是通過copy和move uploaded file來實現的,因此當中文名作為引數傳遞到copy函式中時,需要將gb2312編碼的中文轉換為utf 8編碼形式 config file name iconv utf 8 gb2312 files userfile na...

codeigniter 非同步檔案操作

view id form class register publishdiv class wp class line class left div class center echo flag 1 l f div class right div div id file enctype multipa...

CodeIgniter中如何引用靜態檔案的路徑

引入外部檔案有幾種方法,這裡列舉兩種僅供參考,好久沒用ci了,拿過來熟悉一下,有不到之處還請莫怪。第一 ci自帶的base url來設定,如下 進入 application config config.php檔案,在config.php檔案中設定base url config base url 這裡...