CI 묻고 답하기

제목 preg_replace(): Compilation failed: regular expression is too large at offset
글쓴이 건곤대나이 작성시각 2014/11/21 15:44:40
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14880   RSS
안녕하세요.

ci 에러는 아닌것 같습니다만

게시판에 글저장중에 
저런 오류가 왜 나는지 아시거나
해결하신분 계신가요?
 
 다음글 안드로이드에서 EditText통해 입력된 값을... (3)
 이전글 global_xss_filtering 를 유동적으로 사... (1)

댓글

taegon / 2014/11/24 09:47:39 / 추천 0
글을 정규식으로 처리하는데 글의 크기가 커서 처리를 못한다는 에러인것 같습니다.
글의 크기를 확인해보시고 php에서 메모리 설정을 늘려보세요.
건곤대나이 / 2014/11/24 22:10:17 / 추천 0
답변 감사합니다.
그런데 그렇게 크지 않는 다음 문장을 넣어도 에러메세지를 출력합니다.

*******************************************************************************

MariaDB로 마이그레이션 후에 다음과 같은 에러 메시지가 발생하는 경우가 있습니다.

mysql_connect(): Headers and client library minor version mismatch.

Database 의 Client API Library 버전과 Header 버전이 일치하지 않아 발생하는 문제입니다. DB 자체는 정상적으로 굴러가지만 지속적으로 에러메시지를 뱉어냅니다. 자신의 DB API버전을 확인하려면 커맨드 라인이 다음과 같이 입력합니다.

1
php -i | grep 'Client API'

저같은 경우에는 버전정보가 다음과 같이 출력되었습니다. Client API header version만 다릅니다.

1
2
3
4
Client API version => 5.3.12-MariaDB
Client API library version => 5.3.12-MariaDB
Client API header version => 5.1.69
Client API version => 5.3.12-MariaDB

해결방법은 php mysql 드라이버를 삭제하고 mysqlnd 드라이버를 설치하면 됩니다.

1
2
yum erase php-mysql
yum install php-mysqlnd

드라이버 설치를 마치고 API 버전을 다시 확인하면 mysqldn으로 드라이버가 변경된 것을 확인하실 수 있습니다. 또한 더 이상 에러메세지가 발생하지 않습니다.

 

***********************************************************************
 
<h4>A PHP Error was encountered</h4>

<p>Severity: Warning</p>
<p>Message:  preg_replace(): Compilation failed: regular expression is too large at offset 43740</p>
<p>Filename: core/Security.php</p>
<p>Line Number: 805</p>

**************************************************************************************************

 
taegon / 2014/11/24 23:32:10 / 추천 0
일단은 core/Security.php를 열어서 805라인에서 정규식으로 처리하는 부분에 데이터가 어떻게 들어가는지 로그를 찍어보셔야 할 것 같습니다. 재가 가지고 있는 2.1대 버전의 경우에는 

$str = preg_replace('#(&\#?[0-9a-z]{2,})([\x00-\x20])*;?#i', "\\1;\\2", $str);

이 부분인데 입력하는 부분인 $str이 정말 크게 들어가는지 확인해 보시고 php의 가용 메모리를 임시로 50M정도로 변경해보세요.