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 옵션은 의미가 없다.
[레퍼런스]
댓글
댓글 쓰기