PHP 업로드 파일 용량 제한하기, Warning: POST Content-Length
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 !