개발이야기/Web

[Apache 2.4/PHP 7.2] 파일 업로드 크기 늘이기

paperboxturtle 2018. 11. 12. 10:00

지난 번 PHP Opcache 설정 때, 같이 진행한 것이 있는데 NextCloud의 파일 업로드 제한을 푸는 것이었습니다. 보통 웹에서 설정을 변경하는 작업을 진행할 경우 코드가 꼬이거나 잘못 입력되는 문제로 인해 제대로 설정되지 않는 경우가 많습니다. 따라서 php.ini 파일을 수정해 주어야 하는데, 다음 폴더에서 진행할 수 있습니다.(Apache 2.4 기준입니다. 아마 NGINX의 경우에는 nginx 관련 폴더가 /etc/php/7.2/에 있을 수 있고, 아니면 fpm에서 수정해주시면 될 것 같습니다.)

/etc/php/7.2/apache2[각주:1]

php.ini 파일에서 수정해주어야 할 것은 다음과 같습니다.

* 코노리 님 블로그에서 일부 참조했습니다. 원본을 보시고자 하시는 분은 해당 링크로 이동하여 주시기 바랍니다. CC-BY-SA 4.0

upload_max_filesize

post_max_size

max_excution_time

max_input_time

memory_limit

이 5가지를 수정해 주어야 하는데, 여기서 upload_max_filesize는 PHP 업로드 허용 용량을 의미하고, post_max_size는 POST로 보낼 때 최대 용량을 정하는 옵션입니다. POST로 보낸다는 것은 HTTP/HTTPS를 통해 파일을 바이너리로 보낸다는 것이므로, post_max_size를 upload_max_filesize보다 작게 잡을 경우 post_max_size 이하의 크기를 가진 파일만 업로드가 가능합니다.

같은 원리로 PHP의 memory_limit 값을 작게 잡을 경우 메모리 부족 현상으로 인해 업로드가 되지 않는데, 성능 향상을 겸해서 어느 정도 올려주시는 것이 좋습니다.

max_excution_time과 max_input_time 같은 경우에는 파일 업로드의 제한 시간같은 역할을 하는데, 정확히는 max_input_time이 그러합니다. max_excution_time의 경우 PHP 명령어 실행 시간을 말하므로, max_excution_time이 max_input_time보다 작은 경우, max_excution_time에 걸려서 파일이 업로드되다가 실패하는 경우가 생길 수 있습니다. 본래는 잘못된 코드를 실행시켰을 때 무한 루프를 방지하기 위함이라는데, 이런 경우에는 잘못된 코드가 문제가 아니라 파일 업로드 자체가 제대로 되지 않으니 꼭 필요합니다.

해당 작업을 하고 나면 Apache 2를 재시작해주세요. 혹시 모르니 php7.2-fpm도 재시작해주시면 좋습니다.

  1. PHP는 7.0부터 패키지 명이 php5와 같이 가장 큰 번호만 패키지명에 붙이는 것이 아닌, 7.0, 7.1 등 마이너 버전까지 같이 패키지명에 붙이는 변화가 생겼습니다. 이에 따라 설정 파일 위치 변경이 이뤄진 듯 한데 만약 PHP 7.0이 함께 설치되어 있다면 /etc/php/7.0 폴더가 존재할 것입니다. 설정끼리의 충돌을 방지하기 위해 여러 버전을 설치하지 않고 사용하는 것을 추천드립니다. [본문으로]