Linux Server

[Linux]Ubuntu Server - PHP7 파일 업로드 설정하기

톰아저씨의 오두막 2021. 7. 7. 10:23

[Linux]Ubuntu Server - PHP7 파일 업로드 설정하기

[Linux] Ubuntu Server - Setting up PHP7 file upload

 

Ubuntu and PHP7

 

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 환경에서 파일 업로드 관련한 설정 방법을 설명드렸습니다. 《파일 업로드 관련 프로그래밍》도 향후 소개드리도록 하겠습니다.

감사합니다.