2012-02-17 14 views
9

He pasado el día tratando de resolver un problema extraño. Tengo un sitio de WordPress que se está ejecutando en el siguiente error:phpinfo informa incorrecto pcre versión

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 

esa línea en wp-includes/shortcodes.php es el siguiente:

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

me encontré con este artículo que parecía coincidir bastante bien con mi problema: http://labs.sasslantis.ee/2011/05/errors-in-wordpress-after-php-upgrade/

El artículo describe una situación en la que no es diferente de salida de phpinfo(); en Apache y en la línea de comandos con respecto a libpcre

me demostró que este es mi problema mediante la creación de un archivo de prueba con phpinfo(); en ella y también corrió el siguiente de la cáscara: (? Apache)

php -r "phpinfo();" 

El guión versión vuelve PCRE Library Version 6.6 06-Feb-2006 La versión de línea de comandos vuelve PCRE Library Version => 8.21 2011-12-12

Me pregunto qué hacer. No estoy muy bien versado en el uso de la línea de comandos, así que me dirijo a todos ustedes esperando alguna ayuda.

El artículo menciona "la fijación de apache start-flags". No estoy seguro de lo que eso significa.

También encontré un comentario en otro lugar que decía: "OK, resultó que el problema era una versión anterior de libpcre dando vueltas en el sistema y cargándose por error. Una vez que actualicé a la última versión de libpcre , problema fijo." No estoy del todo seguro de cómo examinar esta información en el servidor.

==== ==== 1 Editar

He tener más información:

/opt/pcre/bin/pcretest -C 

devoluciones

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 

Esto no es del todo sorprendente, porque ya sabemos que la línea de comando devuelve la versión correcta. Pero por alguna loca razón desconocida PHP, cuando se ejecuta a través de la web, no devuelve los valores de pcre adecuados.

==== ==== Editar 2

que fue a dar este artículo: http://www.bigboylemonade.com/pcre-version-problem-on-cpanel

Correr pcretest -C sin la ruta completa devuelve:

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 

voy a ver lo que puedo hacer sobre la realización de esos últimos pasos y actualizaré en breve

+0

PHP usará qué PCRE está instalado en su sistema, y ​​Apache no tiene voz en el asunto. Mira el directorio de tu biblioteca (/ var/lib?) Para ver qué versión (s) están allí. –

+0

¿Hay alguna manera de que yo pueda encontrar dónde mirar? Ejecuté 'ldd/usr/bin/php | grep pcre' que me indicó/opt/pcre. Si eso está cerca, ¿acabo de tener uno instalado? –

+0

Eche un vistazo a su archivo httpd.conf (/etc/httpd/conf.d/php.conf) para verificar qué módulo php está utilizando el servidor web. – jap1968

Respuesta

10

Ok muchachos, finalmente recibí las notas de mi anfitrión sobre cómo arreglaron t l problema:

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

cuando empecé en este servidor particular, esto era los datos disponibles:

[[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 

versión 6.6 también fue apareciendo en cualquier página web phpinfo() y también en php -i. De forma predeterminada en las versiones de php> = 4.2, el indicador de compilación de Apache '--with-pcre-regex' está incluido automágicamente, por lo que cualquier ejecución de EA utilizará el 6.6. versión que cPanel proporciona. La clave de esta era dejar que el sistema operativo sabe acerca de las bibliotecas pcre que queremos Apache para usar, por lo que el primer paso fue:

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

Entonces ejecutando ldconfig - ahora tenemos las bibliotecas para ambas versiones de PCRE disponible para los usuarios del sistema:

[[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 >> 

Yay! Ahora, para indicarle a Apache para usar éstos en lugar de los 6,6 queridos, utilizar la mano archivo rawopts y reconstruir Apache:

[[email protected]] etc >> echo "--with-pcre-regex=/opt/pcre" >> 
/var/cpanel/easy/apache/rawopts/all_php5 [[email protected]] etc >> 
/scripts/easyapache --build 

Cuando se hace, probarlo:

[[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

¡Impresionante!Has guardado nuestro tocino –

1

En nuestro caso Apache fue no compilado usando el parámetro --with-pcre.
Se instalaron Pcre y pcre-devel (de repositorios de yum o apt, no es necesario compilarlo), luego solo tuvimos que ubicar pcre-config.
En nuestro caso fue/usr/bin/pcre-config, el 'bin' parece ser asumido por el compilador de apache, por lo que la línea ./configure final debe incluir:
--with-pcre =/usr

Cuestiones relacionadas