2011-09-17 5 views
6

프로덕션 서버에서 사용할 때 null을 반환하는 PHP 응용 프로그램에 일부 코드가 있지만 개발 서버에서 제대로 작동합니다. 다음은 코드 줄입니다.preg_match_all`u` 플래그는 무엇에 의존합니까?

// use the regex unicode support to separate the UTF-8 characters into an array 
preg_match_all('/./us', $str, $match); 

u에 어떤 플래그가 종속됩니까? mb_string이 활성화 및 비활성화되어 테스트되었으며 영향을 미치지 않는 것으로 보입니다.

내가 갖는 오류는

preg_match_all: Compilation failed: unknown option bit(s) set at offset -1

대한 추가 정보를 원하시면

이가 prodction 서버의 옵션 중 하나입니다 : 여기

'--with-pcre-regex=/opt/pcre'

및 pcre 섹션은 ​​

입니다. "PCRE가 UTF-8을 포함하도록 구축"하는 방법에 대한

In order process UTF-8 strings, you must build PCRE to include UTF-8 
support in the code, and, in addition, you must call pcre_compile() 
with the PCRE_UTF8 option flag, or the pattern must start with the 
sequence (*UTF8). When either of these is the case, both the pattern 
and any subject strings that are matched against it are treated as 
UTF-8 strings instead of strings of 1-byte characters. 

모든 링크 나 팁 :

Picture.png http://img829.imageshack.us/img829/8524/pictureke.png

6,나는이 노트 @Wesley가 언급했다 믿습니다? 그것은 PCRE에 따라 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

변수 또는 상수 값을 테스트하고 있습니까? 귀하의 예제 변수를 가지고, 나는 당신이 상상에 대해 당신이 dev에 살고 살고 있는지 확인해야한다고 생각합니다. – hakre

+1

http://php.net/manual/en/reference.pcre.pattern.modifiers.php, 의견도 참조하십시오. –

답변

1

via

결과 --enable-UTF8로 컴파일된다.

+0

이 말이 맞아요 - 당신이 정교 할 수 있습니까? 나는 그것을 개발 또는 생산 기계를위한 php_info에서 보지 못했다. – cwd

4

이 플래그는 유니 코드 지원을 사용하여 빌드 된 PCRE에 따라 다릅니다.

PHP는이 라이브러리를 번들로 제공하며 일반적으로 유니 코드 지원이 활성화되어 있습니다. u 수정자를 사용할 수 있으며 번들로 제공된 PCRE 라이브러리로 PHP를 빌드 한 PHP 4.1.0부터 항상 작동합니다.

그러나 일부 Linux 배포판은 유니 코드 지원이 활성화되지 않은 자체 PCRE 빌드에 대해 PHP를 빌드하므로 결과적으로 u 수정자가 해당 빌드에서 작동하지 않습니다.

해결 방법은 대체 PHP 패키지를 사용하는 것입니다.

+0

활성화되어 있는지 그리고 사용 가능한 시스템 관리자에게 알려주는 언어가 무엇인지 알아 보려면 어떻게해야합니까? 나는이 시스템이 CentOS를 기반으로한다고 믿는다. – cwd

+0

/usr/include/pcre.h에 정의 된 PCRE_UTF8 매크로를 찾을 수 있습니다. – arnaud576875

+0

프로덕션 머신에서 루트 액세스 권한이 없지만/usr/include에 들어갈 수 있고 pcre.h가 없습니다. . 또한 더 많은 정보로 질문을 업데이트했습니다. – cwd