502 bad gateway 처리방법이 어떻게 될까요
어떤 분의 부탁을 받아서 애드온을 하나 작성했습니다.
글 작성 시 미리 지정한 예외 그룹을 제외하고 특정 태그 사용을 금지하는 비교적 간단한 애드온입니다
다른 여러 환경에서는 다 문제없이 작동하는데 그분의 사이트에서만 502 bad gateway 에러가 떠버리네요..
php에러로그에도 안잡히고.. 원인을 모르겠습니다ㅜ.
그분은 카페24 웹호스팅을 사용하시고 특이점은 php7버전이 설치되어 있습니다
혹시 제가 작성한 코드에 php 호환이 문제가 되는 코드가 있나했는데.. 열심히 찾아본 결과 그 문제는 아닌 것 같습니다.
호스팅사에 문의하는 방법밖에 없을까요?
댓글 10
일부 서버 환경에서 PHP 에러가 발생하면 에러메시지를 표시하지 않고 그냥 502를 뿜어버리는 경우가 있습니다.
태그 사용을 금지하는 애드온이라면 정규표현식이 동원될 것 같은데, 혹시 PHP 7에서 지원하지 않는 ereg, eregi 부류의 함수를 사용하셨나요? 태그를 추출하는 데 외부 라이브러리를 사용하셨다면 그 라이브러리도 확인해 봐야 합니다.
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;
}
그렇군요.. 코드의 일부분입니다. 혹시 문제될만한 부분이 있을까요?
하나하나 다 뺴면서 테스트해봤는데 exit; 이것만 들어가면 502에러가 나네요.. @_@
서버 환경 차이일 수도 있는데, exit 때문에 오류가 날 이유가 있을까 싶은데요.
혹시나 모르니, exit 바로 앞에 Context::close();를 넣어보세요.
그런데 Context::close() 가 무슨 작용을 한건가요?!
놀랍습니다
특별한 기능을 하는 건 아니고... 열려있는 세션을 최종적으로 저장한 뒤에 닫고, DB 접속을 닫습니다.
간혹가다가, 어떤 상황에서 이게 없는 경우 오류가 생기는 경우가 있더군요.