파일 업로드 클래스

CodeIgniter의 파일 업로드 클래스는 파일을 업로드할 수 있게 합니다. 파일의 유형과 크기를 제한하여 다양한 기본 설정을 할 수 있습니다.

진행 절차

파일 업로드는 다음과 같은 일반적인 과정을 포함합니다:

  • 업로드 폼이 표시되어 사용자가 파일을 선택하고 업로드할 수 있습니다.

  • 폼이 제출되면 파일이 지정한 목적지에 업로드됩니다.

  • 그 과정에서 파일은 설정한 기본 설정에 따라 업로드가 허용되는지 검증됩니다.

  • 업로드가 완료되면 사용자에게 성공 메시지가 표시됩니다.

이 과정을 간단한 튜토리얼을 통해 설명합니다. 이후 참조 정보를 확인할 수 있습니다.

업로드 폼 만들기

텍스트 편집기를 사용하여 upload_form.php라는 폼을 만드세요. 다음 코드를 입력하고 application/views/ 디렉터리에 저장하세요:

<html lang="en">
<head>
<title>Upload Form</title>
</head>
<body>

<?php echo $error;?>

<?php echo form_open_multipart('upload/do_upload');?>

<input type="file" name="userfile" size="20" />

<br /><br />

<input type="submit" value="upload" />

</form>

</body>
</html>

폼 헬퍼를 사용하여 폼 열기 태그를 만들고 있습니다. 파일 업로드는 멀티파트 폼이 필요하므로 헬퍼가 적절한 구문을 생성합니다. 또한 $error 변수가 있습니다. 사용자가 무언가 잘못하는 경우 오류 메시지를 표시하기 위한 것입니다.

성공 페이지

텍스트 편집기를 사용하여 upload_success.php라는 폼을 만드세요. 다음 코드를 입력하고 application/views/ 디렉터리에 저장하세요:

<html lang="en">
<head>
<title>Upload Form</title>
</head>
<body>

<h3>Your file was successfully uploaded!</h3>

<ul>
<?php foreach ($upload_data as $item => $value):?>
<li><?php echo $item;?>: <?php echo $value;?></li>
<?php endforeach; ?>
</ul>

<p><?php echo anchor('upload', 'Upload Another File!'); ?></p>

</body>
</html>

컨트롤러

텍스트 편집기를 사용하여 Upload.php라는 컨트롤러를 만드세요. 다음 코드를 입력하고 application/controllers/ 디렉터리에 저장하세요:

<?php

class Upload extends CI_Controller {

        public function __construct()
        {
                parent::__construct();
                $this->load->helper(array('form', 'url'));
        }

        public function index()
        {
                $this->load->view('upload_form', array('error' => ' ' ));
        }

        public function do_upload()
        {
                $config['upload_path']          = './uploads/';
                $config['allowed_types']        = 'gif|jpg|png';
                $config['max_size']             = 100;
                $config['max_width']            = 1024;
                $config['max_height']           = 768;

                $this->load->library('upload', $config);

                if ( ! $this->upload->do_upload('userfile'))
                {
                        $error = array('error' => $this->upload->display_errors());

                        $this->load->view('upload_form', $error);
                }
                else
                {
                        $data = array('upload_data' => $this->upload->data());

                        $this->load->view('upload_success', $data);
                }
        }
}
?>

업로드 디렉터리

업로드된 이미지의 목적지 디렉터리가 필요합니다. CodeIgniter 설치 루트에 uploads라는 디렉터리를 만들고 파일 권한을 777로 설정하세요.

테스트!

폼을 테스트하려면 다음과 유사한 URL로 사이트를 방문하세요:

example.com/index.php/upload/

업로드 폼이 표시될 것입니다. 이미지 파일(jpg, gif, 또는 png)을 업로드해 보세요. 컨트롤러의 경로가 올바르면 작동할 것입니다.

레퍼런스 가이드

업로드 클래스 초기화

CodeIgniter의 대부분의 다른 클래스와 마찬가지로, 업로드 클래스는 $this->load->library() 메소드를 사용하여 컨트롤러에서 초기화됩니다:

