TIP게시판

제목 파일업로드시 타입 에러
글쓴이 변종원(웅파) 작성시각 2010/05/13 15:39:52
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 14493   RSS
 Upload 라이브러리 이용하여 업로드시 분명히 맞는 파일타입임에도 업로드가 되지 않을때가 있습니다.

$allow_type = array('jpg', 'zip'); //이렇게 이미지가 먼저 나올 경우 에러가 납니다.

원래 core를 건드리지 않는다가 철칙이지만 버그인 경우는 어쩔 수 없이 손을 댑니다.

system/libraries/Upload.php 파일의 다음함수를 바꿔주시면 됩니다.

/**
	 * Verify that the filetype is allowed
	 *
	 * @access	public
	 * @return	bool
	 */
	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;
        }

        //kofic - hacking - start
        $ext_found = 0;
        $ext = $this->file_ext;
        $ext = str_replace(".","",$ext);
        //kofic - hacking - end


        $image_types = array('gif', 'jpg', 'jpeg', 'png', 'jpe');

        foreach ($this->allowed_types as $val)
        {
            //kofic - hacking - start
            if ( strtolower($val) == strtolower($ext) ){$ext_found = 1;}
            //kofic - hacking - end

            $mime = $this->mimes_types(strtolower($val));

            //kofic - hacking - start
            // Images get some additional checks
            //kofic - commenting original code - start
            //if (in_array($val, $image_types))
            //kofic - commenting original code - end
            if (in_array($ext, $image_types))
            //kofic - hacking - end
            {
                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;
                }
            }
        }

        //kofic - hacking - start
        if ( $ext_found ){ return TRUE; }
        //kofic - hacking - end

        return FALSE;
    }
 
 다음글 codeigniter Asset helper (4)
 이전글 다중 데이터베이스 접속 및 모델, 프로파일러 확장 (2)

댓글

배강민 / 2010/05/13 16:01:13 / 추천 0

아.. 그렇군요.. 아직 파일 업로드까진 안해봐서리... 캄사합니다...2.0에서는 해결될라낭...

kirrie / 2010/05/13 16:10:03 / 추천 0
ㅎㅎㅎ 저도 며칠전에 이거 발견하고 수정했는데. ㅋㅋ
이 업로드 클래스가 웃긴게 이미지가 아니어도 굳이 이미지 파일인지 아닌지 검사하려고 그러던 거였더라구요.

케이든 / 2010/05/13 16:12:31 / 추천 0
좋스빈다!!

코어를 안건드리고

확장해서 메쏘드를 오버라이딩 하면 되지 않을까요?
kirrie / 2010/05/13 16:18:58 / 추천 0
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_Upload extends CI_Upload {

	function MY_Upload($props = array())
	{
		parent::CI_Upload($props);
	}
	
	/**
	 * Verify that the filetype is allowed
	 *
	 * @access	public
	 * @return	bool
	 */	
	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) && $this->is_image() === TRUE)
			{
				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;
	}
	
	// --------------------------------------------------------------------
}
/* End of file */
전 이렇게 수정해서 확장했습니다.
변종원(웅파) / 2010/05/13 16:29:00 / 추천 0
키리에/ 땡유. ^^