Spędziłem cały dzień próbując znaleźć dziwny problem. Mam witryny WordPress, który jest uruchomiony na następujący błąd:phpinfo zgłasza nieprawidłową wersję PCR
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
To linia w wp-includes/shortcodes.php jest następujący:
$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
znalazłem ten artykuł, który zdawał się zgadzać dość dobrze z moim problemem: http://labs.sasslantis.ee/2011/05/errors-in-wordpress-after-php-upgrade/
Artykuł opisuje sytuację, w której istnieje inna wyjście phpinfo();
w apache i poleceń w odniesieniu do libpcre
I sprawdzeniu, że to jest mój problem, tworząc plik testowy z phpinfo();
w nim, a także prowadził następujące z powłoki:
php -r "phpinfo();"
Skrypt (? Apache) wersja zwraca PCRE Library Version 6.6 06-Feb-2006
Wersja poleceń zwraca PCRE Library Version => 8.21 2011-12-12
Zastanawiam się, co robić. Nie jestem zbyt dobrze zorientowany w używaniu linii poleceń, więc zwracam się do was wszystkich mając nadzieję na jakąś pomoc.
W artykule wymieniono "naprawianie flag startowych apache". Nie jestem pewien co to znaczy.
Znalazłem również komentarz gdzieś indziej, mówiąc: "OK, okazało się, że problem był starszą wersją biblioteki libpcre, która kolidowała z systemem i została załadowana przez pomyłkę." Po aktualizacji do najnowszej wersji libpcre , problem rozwiązany." Nie jestem do końca pewien, jak zweryfikować te informacje na serwerze.
==== Edycja 1 ====
mam mieć więcej informacji:
/opt/pcre/bin/pcretest -C
Returns
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
To nie jest zupełnie zaskakujące, ponieważ już wiemy, że wiersz poleceń zwraca poprawną wersję. Ale dla jakiegoś szalonego nieznanego powodu PHP, po uruchomieniu przez sieć, nie zwraca poprawnych wartości pcre.
==== ==== Edycja 2
byłem wyrzucenia ten artykuł: http://www.bigboylemonade.com/pcre-version-problem-on-cpanel
Running pcretest -C
bez pełnej ścieżki zwraca:
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
Idę zobaczyć co mogę zrobić, aby wykonać te ostatnie kroki i zaktualizuję się wkrótce
PHP będzie używać tego, co PCRE jest zainstalowane w Twoim systemie, a Apache nie ma nic do powiedzenia w tej sprawie. Spójrz na swój katalog biblioteki (/ var/lib?), Aby zobaczyć, które wersje są dostępne. –
Czy jest dla mnie sposób, aby móc znaleźć miejsce, w którym należy szukać? Uruchomiłem 'ldd/usr/bin/php | grep pcre' który wskazywał mi/opt/pcre. Jeśli jest blisko, to po prostu mam zainstalowany? –
Zajrzyj do pliku httpd.conf (/etc/httpd/conf.d/php.conf), aby sprawdzić, który moduł php korzysta z serwera WWW. – jap1968