고해상도 이미지업로드시 게시판 깨짐 막기 (꼼수) > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

고해상도 이미지업로드시 게시판 깨짐 막기 (꼼수) 정보

고해상도 이미지업로드시 게시판 깨짐 막기 (꼼수)

본문

이 팁의 목적 및 설명:
안녕하세요 먼저 팁을 설명하기에 앞서 저는 PHP기초 지식조차 모르는 사람으로써 그냥 여기저기서 소스 들을 보고 될때까지 붙이면서  만든 완전 무식한 소스입니다.ㅋ
생각보다 간단할것 같아 질문도 해봤지만 내공이 약해서 그런지 답변을 못받아 제가 그냥 꾸며봤습니다. 중간에 막혔던 부분이 있었지만 다행히 아주 친절한 분을 만나서 결국 힌트를 얻고 또한 설명을 들은후 이것을 만들게 되었습니다. (서론이 너무 길었네요..ㅋ)
암튼 이 팁은 웹호스팅 서비스를 받는 사람을 대상으로 갤러리 스킨에서 고해상도의 파일을 업로드할때 갤러리 스킨 리스트에서 썸네일을 생성하거나 혹은 파일업로드시 이미지를 자동으로 썸네일화 시켜서 업로드 용량을 줄이는 팁을 적용하였을때 아래와 같이 list.skin.php파일에서 오류가 나오며 게시판이 먹통이 됩니다.
(궁금하신분은 일반웹호스팅인경우 400만화소(4000 X 1000) 이상의 파일을 올려보세요...참고로 이것은 업로드 용량과는 관계가 없습니다. 아예없는것은 아니지만서도 ..)

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 11800 bytes) in C:\APM_Setup\htdocs\skin\board\moviefl\list.skin.php on line 38

이 에러를 해결하는 방법은 웹호스팅 서버 설정을 바꿔줘야 하지만 그 설정값이 여러 사람과 같이 사용하는 웹서버상 서버에 무리로 인해 설정변경을 잘 해주지 않습니다.
그래서 생각해낸 방법이 파일 용량 제한을 힌트로 이미지 업로드시 이미지의 가로 X 세로의 크기로 화소 값을 알아낸후 그 화소값의 설정으로(여유필드사용) 업로드시 고해상도의 화질의 업로드를 막음으로 갤러리 스킨 사용시 오류를 막는다는 것입니다.

적용 및 알아두어야할 사항

준비: 수정할 파일 : (그누보드)/bbs/write_update.php
알아두어야 할  사항 : 게시판여유필드5 번 사용 (이미 사용시 코드 수정요망)

1. 그누보드 4.22.00 버전 기준 write_update.php을 연후  대략  160 줄쯤 보시면 아래와 같은 부분이 있습니다.
 
   if (is_uploaded_file($tmp_file))
    {
        // 관리자가 아니면서 설정한 업로드 사이즈보다 크다면 건너뜀
        if (!$is_admin && $filesize > $board[bo_upload_size])
        {
            $file_upload_msg .= "\'{$filename}\' 파일의 용량(".number_format($filesize)." 바이트)이 게시판에 설정(".number_format($board[bo_upload_size])." 바이트)된 값보다 크므로 업로드 하지 않습니다.\\n";
            continue;
        }


2. 이 소스 밑에 아래 소스를 삽입합니다.

################################# 추  가 부  분 시  작 ################################
/*화소제한 게시판설정 추가 여유필드 5 사용 제안할 화소를 여유필드에 적으시면됩니다. 2008. 02.20*/

  if($bo_table == "photo" || $bo_table == "test") //설정할 게시판 입력 복수 입력시 || $bo_table == "test"  입력
  {
   $wh = getimagesize("$tmp_file");
   $size = $wh[0] * $wh[1];
   $size2 = $size * 0.0001;
   $size3 = $size2 - $board[bo_5];
   $tsize = $board[bo_5] * 10000;
   if($size > $tsize)
   {
            $file_upload_msg .= "업로드 하는 이미지의 크기를 ".number_format($board[bo_5])."만 화소 이하로 줄여주세요.*화소수는 이미지의 가로폭과 세로폭의 픽셀수를 곱한 값입니다. 업로드 하려는{$filename}는(은) ".number_format($size3, 1)."만 화소 크므로 업로드 하지 못하였습니다.\\n";
            continue;
   }
  }
################################# 추  가 부  분 끝  ####################################

3. 파일 저장후 원래 위치에 올립니다.

4. 게시판 스킨 설정 및 오류 메시지 ( 그림참고)
첫번째 그림은 해당 게시판 설정입니다.(여유필드 1~4는 무시-개인설정이며 이것과 관계가 없습니다.)
여유필드5 번의 값을 입력합니다. (오류가 나지 않을 만큼만 입력하시면됩니다.)
저같은경우는 16M 가의 공간이 주어졌는데 3000(이미지가로) X 1000(이미지세로) = 300만 화소 까지 처리가 가능하더군요그냥 참고ㅋ

두번째 그림은...여유필드에서 설정 화소의 갑보다 큰 이미지를 올릴경우..안내 메시지입니다.

5. 마지막으로 write_update.php 에 추가한 소스 편집하기입니다.
(주석처리해놨습니니다만 다시한번더 적습니다)
아래의 주석대로 갤러리 게시판을 추가해주셔야 합니다. 추가 방법은 옆에 주석으로 적놨습니다. 노란색으로 표시한 것으로 구분해서 사용할 게시판을 설정해주시면됩니다.

if($bo_table == "photo" || $bo_table == "test") //설정할 게시판 입력 복수 입력시 || $bo_table == "test"  입력



6. 아래는 이 팁의 이해가 잘 안되시는 분들 고해상도 이미지로 업로드 테스트 해보세요
   
         http://bogoshipda.com/bbs/board.php?bo_table=test


추천
2

댓글 7개

전체 7 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT