개발 기록/Tools & 기타

[PHP] 대용량 파일 업로드

JasonM 2023. 5. 21. 21:47
반응형

레드햇 9.0과 PHP 4.2 버전을 설치하였고 파일 업로드 코드도 정상적으로 코딩하였지만 500k 이상의 파일에서 업로드가 되지 않는 현상이 일어났습니다. 500k 이하의 파일은 정상적으로 올라가나 그 이상크기의 파일은 반응이 없거나 페이지를 찾을 수 없는 에러가 났습니다.

우선 php.ini의 파일 업로드 용량 설정 문제인 것으로 생각하고 php.ini 파일에서 파일업로드 용량을 20메가로 늘려 주었습니다. 참고로 php.ini 파일에서 파일 업로드와 관련된 설정은 아래 5 군데를 변경해야 합니다.

 

php.ini - 파일 업로드 설정

file_uploads = On
파일 업로드를 허용할지 설정하는 부분으로 당연히 ON으로 되어 있어야 합니다.

upload_max_filesize = 20M
최대 업로드 파일 사이즈입니다. 원하시는 용량만큼 설정하시면 됩니다.

post_max_size = 20M
Post방식으로 넘겨질 최대 데이터 사이즈입니다.

max_execution_time = 300
최대 실행시간입니다. 대용량 파일일수록 시간이 많이 걸리니 당연 실행시간을 늘려 주어야 합니다. 0으로 세팅하면 무한대이니 알아서 적당히 세팅해 주십시오

memory_limit = 20M
잘 모르겠는데 여하튼 이 부분도 같이 세팅되어야 합니다.

upload_max_filesize, post_max_size, memory_limit는 보통 같은 값으로 세팅을 하는데요.

 

PHP매뉴얼에서 크기를 memory_limit > post_max_size > upload_man_filesize 로 해야 한다고 보았던 것 같습니다.
즉 Memory_limit설정값이 post_max_size보다 커야 하고 post_max_size는 upload_man_filesize보다 커야 한다고 했지만 같은 값으로 설정해도 문제는 없는 듯합니다.



이렇게 설정하셨으면 아파치를 재시동합니다.

/etc/rc.d/init.d/httpd restart

재시동 후 PHP설정이 제대로 적용되었는지 phpinfo()로 확인해 봅니다. 위 설정값들이 적용된 것을 확인할 수 있습니다.

 


그리고 파일업로드를 다시 테스트 해 보았지만 정상적으로 파일이 올라가지 않습니다.  

파일업로드 중 에러가 발생한 것이니 로그를 아파치의 에러로그를 살펴봐야겠습니다.

vi /var/log/httpd/error_log

에러로그에서 다음과 같은 문장을 볼 수 있었니다.

[Thu Aug 12 17:56:31 2004] [error] [client xxx.xxx.xxx.xxx] Requested content-length of 818331 is larger than the configured limit of 524288, referer: http://xxx.xxx.xxx.xxx/upload.htm

대충 읽어보면 업로드하려는 파일이 818331바이트인데 524288 값으로 제한되어 있는 설정값보다 더 크다는 내용


도대체 어느 어디에서 php.ini와 상관없이 파일업로드를 방해하는 것인지 찾아보았더니..

/etc/httpd/conf.d/php.conf

이 파일을 열어보면 LimitRequestBody라는 설정값이 있습니다. LimitRequestBody의 초기값이 524288 이군요.. 이 값을 대략 20메가 20000000 정도로 해보고 아파치 재시작..

그리고 파일을 업로드해 보면 정상적으로 올라가는군요....
이상이 제가 해결한 방법이었습니다.


혹시 파일업로드 하시면서 도저히 일정용량 안 된다 하시는 분 저처럼 해 보시고요.

[참고] 시스템 설치 방법에 따라 위에서 설정한 php.conf 파일이 없는 경우도 있습니다. 제가 노트북에 설치한 리눅스 시스템엔 php.conf 파일을 찾을 수 없었습니다. 그런데 이 넘은 파일 업로드가 문제가 없어서 그냥 잘 쓰고 있습니다.

반응형