apache + php 에서 아무런 에러 없이 페이지가 죽는 현상. ERR_CONNECTION_RESET

URL 이 긴 경우(약 250글자 이상)
http 에러나 php 에러 없이

ERR_CONNECTION_RESET (크롬)
INET_E_DOWNLOAD_FAILURE (IE)

같은 에러가 나오는 경우

----=---------
원인
YII 1.1 에서
CHttpRequest.decodePathInfo()
메소드 속
preg_match('%^(?:
   [\x09\x0A\x0D\x20-\x7E]            # ASCII
| [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF]         # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF]         # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
)*$%xs', $pathInfo)
부분이 있음


저 부분 preg 동작이 recursive 하게 동작하며
설정에는 100000 번 리커시브하게 돌 수 있음

문제는 처리되는 문자열이 길어지면
이게 아파치+php 조합시 저 부분이 계속계속 메모리로 쌓이고 그로 인해서 아파치쪽에 문제가 생기는 듯함.
그래서 http 나 php 에러가 나오지 않고, 그냥 페이지가 죽어버림.

해결법은 메모리 문제가 안 날 정도로 리커시브 동작을 제한 하는 것.

ini_set("pcre.recursion_limit", "100");
처럼 하면 에러 안 날 것임.

댓글
  • No Nickname
    No Comment
  • 권한이 없습니다.
    {{m_row.m_nick}}
    -