$this->load->library('upload');

업로드 클래스가 로드되면 오브젝트는 $this->upload를 사용하여 접근할 수 있습니다.

기본 설정

다른 라이브러리와 마찬가지로 기본 설정에 따라 업로드 허용 여부를 제어합니다. 위에서 만든 컨트롤러에서 다음 기본 설정을 설정했습니다:

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size']     = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

$this->load->library('upload', $config);

// 또는 initialize() 메소드를 호출하여 기본 설정을 설정할 수 있습니다. 클래스를 자동 로드하는 경우 유용합니다:
$this->upload->initialize($config);

기본 설정 항목

다음 기본 설정을 사용할 수 있습니다. 기본값은 해당 기본 설정을 지정하지 않을 때 사용됩니다.

기본 설정

기본값

옵션

설명

upload_path

없음

없음

업로드를 저장할 디렉터리 경로. 디렉터리는 쓰기 가능해야 하며 경로는 절대 또는 상대 경로일 수 있습니다.

allowed_types

없음

없음

업로드 허용 파일 유형에 해당하는 MIME 유형. 일반적으로 파일 확장자를 MIME 유형으로 사용할 수 있습니다. 배열 또는 파이프로 구분된 문자열일 수 있습니다.

file_name

없음

원하는 파일 이름

설정되면 CodeIgniter가 업로드된 파일의 이름을 이 이름으로 변경합니다. 파일 이름에 제공된 확장자도 허용된 파일 유형이어야 합니다.

file_ext_tolower

FALSE

TRUE/FALSE (boolean)

TRUE로 설정하면 파일 확장자가 소문자로 강제됩니다.

overwrite

FALSE

TRUE/FALSE (boolean)

TRUE로 설정하면 업로드하는 파일과 동일한 이름의 파일이 있으면 덮어씁니다. FALSE로 설정하면 동일한 이름의 파일이 있으면 파일 이름에 숫자가 추가됩니다.

max_size

0

없음

파일의 최대 크기(킬로바이트). 제한 없음은 0으로 설정. 참고: 대부분의 PHP 설치에는 php.ini 파일에 지정된 자체 제한이 있습니다. 일반적으로 기본값은 2 MB (또는 2048 KB)입니다.

max_width

0

없음

이미지의 최대 너비(픽셀). 제한 없음은 0으로 설정.

max_height

0

없음

이미지의 최대 높이(픽셀). 제한 없음은 0으로 설정.

min_width

0

없음

이미지의 최소 너비(픽셀). 제한 없음은 0으로 설정.

min_height

0

없음

이미지의 최소 높이(픽셀). 제한 없음은 0으로 설정.

max_filename

0

없음

파일 이름의 최대 길이. 제한 없음은 0으로 설정.

max_filename_increment

100

없음

overwrite가 FALSE로 설정된 경우 CodeIgniter가 파일 이름에 추가할 최대 파일 이름 증분.

encrypt_name

FALSE

TRUE/FALSE (boolean)

TRUE로 설정하면 파일 이름이 무작위 암호화 문자열로 변환됩니다. 업로드하는 사람이 식별할 수 없는 이름으로 파일을 저장하려는 경우 유용합니다.

remove_spaces

TRUE

TRUE/FALSE (boolean)

TRUE로 설정하면 파일 이름의 공백이 밑줄로 변환됩니다. 권장합니다.

detect_mime

TRUE

TRUE/FALSE (boolean)

TRUE로 설정하면 코드 인젝션 공격을 피하기 위해 서버 측에서 파일 유형 감지가 수행됩니다. 보안 위험을 초래하므로 다른 옵션이 없는 경우가 아니면 이 옵션을 비활성화하지 마세요.

mod_mime_fix

TRUE

TRUE/FALSE (boolean)

TRUE로 설정하면 Apache mod_mime을 트리거하지 않도록 여러 파일 이름 확장자에 밑줄이 추가됩니다. 업로드 디렉터리가 공개적인 경우 보안 위험이므로 이 옵션을 끄지 마세요.

설정 파일에서 기본 설정

