알아두기/PHP

PHP 업로드 파일 용량 제한하기, Warning: POST Content-Length

값을변경 2022. 11. 11. 16:19

php7.4.3 / mysql8 / apach24 / eclipse ide for php  / chrome 107.0..


Header(Content-Length) ... Warning이다.

 

파일 업로드를 구현하고, 파일 용량을 제한하려고 했다.

 

파일 용량에서 막혔는데, php는 php.ini이 중요한 것 같음.

 

💡 첫 번째, 용량 제한 하기

● 문제 : 무엇을 해도 alert이든 echo든 아무것도 안되고 바로 DB로 저장됨.

● 해결 :

 

html

<input type="hidden" name = "filesize" value="1048576">
<input type="file" name="realfilename">

form 안에 있는 input 태그. 

구글링 해보니 순서도 중요한 것 같더라.  용량 값을 들고 있는 input 이름을 filesize로 함.

업로드 파일을 처리하는 페이지로 보냄.

$filesize = $_POST['filesize'];
$size = $_FILES['realfilename']['size'];

POST로 받아온 filesize와 파일의 size를 직접 비교함. 

if($size > $filesize ){
    echo "<script>alert('용량 초과 입니다. 제한용량 $filesize, 넘어온 용량 $size');</script>";
    echo "<script> history.go(-1);</script>";
    exit;
}

그런 후 위와 같이 전 페이지로 강제 이동시켜서 끝내버림.

 

처음 에러 잡으려고 할 때는 DB로 들어가는 data까지 날아가고 그대로 저장되어 버렸다.

그래서 file처리 버튼을 따로 만들어서 새로운 php 파일에 던질까 했는데.. 그건 내가 싫다.

버튼 두 개 있는 건 싫어... 

예쁘지 않아...

 

💡 두 번째, Warning: POST Content-Length

● 문제 : 워닝 워닝 워닝.

이번엔 header에서 로드를 막아섰다.

에러도 아니고 워닝.. 헤더의 에러와 워닝 잡는 법이 있을까 해서 구글링을 했는데

내 짧은 지식과 급한 성격으로는 찾지 못하였다.

● 해결 : 

웬만해서는 php.ini을 건드리지 않고 핸들링하고 싶었다.

역시나 내 짧은 지식으론 있어도 있는 게 아닌 방법일 것 같아 

급한 성격으로 빠르게 포기하고 다른 선택을 했다.

 

바로, php.ini 파일을 건드리는 것이다. ㅋ

post_max_size = 200M
upload_max_filesize = 100M

성격이 시원하지 못해서 100M으로 합의 봤다.. 

 

이렇게 하면 웬만해선 header에 걸리지 않고 

나의 alert가 흰 페이지에 떠오를 것이다.  

만족.

 


오늘을 잊지 않기 위해 쓴다.

그리고 추후에 성장한 내가 이 글을 봤을 때 웃기를 바란다.

아.. 그리고 인터넷에 떠돌아 다니는 이거.

<input type="hidden" name="MAX_FILE_SIZE" value="2048576" />

이거 어떻게 작동하는지 좀 알아보기.. ㅠ

일단 phpinfo()에는 MAX_FILE_SIZE 없음.

$_FILE의 UPLOAD_ERR_FORM_SIZE과 연관성도 모르겠음.

 

어디서 봤는지 모르겠는데.. 

ini_set()도 쓰는 모양. 

※ 관련 ini_set으로 설정 가능한 옵션들 보러가기

File Uploads !