Я провел день, пытаясь выяснить странную проблему. У меня есть сайт WordPress, на котором обнаружена следующая ошибка:
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
Эта строка в wp-includes / shortcodes.php выглядит следующим образом:
$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
Я нашел эту статью, которая, похоже, довольно хорошо согласуется с моей проблемой: http://labs.sasslantis.ee/2011/05/errors-in-wordpress-after-php-upgrade/
В статье описывается ситуация, в которой имеется другой вывод phpinfo ();
в apache и в командной строке в отношении libpcre
Я подтвердил, что это моя проблема, создав тестовый файл с phpinfo ();
в нем, а также выполнил следующее из оболочки :
php -r "phpinfo();"
Версия сценария (apache?) Возвращает Версия библиотеки PCRE 6.6, 06 февраля 2006 г.
Версия для командной строки возвращает Версия библиотеки PCRE => 8.21 2011-12-12
Мне остается только гадать, что делать. Я не очень хорошо разбираюсь в использовании командной строки, поэтому обращаюсь ко всем вам в надежде на некоторую помощь.
В статье упоминается «исправление стартовых флагов apache». Я не понимаю, что это значит.
Я также нашел где-то еще комментарий: «Хорошо, оказалось, что проблема в старой версии libpcre, зависшей в системе и загружающейся по ошибке. Как только я обновился до последней версии libpcre, проблема решена ". Я не совсем уверен, как проверить эту информацию на сервере.
==== Edit 1 ====
У меня есть дополнительная информация:
/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
Это не совсем удивительно, потому что мы уже знаем, что командная строка возвращает правильную версию. Но по какой-то безумной неизвестной причине PHP при запуске через Интернет не возвращает правильные значения pcre.
==== Edit 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
Я собираюсь посмотреть, что я могу сделать с выполнением этих последних шагов, и вскоре обновлю