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");
처럼 하면 에러 안 날 것임.