파일 업로드 클래스¶
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 인스턴스 (메소드 체이닝)
- 반환 형식:
- 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
너비와 높이를 포함하는 문자열 (이미지 태그에 넣는 데 유용)