CodeIgniter User Guide Version 1.7.2


파일 업로드 File Uploading Class

CodeIgniter의 파일 업로딩 클래스는 파일을 업로드 할 수 있도록 해줍니다.다양한 설정옵션이 있으며 , 파일타입이나 크기등을 제한할 수 있습니다.

절차 The Process

파일을 업로드하는 과정은 다음의 일반적차를 따릅니다:

이 과정을 보여주기 위하여 간단한 튜토리얼을 보여드립니다. 그리고 그 아래 참조가이드를 제공합니다.

업로드 폼 생성 Creating the Upload Form

텍스트에디터를 사용하여 upload_form.php이라는 폼을 파일을 생성합니다. 그리고 아래 코드를 삽입한후 applications/views/ 폴더 아래 저장합니다:

위코드를 보시면 form 헬퍼를 사용하여 여는 form 태그대신 사용한것을 알수 있습니다. 파일업로드는 multipart form을 필요로 하므로 헬퍼는 적당한 태그를 자동으로 작성해줍니다. 그리고 $error 변수가 있다는것을 알수 있으실 것입니다. 이 변수는 사용자의 실수에 대해서 에러메세지를 보여줍니다.

성공 페이지 The Success Page

텍스트 에디터를 이용하여 upload_success.php파일을 작성합니다. 그리고 그 안에 아래 코드를 삽입한후 applications/views/ 폴더 아래 저장합니다:

컨트롤러 The Controller

텍스트 에디터를 이용하여 upload.php라는 이름의 컨트롤러 파일을 작성한후 아래의 코드를 삽입하고 applications/controllers/ 폴더 아래 저장합니다.:

업로드 폴더 The Upload Folder

업로드 한 이미지를 저장할 대상폴더가 필요합니다.CodeIgniter 가 설치된 루트폴더에 uploads 라는폴더를 생성하고 권한을 777로 합니다.

시험해보세요! Try it!

작성한 폼을 테스트하기위해 아래와 유사한 경로로 접근합니다:

example.com/index.php/upload/

업로드 폼을 보실수 있으실겁니다. 이미지 파일( jpg, gif, png 등)업로드를 시도해보세요 .컨트롤러의 경로가 올바르다면 제대로 작동하는것을 확인하실 수 있습니다.

 

참조 가이드 Reference Guide

업로드 클래스 초기화 Initializing the Upload Class

CodeIgniter의 다른 클래스들과 마찬가지로 ,컨트롤러에서 $this->load->library 함수를 이용하여 초기화 합니다:

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

업로드 클래스가 로드되면 , $this->upload 과 같이 업로드 객체를 사용하실 수 있습니다.

설정하기 Setting Preferences

다른 라이브러리들과 마찬가지로 , 어떤 파일이 업로드 허용될지 설정할 수 있습니다.위에서 만든 컨트롤러에서 아래의 설정을 추가해보세요 :

$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);

// Alternately you can set preferences by calling the initialize function. Useful if you auto-load the class:
$this->upload->initialize($config);

위 설정은 대부분 무엇을 뜻하는지 직관적으로 알수 있으실겁니다. 아래 테이블은 가능한 설정들을 보여줍니다.

설정들 Preferences

아래의 설정들이 사용가능합니다.설정을 명시하지않을경우 사용될 기본값들도 확인하세요 .

설정 기본값 옵션 설명
upload_path None None 업로드 파일이 위치할 폴더경로 .폴더는 쓰기 가능해야하며 경로는 절대경로 혹은 상대경로를 사용합니다.
allowed_types None None 업로드를 허용할 파일의 마임타입(mime types)을 설정합니다. 보통 파일 확장자는 마임타입으로 사용될수 있습니다. 멀티플타입은 파이프를 이용하여 구분합니다.
overwrite FALSE TRUE/FALSE (boolean) true 로 설정된 상태에서, 같은 이름의 파일이 이미 존재한다면 덮어쓸것입니다. false 로 설정되어있으면, 파일명에 숫자가 추가로 붙게됩니다.
file_name None Desired file name

