[Linux]Ubuntu Server - PHP7 파일 업로드 설정하기
[Linux]Ubuntu Server - PHP7 파일 업로드 설정하기
[Linux] Ubuntu Server - Setting up PHP7 file upload
Server Version : Ubuntu 18.04, Ubuntu 20.04
php Version 7.2
Apache/2.4.29 (Ubuntu)
작업 환경
웹 프로그램 개발시 《PHP, Personal Home Page Tools/Hypertext Preprocessor》를 이용하여 이미지, 동영상 등의 파일을 업로드 할 경우 서버 측의 용량 제한 설정으로 인해 사이즈가 큰 파일 업로드가 되지 않는 경우가 있습니다.
뿐만 아니라 따라서 서버 시스템의 규모와 사용자 수, 사용자 편의성을 고려하여 ①PHP에서 사용할 메모리 용량, ②동시에 업로드 가능 파일 수, ③업로드시 최대 실행 시간, ④업로드 파일 크기 등의 부수적인 설정을 필요로 합니다.
파일 업로드시 영향을 주는 것은 《PHP》와 《Apache Server》입니다. 따라서 php설정 파일 중 《php.ini》에서 설정을 변경해 주어야 합니다.
'php.ini'의 위치
초기에 서버를 설치할 때 설정 방법이나 버전의 차이 등으로 인해 《php.ini》의 위치는 달라질 수 있습니다. 《php.ini》의 위치를 확인하기 위하여 CLI 모드에서 다음 명령을 입력하여 'php.ini' 위치를 확인 할 수 있습니다.
해당 서버의 경우 'php.ini' 경로는 '/etc/php/7.4/cli' 입니다.
1
2
3
4
|
root@uncletom-vm:~# php --ini|grep php.ini
Configuration File (php.ini) Path: /etc/php/7.4/cli
Loaded Configuration File: /etc/php/7.4/cli/php.ini
root@uncletom-vm:~#
|
'php.ini' 설정
ⓐ 먼저 《gedit》나 《vi》를 이용하여 《php.ini》를 엽니다.
1
|
root@uncletom-vm:~# gedit /etc/php/7.4/cli/php.ini
|
ⓑ 《php.ini》 편집 창에서 'Ctrl + F'를 눌러 'file uploads' 를 검색합니다.
ⓒ 파일 업로드와 관련한 부분을 다음 《표》와 같이 수정할 수 있습니다. 설정 항목들이 여러 곳에 걸쳐서 분산되어 있으므로 'Ctrl + F' 검색을 이용하여 항목을 찾아서 변경하면 편리합니다.
참고로 《gedit》가 아니고 터미널 환경에서 《vi 에디터》를 사용하는 경우에는 《Command Mode》에서 '/'를 입력한 다음 '/file_uploads' 와 같이 입력하면 항목 검색이 가능합니다.
설정 항목 | 내용 | 사용 예 |
file_uploads | 파일 업로드 사용 여부 | file_uploads = On |
upload_max_filesize | 업로드 용량 제한(Default: 2M, Max: 2G) | upload_max_filesize = 512M |
post_max_size | PHP 내 Post 데이터 용량 제한(Default: 8M, Max: 2G) | post_max_size = 512M |
max_execution_time | 스크립트 당 PHP 실행시간 제한(0:제한없슴, Default: 30sec) | max_execution_time = 900 |
max_input_time | 스크립트 당 업로드 제한 설정(Default: 60sec, 무제한:-1) | max_input_time = 60 |
memory_limit | PHP 메모리 사용 제한 | memory_limit = 128M |
'php.ini' - PHP 업로드 관련 설정 항목
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
; being interrupted by the user or a browser timing out. PHP`s default behavior
; is to disable this feature.
; http://php.net/ignore-user-abort
;ignore_user_abort = On
-------------------------< 생략 >---------------------------
;;;;;;;;;;;;;;;;;;;
; Resource Limits ;
;;;;;;;;;;;;;;;;;;;
; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 30
; Maximum amount of time each script may spend parsing request data. It`s a good
; idea to limit this time on productions servers in order to eliminate unexpectedly
; long running scripts.
; Note: This directive is hardcoded to -1 for the CLI SAPI
; Default Value: -1 (Unlimited)
; Development Value: 60 (60 seconds)
; Production Value: 60 (60 seconds)
; http://php.net/max-input-time
max_input_time = 60
; Maximum input variable nesting level
; http://php.net/max-input-nesting-level
;max_input_nesting_level = 64
; How many GET/POST/COOKIE input variables may be accepted
; max_input_vars = 1000
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 128M
-------------------------< 생략 >---------------------------
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On
; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
; http://php.net/upload-tmp-dir
;upload_tmp_dir =
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
; Maximum number of files that can be uploaded via a single request
max_file_uploads = 20
-------------------------< 생략 >---------------------------
|
ⓓ 변경된 내용을 저장 한 후 《gedit, 텍스트 편집기》를 닫습니다.
《CLI 터미널》의 《vi 에디터》를 이용하여 수정한 경우에는 ':wq'로 저장하면 됩니다.
ⓔ 이제 설정이 끝났으면 아파치 서버를 재시작합니다.
1
2
3
|
root@uncletom:/# sudo service apache2 restart
sudo: unable to resolve host uncletom
root@uncletom:/#
|
이상으로 우분투 서버에서 PHP7 환경에서 파일 업로드 관련한 설정 방법을 설명드렸습니다. 《파일 업로드 관련 프로그래밍》도 향후 소개드리도록 하겠습니다.
감사합니다.