2012-02-17 3 views
9

이상한 문제를 파악하는 데 시간을 보냈습니다. 나는 다음과 같은 오류로 실행하는 워드 프레스 사이트가 있습니다phpinfo가 잘못된 pcre 버전을보고 함

$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text); 

내가 일치 듯이 기사를 발견 : 다음에 그 라인/shortcodes.php을 WP는-포함

Warning: preg_replace() [function.preg-replace]: Compilation failed: unknown option bit(s) set at offset -1 in /path/to/public_html/wp-includes/shortcodes.php on line 257 

입니다 꽤 잘 내 문제와 : http://labs.sasslantis.ee/2011/05/errors-in-wordpress-after-php-upgrade/

이 기사는 아파치와 libpcre

에 관한 명령 행에 phpinfo();의 다른 출력이되는 상황을 설명

나는이 거기에 phpinfo();와 테스트 파일을 만들어 내 문제가 있음을 확인하고 또한 셸에서 다음 실행 :

php -r "phpinfo();" 

스크립트 (? 아파치) 버전은 명령 행 버전은 PCRE Library Version => 8.21 2011-12-12 반환 PCRE Library Version 6.6 06-Feb-2006 반환

나는 무엇을 해야할지 궁금합니다. 나는 커맨드 라인 사용법에 능숙하지 못하다. 그래서 나는 당신에게 도움이되기를 바라고있다.

이 기사에서는 "fixing apache start-flags"에 대해 언급합니다. 그게 무슨 뜻인지 모르겠습니다.

다른 말로도 다음과 같은 코멘트를 발견했습니다 : "문제는 이전 버전의 libpcre가 시스템에 걸려 실수로로드되는 것입니다. 일단 최신 버전의 libpcre 문제가 해결되었습니다. " 나는이 정보를 서버에서 어떻게 확인하는지 완전히 모릅니다.

==== 편집 한 ====

좀 더 정보가했습니다 : 우리가 이미 알고 있기 때문에이 완전히 놀라운 일이 아니다

/opt/pcre/bin/pcretest -C 

반환

PCRE version 8.21 2011-12-12 
Compiled with 
UTF-8 support 
Unicode properties support 
No just-in-time compiler support 
Newline sequence is LF 
\R matches all Unicode newlines 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Default recursion depth limit = 10000000 
Match recursion uses stack 

을 명령 행은 올바른 버전을 리턴합니다. 그러나 웹을 통해 실행될 때 PHP가 알맞은 알 수없는 이유 때문에 적절한 pcre 값을 반환하지 않습니다.

는 ====이 글 튕겨 나갔습니다

편집 2 ==== : http://www.bigboylemonade.com/pcre-version-problem-on-cpanel

전체 경로없이 pcretest -C 실행은 반환

PCRE version 6.6 06-Feb-2006 
Compiled with 
    UTF-8 support 
    Unicode properties support 
    Newline character is LF 
    Internal link size = 2 
    POSIX malloc threshold = 10 
    Default match limit = 10000000 
    Default recursion depth limit = 10000000 
    Match recursion uses stack 

내가 볼거야 마지막 단계를 수행하는 것에 대해 내가 할 수있는 일과 곧 업데이트 될 것입니다.

+0

PHP는 PCRE가 시스템에 설치되어있는 것을 사용하며, Apache는이 문제에 관해 아무 말도하지 않습니다. 라이브러리 디렉토리 (/ var/lib?)에서 어떤 버전이 있는지 확인하십시오. –

+0

내가 볼 곳을 찾을 수있는 방법이 있습니까? 나는'ldd/usr/bin/php | grep pcre'는 나를/opt/pcre라고 지적했다. 그게 가까이에 있다면, 그 중 하나가 설치되어 있습니까? –

+0

httpd.conf (/etc/httpd/conf.d/php.conf) 파일을보고 어떤 PHP 모듈이 웹 서버를 사용하는지 확인하십시오. – jap1968

답변

10

자, 마침내 내 호스트의 메모를 어떻게 수정했는지 그는 문제 :

==================== Begin steps ============================== 

내가이 데이터를 사용할 수 있었다,이 특정 서버에서 시작 :