만약 값이 있다면, CodeIgniter은 업로드된 파일이름을 이 이름으로 변경합니다.

Note:파일 이름은 확장자를 포함해서는 안됩니다.

max_size 0 None 업로드 파일의 최대크기(KB)를 지정합니다. 0으로 설정하면 크기 제한이 없게됩니다.대부분의 PHP는 php.ini 파일에 업로드 파일 크기 설정이 이미 되어있습니다.일반적으로 2 MB ( 2048 KB)가 기본입니다.
max_width 0 None 업로드 파일의 최대 너비(픽셀단위) 를 설정합니다. 0 이면 제한이 없습니다.
max_height 0 None 업로드 파일의 최대 높이(픽셀단위)를 설정합니다. 0이면 제한이 없습니다.
max_filename 0 None 파일이름의 최대길이를 지정합니다.0이면 제한이 없습니다..
encrypt_name FALSE TRUE/FALSE (boolean) TRUE로 설정하면 파일이름은 랜덤하게 암호화된 문자열로 변합니다. 파일을 업로드한 사람이 파일명을 알수 없도록할때 유용합니다.
remove_spaces TRUE TRUE/FALSE (boolean) TRUE로 설정하면 파일명에 공백이 있을경우 밑줄(_)로 변경됩니다.이 옵션은 사용을 권장합니다.

설정파일에서 설정하기 Setting preferences in a config file

위 설정들을 컨트롤러대신 설정파일에서 할수도 있습니다. 먼저 upload.php파일을 생성한후 $config 배열을 그 안에 만듧니다. 그런다음 그 파일을 config/upload.php 로 저장하면 자동으로 설정이 적용될것입니다. 그려면 $this->upload->initialize 함수를 사용할 필요가 없습니다.

함수들 Function Reference

아래 함수들이 사용가능합니다.

$this->upload->do_upload()

여러분의 설정에 따라 업로드를 수행합니다.참고: 기본설정은 파일이 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)

$this->upload->display_errors()

do_upload() 함수가 실패했을때 에러메시지를 추출해줍니다. 이 함수는 자동으로 echo 까지 수행해주지는 않습니다. 단지 데이터만 전달해줄뿐이므로 그 후처리는 여러분이 원하는대로 할 수 있습니다..

에러메세지 포멧설정 Formatting Errors

기본으로 위함수는 에러를 <p> 태그들로 감쌉니다. 여러분은 아래와같은 방법으로 다른 구분자를 설정할 수 있습니다.:

$this->upload->display_errors('<p>', '</p>');

$this->upload->data()

업로드한 파일에 관련된 모든 데이터를 배열의 형태로 리턴해주는 헬퍼 함수 입니다.다음 프로토타입을 참조하세요 :

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
    [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"
)

설명 Explanation

위 배열 아이템에대한 설명입니다..

아이템 설명
file_name 업로드한 파일이름입니다. 확장자까지 포함합니다.
file_type 파일의 마임타입(Mime type)입니다.
file_path 파일의 서버상 절대경로입니다.
full_path 파일이름까지 포함한 서버상의 절대경로입니다.
raw_name 확장자 없는 파일명입니다.
orig_name 원래파일 이름입니다. 파일이름을 암호화 하는 옵션을 사용한경우에만 유용합니다.
file_ext 점을 포함한 파일 확장자입니다.
file_size 킬로바이트(KB)로 표시된 파일 크기입니다.
is_image 파일이 이미지인지 아닌지를 나타냅니다. 1 = 이미지. 0 = 이미지아님.
image_width 이미지 너비.
image_heigth 이미지 높이.
image_type 이미지 타입. 일반적으로 점이 없는 파일 확장자 입니다.
image_size_str 이미지의 너비와 높이를 포함하는 문자열입니다. 이미지 태그에 삽입할때 유용합니다.