Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- i18n
- centos
- replace
- jQuery
- 확장자
- install
- RabbitMQ
- php
- 한글 깨짐
- 일괄변경
- 문자열자르기
- Oracle
- yum
- random
- 천단위
- TPL
- MySQL
- Postfix
- mariadb
- Python
- Eclipse
- Selectbox
- TextBox
- SVN
- smarty
- 부모창
- ubuntu
- docker
- JavaScript
Archives
- Today
- Total
wilson's story
[펌]PHP 파일업로드 용량 변경 php.ini설정 본문
반응형
안녕하세요.
많은 분들이 PHP로 파일업로드를 처리하면서 일정용량이나 대용량 파일의 업로드에 문제가 있는것 같습니다.
저도 같은 문제로 고민하던 중 외부의 도움을 얻어 해결했기에 조금이나마 도움이 되고자 적어 봅니다.
우선 저의 경우
정상적으로 레드헷 9.0과 PHP 4.2 버전을 설치하였고 파일 업로드 코드도 정상적으로 코딩하였습니다.
그런데 500k 이상의 파일에서 업로드가 되지 않는 현상이 일어났습니다.
500k이하의 파일은 정상적으로 올라가나 그 이상크기의 파일은 반응이 없거나 페이지를 찾을 수 없는 에러가 나거나 하였습니다.
누구나 그렇듯이 저도 php.ini의 파일 업로드 용량 설정 문제인것으로 생각하고 php.ini 파일에서 파일업로드 용량을 20메가로 늘려 주었습니다.
참고로 php.ini파일에서 용량과 관련하여 설정해 주어야 하는 부분은 5부분입니다.
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/form.htm
음 짧은 영어실력이지만 대충 읽어보면 다음과 같죠
8월 12일날 에러가 났는데 누구냐면 xxx.xxx.xxx.xxx야... 에러가 뭐라고 왔냐면 올리는 파일이 818331바이트인데 이게 524288 값으로 제한되어 있는 설정값보다 더 크다는 거지..
헉~~!
구럼 도대체 어느넘이 php.ini와 상관없이 파일업로드를 방해하는 것인지가...?
찾아보았더니..
/etc/httpd/conf.d/php.conf
이넘을 열어보면
LimitRequestBody
라는 설정값이 있습니다.이넘의 초기값이 524288 이군여.. 이넘의 값을 대략 20메가 20000000 정도로 해보져....
당근 아파치 재시작...
그리고 파일을 업로드 해보면... ㅋ~~ 감동 .. 정상적으로 올라가는군여....
ㅋㅋㅋ
이상이 제가 해결한 방법이었습니다.
혹시 파일업로드 하시면서 도저히 일정용량 않된다 하시는분 저처럼 해 보시구여...
혹시라도 제 내용이 있으신 분들도 리플 달아주시면 아는한 최대로 수정하겠습니다.
참고 : 시스템 설치 방법에 따라 위에서 설정한 php.conf 파일이 없는 경우도 있습니다.
제가 노트북에 설치한 리눅스 시스템엔 php.conf 파일을 찾을 수 없었습니다.
그런데 이넘은 파일업로드가 문제가 없어서 걍 잘 쓰고 있습니다.
s LimitRequestBody 는 아파치 관련 설정이며
http://httpd.apache.org/docs/mod/core.html#limitrequestbody
여기에 자세한 설명이 있습니다. 08/17 14:28:50
이국선 제 기억으론 아파치 2.0 부터 설정파일이 conf.d 쪽으로 나뉘어지면서 php.conf가 생겼던것 같습니다. conf.d 에는 ssl.conf 등도 있고 그렇죠 아마? 08/19 10:19:54
이국선 그리고 php.ini에서 세팅값의 크기는
upload_max < post_max < memory_max 로 하라고 하는것 같습니다.
http://www.php.net/manual/kr/configuration.directives.php 에서 그 내용을 찾으실 수 있습니다.
많은 분들이 PHP로 파일업로드를 처리하면서 일정용량이나 대용량 파일의 업로드에 문제가 있는것 같습니다.
저도 같은 문제로 고민하던 중 외부의 도움을 얻어 해결했기에 조금이나마 도움이 되고자 적어 봅니다.
우선 저의 경우
정상적으로 레드헷 9.0과 PHP 4.2 버전을 설치하였고 파일 업로드 코드도 정상적으로 코딩하였습니다.
그런데 500k 이상의 파일에서 업로드가 되지 않는 현상이 일어났습니다.
500k이하의 파일은 정상적으로 올라가나 그 이상크기의 파일은 반응이 없거나 페이지를 찾을 수 없는 에러가 나거나 하였습니다.
누구나 그렇듯이 저도 php.ini의 파일 업로드 용량 설정 문제인것으로 생각하고 php.ini 파일에서 파일업로드 용량을 20메가로 늘려 주었습니다.
참고로 php.ini파일에서 용량과 관련하여 설정해 주어야 하는 부분은 5부분입니다.
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/form.htm
음 짧은 영어실력이지만 대충 읽어보면 다음과 같죠
8월 12일날 에러가 났는데 누구냐면 xxx.xxx.xxx.xxx야... 에러가 뭐라고 왔냐면 올리는 파일이 818331바이트인데 이게 524288 값으로 제한되어 있는 설정값보다 더 크다는 거지..
헉~~!
구럼 도대체 어느넘이 php.ini와 상관없이 파일업로드를 방해하는 것인지가...?
찾아보았더니..
/etc/httpd/conf.d/php.conf
이넘을 열어보면
LimitRequestBody
라는 설정값이 있습니다.이넘의 초기값이 524288 이군여.. 이넘의 값을 대략 20메가 20000000 정도로 해보져....
당근 아파치 재시작...
그리고 파일을 업로드 해보면... ㅋ~~ 감동 .. 정상적으로 올라가는군여....
ㅋㅋㅋ
이상이 제가 해결한 방법이었습니다.
혹시 파일업로드 하시면서 도저히 일정용량 않된다 하시는분 저처럼 해 보시구여...
혹시라도 제 내용이 있으신 분들도 리플 달아주시면 아는한 최대로 수정하겠습니다.
참고 : 시스템 설치 방법에 따라 위에서 설정한 php.conf 파일이 없는 경우도 있습니다.
제가 노트북에 설치한 리눅스 시스템엔 php.conf 파일을 찾을 수 없었습니다.
그런데 이넘은 파일업로드가 문제가 없어서 걍 잘 쓰고 있습니다.
s LimitRequestBody 는 아파치 관련 설정이며
http://httpd.apache.org/docs/mod/core.html#limitrequestbody
여기에 자세한 설명이 있습니다. 08/17 14:28:50
이국선 제 기억으론 아파치 2.0 부터 설정파일이 conf.d 쪽으로 나뉘어지면서 php.conf가 생겼던것 같습니다. conf.d 에는 ssl.conf 등도 있고 그렇죠 아마? 08/19 10:19:54
이국선 그리고 php.ini에서 세팅값의 크기는
upload_max < post_max < memory_max 로 하라고 하는것 같습니다.
http://www.php.net/manual/kr/configuration.directives.php 에서 그 내용을 찾으실 수 있습니다.
반응형