Я потратил этот день, пытаясь понять странную проблему. У меня есть сайт WordPress, который работает в следующее сообщение об ошибке:phpinfo сообщает о некорректной версии pcre
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
Эта линия в сор-включает/shortcodes.php выглядит следующим образом:
$text = preg_replace("/[\x{00a0}\x{200b}]+/u", " ", $text);
Я нашел эту статью, в которой, казалось, совпадают довольно хорошо с моей проблемой: http://labs.sasslantis.ee/2011/05/errors-in-wordpress-after-php-upgrade/
в статье описывается ситуация, в которой отличается выход phpinfo();
в апач и командной строки в отношении libpcre
Я проверил, что это мой вопрос, создав тестовый файл с phpinfo();
в нем, а также запускал вытекающий из оболочки:
php -r "phpinfo();"
скрипта (? Апач) версия возвращает PCRE Library Version 6.6 06-Feb-2006
версия командной строки возвращает PCRE Library Version => 8.21 2011-12-12
Мне осталось интересно, что делать. Я не очень хорошо разбираюсь в использовании командной строки, поэтому я обращаюсь к вам с надеждой на помощь.
В статье упоминается «исправление начальных флагов apache». Я не уверен, что это значит.
Я также нашел комментарий где-то в другом месте: «Хорошо, оказалось, что проблема была в старой версии libpcre, которая висела в системе и загружалась по ошибке. Как только я обновился до последней версии libpcre , проблема исправлена ". Я не совсем уверен, как проверить эту информацию на сервере.
==== Редактировать 1 ====
У меня есть больше информации:
/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
Я буду видеть что я могу сделать для выполнения этих последних шагов и скоро обновится
PHP будет использовать то, что PCRE установлено в вашей системе, и Apache не имеет права говорить по этому вопросу. Посмотрите на свою библиотечную директорию (/ var/lib?), Чтобы увидеть, какие версии там есть. –
Есть ли способ, чтобы я мог найти, где искать? Я запустил 'ldd/usr/bin/php | grep pcre', который указал мне на/opt/pcre. Если это где-то близко, то у меня есть только тот, который установлен? –
Посмотрите файл httpd.conf (/etc/httpd/conf.d/php.conf), чтобы проверить, какой php-модуль использует веб-сервер. – jap1968