질문 Q #11824
preg_replace(): Compilation failed: regular expression is too large at offset
건곤대나이 2014-11-21 15:44:40
안녕하세요.

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

게시판에 글저장중에 
저런 오류가 왜 나는지 아시거나
해결하신분 계신가요?
 
답변 3
#1 taegon 2014-11-24 09:47:39
글을 정규식으로 처리하는데 글의 크기가 커서 처리를 못한다는 에러인것 같습니다.
글의 크기를 확인해보시고 php에서 메모리 설정을 늘려보세요.
#2 건곤대나이 2014-11-24 22:10:17
답변 감사합니다.
그런데 그렇게 크지 않는 다음 문장을 넣어도 에러메세지를 출력합니다.

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

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>

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

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

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

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