Q&A

502 bad gateway 처리방법이 어떻게 될까요

2016.05.18 07:22
1,642
0

어떤 분의 부탁을 받아서 애드온을 하나 작성했습니다. 

 

글 작성 시 미리 지정한 예외 그룹을 제외하고 특정 태그 사용을 금지하는 비교적 간단한 애드온입니다

 

다른 여러 환경에서는 다 문제없이 작동하는데 그분의 사이트에서만 502 bad gateway 에러가 떠버리네요..

 

php에러로그에도 안잡히고.. 원인을 모르겠습니다ㅜ.

 

그분은 카페24 웹호스팅을 사용하시고 특이점은 php7버전이 설치되어 있습니다

 

혹시 제가 작성한 코드에 php 호환이 문제가 되는 코드가 있나했는데.. 열심히 찾아본 결과 그 문제는 아닌 것 같습니다.

 

호스팅사에 문의하는 방법밖에 없을까요?

댓글 10

  • 2016.05.18 07:30 #284271
    입주한서버에서 지금 원하는 자료가 있는곳 연결이 안되는거 아닐까요?
  • 2016.05.18 07:42 #284321
    흠.. 클플하고 혹시 관련이 있을까요?
  • 2016.05.18 07:44 #284325
    관련이 매우 있을 수 있죠....
  • 2016.05.18 07:58 #284362

    일부 서버 환경에서 PHP 에러가 발생하면 에러메시지를 표시하지 않고 그냥 502를 뿜어버리는 경우가 있습니다.

     

    태그 사용을 금지하는 애드온이라면 정규표현식이 동원될 것 같은데, 혹시 PHP 7에서 지원하지 않는 ereg, eregi 부류의 함수를 사용하셨나요? 태그를 추출하는 데 외부 라이브러리를 사용하셨다면 그 라이브러리도 확인해 봐야 합니다.

  • 2016.05.18 08:07 #284390

     

        $tags = explode(',',$addon_info->ban_tags);
        for($i=0, $c=count($tags); $i<$c; $i++) {
          $tags[$i] = trim($tags[$i]);

          if(strlen($tags[$i])>0) $ban_tags[] = $tags[$i];
        }

        if(count($ban_tags)>0) {
          $pattern = '@<(' .implode("|",$ban_tags). ')[^>]*>.*?<\/(' .implode("|",$ban_tags). ')>@i';
         $content = Context::get('content');

          preg_match_all($pattern, $content, $matches);
          if(!count($matches[0])) return;
          $errMsg = sprintf('[%s] 태그를 사용하실 수 없습니다.', $addon_info->ban_tags);

          $output = new object(-1, $errMsg);
          $oDisplayHandler = new DisplayHandler();
          $oDisplayHandler->printContent($output);
          exit;
        }

     

    그렇군요.. 코드의 일부분입니다. 혹시 문제될만한 부분이 있을까요?

  • 2016.05.18 09:07 #284423

    하나하나 다 뺴면서 테스트해봤는데 exit; 이것만 들어가면 502에러가 나네요.. @_@

  • 2016.05.18 09:22 #284454
    500 에러가 아니라 502 에러라면, 올려주신 소스에는 이상이 없는 것 같네요.
    서버 환경 차이일 수도 있는데, exit 때문에 오류가 날 이유가 있을까 싶은데요.

    혹시나 모르니, exit 바로 앞에 Context::close();를 넣어보세요.
  • 2016.05.18 09:35 #284460
    헉! 심플코드님 덕분에 잘 작동하네요. 정말 감사합니다. (__)

    그런데 Context::close() 가 무슨 작용을 한건가요?!

    놀랍습니다
  • 2016.05.18 09:43 #284468
    보통, XE 실행이 끝나면 호출되는데, 중간에 페이지를 강제로 멈출 때는 꼭 넣어주셔야 되요.
    특별한 기능을 하는 건 아니고... 열려있는 세션을 최종적으로 저장한 뒤에 닫고, DB 접속을 닫습니다.

    간혹가다가, 어떤 상황에서 이게 없는 경우 오류가 생기는 경우가 있더군요.
  • 2016.05.18 10:13 #284533
    아.. 그러했군요! 많이 배웠습니다 감사드려요^^