【FrameWork】CodeIgniter在FIREFOX無法上傳DOC、ZIP等特定檔案的解決方法。

edited 十月 2013 in 程式架構
會發這篇主要是最終和另一位資深工程師找到了正確的問題點。
如果有人使用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修正這個問題。


原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=5012

評論

Sign In or Register to comment.