위 방법 대신 기본 설정을 설정 파일에 넣는 것을 선호하는 경우, upload.php라는 새 파일을 만들고 해당 파일에 $config 배열을 추가하세요. 그런 다음 config/upload.php에 파일을 저장하면 자동으로 사용됩니다. 기본 설정을 설정 파일에 저장하면 $this->upload->initialize() 메소드를 사용할 필요가 없습니다.

클래스 레퍼런스

class CI_Upload
initialize([array $config = array()[, $reset = TRUE]])
매개변수:
  • $config (array) – 기본 설정

  • $reset (bool) – 기본 설정(config에 제공되지 않은)을 기본값으로 재설정할지 여부

반환:

CI_Upload 인스턴스 (메소드 체이닝)

반환 형식:

CI_Upload

do_upload([$field = 'userfile'])
매개변수:
  • $field (string) – 폼 필드 이름

반환:

성공 시 TRUE, 실패 시 FALSE

반환 형식:

bool

설정한 기본 설정에 따라 업로드를 수행합니다.

참고

기본적으로 업로드 루틴은 userfile이라는 폼 필드에서 파일이 오고 폼이 “multipart” 유형이어야 합니다.

<form method="post" action="some_action" enctype="multipart/form-data" />

자체 필드 이름을 설정하려면 해당 값을 do_upload() 메소드에 전달하세요:

$field_name = "some_field_name";
$this->upload->do_upload($field_name);
display_errors([$open = '<p>'[, $close = '</p>']])
매개변수:
  • $open (string) – 여는 마크업

  • $close (string) – 닫는 마크업

반환:

형식화된 오류 메시지

반환 형식:

string

do_upload() 메소드가 false를 반환하는 경우 오류 메시지를 검색합니다. 이 메소드는 자동으로 echo하지 않고 데이터를 반환합니다.

오류 형식 지정

기본적으로 위 메소드는 오류를 <p> 태그로 감쌉니다. 다음과 같이 자체 구분자를 설정할 수 있습니다:

$this->upload->display_errors('<p>', '</p>');
data([$index = NULL])
매개변수:
  • $data (string) – 전체 배열 대신 반환할 요소

반환:

업로드된 파일에 대한 정보

반환 형식:

mixed

업로드한 파일과 관련된 모든 데이터를 포함하는 배열을 반환하는 헬퍼 메소드입니다. 배열 프로토타입:

Array
(
        [file_name]     => mypic.jpg
        [file_type]     => image/jpeg
        [file_path]     => /path/to/your/upload/
        [full_path]     => /path/to/your/upload/jpg.jpg
        [raw_name]      => mypic
        [orig_name]     => mypic.jpg
        [client_name]   => mypic.jpg
        [file_ext]      => .jpg
        [file_size]     => 22.2
        [is_image]      => 1
        [image_width]   => 800
        [image_height]  => 600
        [image_type]    => jpeg
        [image_size_str] => width="800" height="200"
)

배열에서 하나의 요소를 반환하려면:

$this->upload->data('file_name');       // 반환: mypic.jpg

위에 표시된 배열 항목 설명:

항목

설명

file_name

파일 이름 확장자를 포함한 업로드된 파일 이름

file_type

파일 MIME 유형 식별자

file_path

파일의 절대 서버 경로

full_path

파일 이름을 포함한 절대 서버 경로

raw_name

확장자 없는 파일 이름

orig_name

원본 파일 이름. 암호화된 이름 옵션을 사용하는 경우에만 유용합니다.

client_name

클라이언트 사용자 에이전트가 제공한 파일 이름 (위생 처리될 수 있음)

file_ext

마침표를 포함한 파일 이름 확장자

file_size

킬로바이트 단위의 파일 크기

is_image

파일이 이미지인지 여부. 1 = 이미지, 0 = 이미지 아님

image_width

이미지 너비

image_height

이미지 높이

image_type

이미지 유형 (일반적으로 마침표 없는 파일 이름 확장자)

image_size_str

너비와 높이를 포함하는 문자열 (이미지 태그에 넣는 데 유용)