파일 업로드 File Uploading Class
CodeIgniter의 파일 업로딩 클래스는 파일을 업로드 할 수 있도록 해줍니다.다양한 설정옵션이 있으며 , 파일타입이나 크기등을 제한할 수 있습니다.
절차 The Process
파일을 업로드하는 과정은 다음의 일반적차를 따릅니다:
- 업로드 폼이 표시되고 사용자는 업로드할 파일을 선택합니다.
- 폼이 전송(submit)되면 ,파일은 여러분이 정의한 위치에 업로드 됩니다.
- 이때, 여러분이 선택한 옵션에 따라 파일이 업로드 허용된 된것인지 여부를 검사(validate)합니다.
- 일단 업로드 되면 사용자에게 성공적으로 업로드 되었다는 메세지를 보여줍니다.
이 과정을 보여주기 위하여 간단한 튜토리얼을 보여드립니다. 그리고 그 아래 참조가이드를 제공합니다.
업로드 폼 생성 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 | 이미지의 너비와 높이를 포함하는 문자열입니다. 이미지 태그에 삽입할때 유용합니다. |