看板 PHP 關於我們 聯絡資訊
會發這篇主要是最終和另一位資深工程師找到了正確的問題點。 如果有人使用CodeIgniter可能會發現為什麼像是doc或是zip在firefox會無法上傳。 我們找了很多文章,包括一位大陸人寫的修改Upload.php的方法。 但那不是個好方法。儘可能的我們不應該去動到原本的設計結構。 可以確定的是,那位大陸工程師用的是xdebug+firefox。 所以他動了Upload.php的這一串。 function is_allowed_filetype() { if (count($this->allowed_types) == 0 OR ! is_array($this->allowed_types)) { $this->set_error('upload_no_file_types'); return FALSE; } 他把$this->set_error('upload_no_file_types')和return FLASE拿掉 換成了return TURE; 等同是強迫在無設定上傳副檔名下,強迫上傳。 而不去做圖形的判別。 但既然原來的程式功能就是要去做判別。 我們就不應該隨便去修改人家的好意。 最終經過一長串的重新xdebug之後我們卻意外的發現到一個很奇怪的狀況。 我們一樣debug到Upload.php這隻檔。 卻意外發現firefox傳回來到$file_type的值是:applocation/msword 但是在mimes的設定是:application/msword 再用ie下去測試時,也發現傳過來的是:application/msword 即使英文很爛的我,還是不免去google一下application和applocation 然後就發現applocation查無此字。 所以那是錯別字(搞英文?) 很明顯的firefox的開發工程師在設定傳回檔案資料的形態時打錯字了。 這就是為什麼使用CodeIgniter的上傳功能會變成無法上傳zip和doc。 當然應該還有其他只要有application的檔案形態在firefox就會通通不能跑。 解決的方式就是system/application/config/mimes.php 把'doc' => 'appliction/doc' 改成: 'doc' => array('application/msword','applocation/msword'); (ZIP或其他檔案格式也都依此方法修正) 這樣就可以讓ie和firefox通吃上傳的格式了。 雖然我不知道到底要怎樣才會讓firefox修正這個問題。 另外就是關於$config["allowed_types"] = "jpg|gif|png|doc"; 會造成不能上傳的問題。 那是codeigniter邏輯上的錯誤。 這個倒是有文件指出來。 不過基於避免因為擅自修改系統功能檔案造成維護性的問題。 只能請大家暫時使用$config["allowed_types"] = "doc|jpg|gif|png"; 也就是上傳是圖形類別的副檔名放在最後面。 然後期待下一版出來時,開發團隊能修正這個邏輯bug。 修正文章錯誤: 'doc' => array('application/doc','applocation/doc'); 應為: 'doc' => array('application/msword','applocation/msword'); system/config/mimes.php 應為 system/application/config/mimes.php (錯誤處已修正) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.137.189.252
kylekai:幹得好!!! 03/22 12:06
awashharp:推薦這篇文章!好熱心!@@ 03/22 14:16
※ 編輯: tkdmaf 來自: 220.137.189.252 (03/22 14:35)
mervynW:GJ , 回報firefox bug 會有很多人感謝你的 03/22 16:33
cjoe:推 03/22 23:06
DRLai:推一個,m一下吧XDD 03/23 12:49
ccghost:太厲害了,酷~ 07/04 22:15