제목 | CI 파일 업로드 버그 | ||
---|---|---|---|
글쓴이 | 마냐 | 작성시각 | 2009/08/23 22:05:00 |
|
|||
- 관련주소 : http://codeigniter.com/forums/viewthread/113029/ 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; } $image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe'); foreach ($this->allowed_types as $val) { $mime = $this->mimes_types(strtolower($val)); // Images get some additional checks if (in_array($val, $image_types)) { if (getimagesize($this->file_temp) === FALSE) { return FALSE; } } if (is_array($mime)) { if (in_array($this->file_type, $mime, TRUE)) { return TRUE; } } else { if ($mime == $this->file_type) { return TRUE; } } } return FALSE; }- 버그상황 // Image 확장자와 기타 확장자가 같이 있는 경우 $config['allowed_types'] = 'jpg|gif|zip|txt';---- 코드가 좀 어이없긴 하네요. ㅡ_ foreach 로 allowed_types 을 돌리는데 업로드된 확장자 여부에 상관없이. in_array($val, $image_types)) 를 반드시 하게 됩니다. 여기서 이미지파일이 아닌 파일은 mime type를 확인하기도 전에 if (getimagesize($this->file_temp) === FALSE) 위 조건에 걸려서 무조건 false 가 출력됩니다. 제대로 하려면. foreach ($this->allowed_types as $val) { if ($확장자 == $val) { if (in_array($확장자, $image_types)) { // 이미지처리 } // 처리 } // 패쓰 }와 같은 형식으로 코어코드가 수정되어야 합니다. 앞서 말한대로 코드가 좀 어이없죠. 코어수정 없이 해결하려면. 관련주소의 http://codeigniter.com/forums/viewthread/113029/#575124 $allowed_types = 'pdf|doc|jpg|zip|png|gif'; $config['allowed_types'] = substr($allowed_types, strpos($allowed_types, substr($_FILES['userfile']['name'], -3)), 3);와 같이 업로드된 파일에 해당하는 확장자만 넘겨주면 됩니다. substr로 확장자 구하는건 정확성이 떨어지니... preg_match("/\.(".$allowed_types.")$/i", $_FILES['userfile']['name'], $ext); $config['allowed_types'] = (isset($ext[1])) ? $ext[1] : false;정도로 하면 되겠네요. |
|||
다음글 | [lib추가] CI RSS Parser 이용하기 (1) | ||
이전글 | [예제] 엑티브 레코드 기초 사용 (4) | ||
emc
/
2009/08/24 09:43:52 /
추천
0
|
변종원(웅파)
/
2009/08/25 16:19:19 /
추천
0
1.7.2에서는 해결되겠죠? ^^
|
가우리언
/
2010/03/29 09:37:18 /
추천
0
1.7.2 에서도 해결이 안된듯 합니다.
|
개발사랑
/
2014/08/08 18:05:36 /
추천
1
현재 ci 포럼에 올라와 있는 것은 예전것으로 core 소스는 많이 수정되었습니다.
hwp파일이 올라가지 않았던 이유는 코드이그나이터에 등록된 파일 확장자가 아니어서 였습니다. 이에 core소스를 분석한 결과 아래와 같은 코드를 발견했습니다. /application/config/mimes.php $mimes = array( 'hqx' => 'application/mac-binhex40', 'cpt' => 'application/mac-compactpro', 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'), 'bin' => 'application/macbinary', 'dms' => 'application/octet-stream', 'lha' => 'application/octet-stream', 'lzh' => 'application/octet-stream', 'exe' => array('application/octet-stream', 'application/x-msdownload'), 'class' => 'application/octet-stream', 'psd' => 'application/x-photoshop', 'so' => 'application/octet-stream', 'sea' => 'application/octet-stream', 'dll' => 'application/octet-stream', 'oda' => 'application/oda', 'pdf' => array('application/pdf', 'application/x-download'), 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'ps' => 'application/postscript', 'smi' => 'application/smil', 'smil' => 'application/smil', 'mif' => 'application/vnd.mif', 'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'), 'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'), 'wbxml' => 'application/wbxml', 'wmlc' => 'application/wmlc', 'dcr' => 'application/x-director', 'dir' => 'application/x-director', 'dxr' => 'application/x-director', 'dvi' => 'application/x-dvi', 'gtar' => 'application/x-gtar', 'gz' => 'application/x-gzip', 'php' => 'application/x-httpd-php', 'php4' => 'application/x-httpd-php', 'php3' => 'application/x-httpd-php', 'phtml' => 'application/x-httpd-php', 'phps' => 'application/x-httpd-php-source', 'js' => 'application/x-javascript', 'swf' => 'application/x-shockwave-flash', 'sit' => 'application/x-stuffit', 'tar' => 'application/x-tar', 'tgz' => array('application/x-tar', 'application/x-gzip-compressed'), 'xhtml' => 'application/xhtml+xml', 'xht' => 'application/xhtml+xml', 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'), 'mid' => 'audio/midi', 'midi' => 'audio/midi', 'mpga' => 'audio/mpeg', 'mp2' => 'audio/mpeg', 'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'), 'aif' => 'audio/x-aiff', 'aiff' => 'audio/x-aiff', 'aifc' => 'audio/x-aiff', 'ram' => 'audio/x-pn-realaudio', 'rm' => 'audio/x-pn-realaudio', 'rpm' => 'audio/x-pn-realaudio-plugin', 'ra' => 'audio/x-realaudio', 'rv' => 'video/vnd.rn-realvideo', 'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'), 'bmp' => array('image/bmp', 'image/x-windows-bmp'), 'gif' => 'image/gif', 'jpeg' => array('image/jpeg', 'image/pjpeg'), 'jpg' => array('image/jpeg', 'image/pjpeg'), 'jpe' => array('image/jpeg', 'image/pjpeg'), 'png' => array('image/png', 'image/x-png'), 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'css' => 'text/css', 'html' => 'text/html', 'htm' => 'text/html', 'shtml' => 'text/html', 'txt' => 'text/plain', 'text' => 'text/plain', 'log' => array('text/plain', 'text/x-log'), 'rtx' => 'text/richtext', 'rtf' => 'text/rtf', 'xml' => 'text/xml', 'xsl' => 'text/xml', 'mpeg' => 'video/mpeg', 'mpg' => 'video/mpeg', 'mpe' => 'video/mpeg', 'qt' => 'video/quicktime', 'mov' => 'video/quicktime', 'avi' => 'video/x-msvideo', 'movie' => 'video/x-sgi-movie', 'doc' => 'application/msword', 'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'), 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), 'word' => array('application/msword', 'application/octet-stream'), 'xl' => 'application/excel', 'eml' => 'message/rfc822', 'json' => array('application/json', 'text/json'), 'hwp' => 'application/haansofthwp' ); 하단에 보시면 제가 hwp를 추가한것을 보실 수 있습니다. 이는 코드이그나이터가 해외 프레임웍이라 한글 확장자가 없었던 것으로 보입니다. 그 옆에는 mimetype인데요 파일 올릴때 print_r($_FILES)를 하면 type을 알 수 있습니다. 이에 옆에 타입도 찾아서 수정해주었습니다. 그 이후로는 정상업로드 확인됩니다. 이외에 코드이그나이터에 등록되어 있던 확장자 docx등은 잘 업로드 되는 것을 확인했습니다. 이 부분 꼭 반드시 확인부탁드립니다. 혹시 한국에서 만든 프로그램 몇개 확장자가 등록되지 않을 경우 수동으로 추가해주어야 하기 때문입니다. 감사합니다. |
감사..