PHP 파일 멀티업로드 (with 대용량 업로드)

PHP File Multiple Upload

@TODO를 명시한 부분은 알맞게 수정해야 함

1. HTML

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<body>
<form action="@TODO upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="upload[]" id="upload" multiple>
        <input type="submit" value="Upload FILE" name="submit">
</form>
</body>
</html>
cs


2. PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$target_dir = '@TODO ./upload';
 
if(isset($_FILES['upload']['name'])) {
    $cnt = count($_FILES['upload']['name']);
 
    for($iter = 0$iter < $cnt$iter++) {
        if(isset($_FILES['upload']['name'][$iter]) && $_FILES['upload']['size'][$iter> 0) {
            $filename = $_FILES['upload']['name'][$iter];
            $target = $target_dir . $filename;
            $f = $_FILES['upload']['tmp_name'][$iter];
            move_uploaded_file($f$target);
        }
    }
}
?>
cs


3. 주의사항

웹서버 세팅상 PHP 파일 업로드가 허용되어 있어야 한다.

(예시는 모두 Redhat 계열 Linux 기준, PHP 5.4 기준)
/etc/php.ini 설정 중에서 다음 값들을 알맞게 수정해야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Script 최대 실행 시간, 단위 : 초
max_execution_time = 30
 
// Script 최대 입력 시간(GET, POST 요청등에 대한), 단위 : 초
max_input_time = 60
 
// POST 요청의 최대 크기, 단위 : 크기
post_max_size = 8M
 
// FILE 업로드 허용
file_uploads = On
 
// 파일의 최대 크기, 단위 : 크기
upload_max_filesize = 2M
 
// 단일 요청에 최대 몇 개의 파일을 업로드 할 수 있는지, 단위 : 개
max_file_uploads = 20
cs


[PHP 옵션의 크기 기재법]
1K -> one Kilobyte, 1,024 bytes (1,024^1 bytes)
1M -> one Megabyte, 1,048,576 bytes (1,024^2 bytes)
1G -> one Gigabytes, 1,073,741,824 bytes (1,024^3 bytes)


* 만일 대용량 파일 업로드를 원하는 경우, POST 요청의 크기와 최대 실행/입력 시간, 파일의 최대 크기 등의 변수값을 크게 늘려야 한다.
* 설정을 변경했으면 데몬 재실행을 하자

* (그럴일이 거의 없을 듯 하나) 만일 파일 업로드 요청을 GET으로 하는 경우, post_max_size 옵션은 의미가 없다.


[레퍼런스]

댓글