Главная > Linux | Бездна > CentOS, PCRE и регистронезависимый поиск

CentOS, PCRE и регистронезависимый поиск

12.09.2012 10 комментариев » Просмотры: 4 741

CentOS

Вчера столкнулся с проблемой: не работал модификатор "i" в регулярном выражении. Этот модификатор отвечает за регистронезависимый поиск..

С похожей проблемой я уже сталкивался, и описывал её тут: PCRE и регистронезависимый русский поиск, однако на этот раз этот рецепт не сработал.

Для тестов я написал такой простой пример:

Выполнение примера, говорило о том, что с кодировками все впорядке, однако пример по прежнему не работал.

После нескольких часов поиска, я набрел вот на этот пост: Unicode Support on CentOS 5.2 with PHP and PCRE в котором говорится, что проблема в том, что PCRE, неправильно скомпилирован. Проверить это можно такой командой:

В "правильной" версии первые две строчки должны сообщать:

Если это не так, то необходимо скомпилировать PCRE с ключами:

По указанной выше ссылке ( Unicode Support on CentOS 5.2 with PHP and PCRE ) подробно описывается как собрать пакет самостоятельно, но так же предоставляется возможность и скачать уже готовый пакет:

следующим шагом, необходимо установить этот пакет:

после этого, можно сново проверить, все ли в порядке и должны увидеть такой результат:

В случае, если у Вас не получилось, почитайте отзывы других людей в комментариях к исходному посту.

Автор: | Рейтинг: 4/5 | Теги: ,

10 комментариев

Написать свой
  1. Kudesnik Ответить
    04.02.2013 в 9:52 дп
    У меня еще месяц предоплачен.
    Я новичок в администрировании, поэтому и переезжаю, на все времени не хватает.
  2. Kudesnik Ответить
    01.02.2013 в 9:52 пп
    Версии совпадают.

    Решил не тратить свое время дальше и взять зарубежный шаред.
    Самое интересное, что скрипты работали в прошлом году, я изменений никаких не вносил в настройку сервера, с сайтами работал под юзером. Админы клянутся, что ничего не трогали. Единственное что произошло, сервак упал без видимых причин. Может железо старое, так как vps дешевенький, хрен его знает.
    • Vitaliy Orlov Ответить
      02.02.2013 в 8:54 дп
      На мой взгляд, очень похоже на обновление какого-то пакета (возможно автоматическое) и его не правильная конфигурация, например скомпилирован не с теми параметрами. К сожалению, подобные проблемы надо рассматривать, в контексте конкретного сервера, и очень трудно что-то определить "на расстоянии".

      Я последнее время, беру сервера и VPS на Debian-е. Там, пока что, все работает из коробки. С CentOs-ом сталкиваюсь периодически на серверах заказчиков и там бывают подобные "мелкие" неприятности, когда вроде все правильно настроено и работает, однако есть проблемки. Разумеется, я не исключаю свою некомпетентность в настройке серверов, однако такое происходит.

      Кстати, если ты переехал на шаред и сервер остался пустой, можешь попробовать полностью удалить pcre, веб-сервер, php, поставить и сконфигурировать их заново.
  3. Vitaliy Orlov Ответить
    01.02.2013 в 2:43 пп
    Попробуй ещё, проверить версии модуля pcre:
    а) создаем файлик php с содержимым и открываем в броузере

    <?php
    phpinfo();
    ?>
    б) выполняем в консоли:

    php -r "phpinfo();" | grep PCRE
    должны совпадать, что-то вроде:
    PCRE Library Version => 8.12 2011-01-15

    если не совпадают, тогда вот тут написано как исправить:
    phpinfo is reporting incorrect pcre version
  4. Kudesnik Ответить
    01.02.2013 в 2:05 пп
    стили для code поправь, в style.css добавить

    code {
    display: block;
    margin: 1em 0 1em 15px;
    padding: 5px ;
    }
    • Vitaliy Orlov Ответить
      01.02.2013 в 2:21 пп
      Исправлено, спасибо!
  5. Kudesnik Ответить
    01.02.2013 в 1:54 пп
    1. все отлично
    2. да, было в ansi. Результат в utf-8 без bom
    Test 1 ... ERR Test 2 ... >>> OK <<< 3. изначально была локаль russian, сейчас ru_RU.cp1251

    вот результат locale -a | grep ru

    -bash-3.2# locale -a | grep ru
    ru_RU
    ru_RU.cp1251
    ru_RU.iso88595
    ru_RU.koi8r
    ru_RU.utf8
    ru_UA
    ru_UA.koi8u
    ru_UA.utf8
    russian
    • Vitaliy Orlov Ответить
      01.02.2013 в 2:28 пп
      Второй тест прошел. Это значит, что уже не все так плохо, можно использовать модификатор "u" к регуляркам. Он говорит, что строки надо воспринимать как UTF-8.
  6. Kudesnik Ответить
    01.02.2013 в 9:44 дп
    Дано vps CentOS 5.6 64-bit , php 5.2.17
    ваш скрипт выдает :


    Locale: ru_RU.utf8
    Internal encoding: UTF-8
    Regexp encodiung: UTF-8
    Text encoding UTF-8
    -------------------
    Test 1 ... ERR
    Test 2 ... ERR



    не работают регулярки на сайте, не могу понять почему

    c PCRE все правильно
    • Vitaliy Orlov Ответить
      01.02.2013 в 1:24 пп
      1) проверь на всякий случай еще раз PCRE:
      в консоли:
      $ pcretest -C
      пишет: Unicode properties support ?

      2) проверь в какой кодировке сохранен мой файл, должна быть UTF-8 Without BOM. Глянуть можно, например, в Notepad++.

      3) посмотри есть ли вообще русские локали на сервере:
      в консоли
      $ locale -a | grep ru

      Если ничего из этого не помогло, то к сожалению, мне в голову больше ничего не приходит :(

      Когда найдешь решение, и будет минутка, напиши его тут или оставь ссылку на пост в своем блоге.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Разрешены HTML-теги: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>