[[email protected]] ~ >> pcretest -C PCRE 
version 6.6 06-Feb-2006 
Compiled with 
UTF-8 support 
Unicode properties support 
Newline character is LF 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Default recursion depth limit = 10000000 
Match recursion uses stack 

[[email protected]] ~ >> /opt/pcre/bin/pcretest -C PCRE 
version 8.21 2011-12-12 
Compiled with 
UTF-8 support Unicode properties support 
No just-in-time compiler support 
Newline sequence is LF 
\R matches all Unicode newlines 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Default recursion depth limit = 10000000 
Match recursion uses stack 

버전 6.6은 또한 어떤은 phpinfo() 웹 페이지에서 또한 PHP는 -i에 표시했다. PHP 버전 4.2 이상에서는 기본적으로 Apache 컴파일 플래그 '--with-pcre-regex' 이 자동으로 포함되므로 모든 EA 실행에서 6.6을 사용합니다. cPanel 에서 제공하는 버전입니다. 이것의 핵심은 OS 우리가 아파치가 사용할 PCRE 라이브러리에 대해 알려주는, 그래서 첫 번째 단계 하였다 :

[[email protected]] etc >> echo "/opt/pcre/lib/" >> /etc/ld.so.conf 

그런 ldconfig를 실행 - 지금 우리는 PCRE 의 두 버전의 라이브러리가 시스템 사용자가 사용할 수 있습니다.

[[email protected]] etc >> ldconfig -v | grep -i pcre 
/opt/pcre/lib: 
libpcre.so.0 -> libpcre.so.0.0.1 
libpcrecpp.so.0 -> libpcrecpp.so.0.0.0 
libpcreposix.so.0 -> libpcreposix.so.0.0.0 
libpcre.so.0 -> libpcre.so.0.0.1 
libpcre.so.0 -> libpcre.so.0.0.1 
libpcrecpp.so.0 -> libpcrecpp.so.0.0.0 
libpcreposix.so.0 -> libpcreposix.so.0.0.0 
libpcrecpp.so.0 -> libpcrecpp.so.0.0.0 
libpcreposix.so.0 -> libpcreposix.so.0.0.0 
[[email protected]] etc >> 

예! 이제 아파치를 편리한 rawopts 파일을 사용하는 대신 6.6 사람의 사람을 사용하는 아파치를 말해 다시하기 :

당신이 일을 끝낼
[[email protected]] etc >> echo "--with-pcre-regex=/opt/pcre" >> 
/var/cpanel/easy/apache/rawopts/all_php5 [[email protected]] etc >> 
/scripts/easyapache --build 

, 테스트 :

[[email protected]] etc >> php -i | grep -i "pcre library" PCRE 
Library Version => 8.21 2011-12-12 [[email protected]] etc >> 

[[email protected]] ~ >> pcretest -C PCRE 
PCRE version 8.21 2011-12-12 
Compiled with 
UTF-8 support 
Unicode properties support 
Newline character is LF 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Default recursion depth limit = 10000000 
Match recursion uses stack 

[[email protected]] ~ >> /opt/pcre/bin/pcretest -C PCRE 
PCRE version 8.21 2011-12-12 
Compiled with 
UTF-8 support 
Unicode properties support 
No just-in-time compiler support 
Newline sequence is LF 
\R matches all Unicode newlines 
Internal link size = 2 
POSIX malloc threshold = 10 
Default match limit = 10000000 
Default recursion depth limit = 10000000 
Match recursion uses stack 

========================== End ============================ 
+1

굉장!우리 베이컨을 구해 줬어. –

1

을 우리의 경우 아파치에 있었다 --with-pcre 매개 변수를 사용하여 컴파일되지 않습니다.
Pcre와 pcre-devel이 설치되었습니다 (yum 또는 apt 저장소에서 컴파일 할 필요 없음). 그런 다음 pcre-config를 찾아야했습니다.
우리의 경우에는/usr/bin/pcre-config였습니다. 'bin'은 아파치 컴파일러에 의해 가정 된 것으로 보이므로 마지막 ./configure 줄에 다음을 포함해야합니다 :
--with-pcre =/usr