얼마전 알게된 Mootools를 적용한 보이기/감추기 플러그인(moo-spoiler)를 공개할 요량으로 이런 저런 실험을 해보던 중, Apache서버가 리셋 되어버리는 오류를 만나버렸습니다.
처음에는 도대체가 어느부분에서 생기는 오류인지도 몰라 난감했었는데, 한참동안의 삽질끝에 preg 계열 함수에서 비롯된 문제라는걸 알게되어서 해결법을 찾아 헤메던 중 Crizin님의 블로그에서 관련글을 보게되어 원인은 알게되었지만 해결법이 없다는것 또한 알게되어 결국 다른 방법으로 접근 하기로 하고, 공개를 미루게 되었습니다
문제를 일으키는 부분의 내용은 이렇습니다. (class의 일부분 입니다)
_replace($new_content[2], $new_content[1]); } return preg_replace_callback($regex, array(&$this, '_spoiler'), $new_content); }
아시는 분들께서는 척 보고 아셨겠지만, preg_replace_callback함수 설명의 마지막 예제를 응용한 내용입니다. 패턴의 다중 사용을 위해서 적용한 부분이었는데 감추는 내용의 길이가 길어져버리면 바로 오류가 발생하더군요. 제 로컬 테스트 서버에서(Windows XP)는 길이(strlen)가 365자를 넘기면 뻗어버리고, 임대중인 호스팅 서버에서는 그 10배정도의 길이가 넘어가면 오류를 뱉어내거나 작동하지 않았습니다.
다중 사용을 고려하지 않고 ((?:[^\[]|\[(?!\/?spoiler\s*([^]]*)])|(?R))+)
부분을 (.+?)
로 바꾸면 문제가 발생하지 않지만… 기왕 적용하기로 맘 먹은 부분이기 때문에 억지로? 라도 구현해보고 싶군요.
어떤 다른 좋은 방법이 있을까요