Перейти до

PHP - mbstring, функции обработки мультибайтных строк


Рекомендованные сообщения

Привет всем.

Ну, я уже мозг себе сломал, по всем руководствам прошёлся - всё должно пахать, а не пашет. :)

 

Дано:

FreeBSD 7.1, Apache 2, PHP 5.2.9.

Удалённо, через консоль ssh.

 

Проблема: при попытке применения команды php "mb_substr_count" в PHP - браузер выдал

Fatal error: Call to undefined function mb_substr_count()

 

Что делал:

 

cd /usr/ports/lang/php52-extensions
make config #отмечаем галкой "MBSTRING"
make install clean
/usr/local/apache22/bin/apachectl restart

 

Не заработало.

 

Тогда:

portsnap fetch
portsnap extract
portsnap update

/usr/local/apache22/bin/apachectl stop

pkg_delete apache
pkg_delete php

 

Снова ставлю PHP + расширения, настраиваю конфиг апача, правлю php.ini:

from

;extension=php_mbstring.dll

to

extension=php_mbstring.dll

 

/usr/local/apache22/bin/apachectl start

 

Всё та же

Fatal error: Call to undefined function mb_substr_count()

 

Просто с mbstring много вкусностей, не хочется себе отказывать в удовольствии, а тут такой затык. :(

 

В логах Апача пусто, просто не знаю где глянуть что ему надо.

Может сталкивался кто с таким чудом?

Ссылка на сообщение
Поделиться на других сайтах

Привет всем.

Ну, я уже мозг себе сломал, по всем руководствам прошёлся - всё должно пахать, а не пашет. :)

 

Дано:

FreeBSD 7.1, Apache 2, PHP 5.2.9.

Удалённо, через консоль ssh.

 

Проблема: при попытке применения команды php "mb_substr_count" в PHP - браузер выдал

Fatal error: Call to undefined function mb_substr_count()

 

Что делал:

 

cd /usr/ports/lang/php52-extensions
make config #отмечаем галкой "MBSTRING"
make install clean
/usr/local/apache22/bin/apachectl restart

 

Не заработало.

 

Тогда:

portsnap fetch
portsnap extract
portsnap update

/usr/local/apache22/bin/apachectl stop

pkg_delete apache
pkg_delete php

 

Снова ставлю PHP + расширения, настраиваю конфиг апача, правлю php.ini:

from

;extension=php_mbstring.dll

to

extension=php_mbstring.dll

 

/usr/local/apache22/bin/apachectl start

 

Всё та же

Fatal error: Call to undefined function mb_substr_count()

 

Просто с mbstring много вкусностей, не хочется себе отказывать в удовольствии, а тут такой затык. :(

 

В логах Апача пусто, просто не знаю где глянуть что ему надо.

Может сталкивался кто с таким чудом?

может стоит php5.3 пробовать

Ссылка на сообщение
Поделиться на других сайтах

В манах написано что подобные проблемы есть с PHP ниже версии 5.2, а здесь 5.2.9. Не думаю что переход на 5.3 всё решит, просто мне надо разобраться что ему нужно.

Ссылка на сообщение
Поделиться на других сайтах

Вы не то включаете

extension=php_mbstring.dll

для Винды. Вам надо в файле extensions.ini включить этот модуль. Лежит оно по-моему в /usr/local/etc/php/extensions.ini

Ссылка на сообщение
Поделиться на других сайтах
extension=php_mbstring.dll

Екхм, екхм Windows Extensions чуть выше какбы намекает.

 

php -m посмотрите - если там есть mbstring значит гут, если нету - смотрите есть ли у вас в /usr/local/lib/php/дата_билда/mbstring.so

 

Если есть - врубаете его в виде extension=mbstring.so в /usr/local/etc/php/extensions.ini

Ссылка на сообщение
Поделиться на других сайтах

php -m:

[php Modules]
ctype
date
dom
filter
gd
hash
iconv
json
libxml
mbstring
mcrypt
pcre
PDO
pdo_mysql
pdo_sqlite
posix
Reflection
session
SimpleXML
SPL
SQLite
standard
tokenizer
xml
xmlreader
xmlwriter
[Zend Modules]

 

/usr/local/etc/php/extensions.ini

 

extension=ctype.so
extension=pcre.so
extension=simplexml.so
extension=spl.so
extension=dom.so
extension=filter.so
extension=gd.so
extension=hash.so
extension=iconv.so
extension=json.so
extension=pdo.so
extension=pdo_sqlite.so
extension=pdo_mysql.so
extension=posix.so
extension=session.so
extension=sqlite.so
extension=tokenizer.so
extension=xml.so
extension=xmlreader.so
extension=xmlwriter.so
extension=mbstring.so
extension=mcrypt.so

 

Т.е. всё есть как бы. О_о

Ссылка на сообщение
Поделиться на других сайтах
Так, стоп пока, кажется наклёвывается правильный путь. :)

Чисто из интереса проверил. Вот она рыба моей мечты путь в одну строчку:

 

# apachectl stop && cd /usr/ports/lang/php5 && make WITH_CLI=yes WITH_APACHE=yes BATCH=yes install && cd /usr/ports/lang/php5-extensions/ && make WITH_MYSQL=yes WITH_MBSTRING=yes WITH_ICONV=yes WITH_GD=yes WITH_BCMATH=yes WITH_XML=yes BATCH=yes install && apachectl start

Ссылка на сообщение
Поделиться на других сайтах

Добил я его, заработала функция, но правда как-то странно.

dd6d2810deb5.jpg

 

Хоть ошибку не выдаёт, но выражение типа:

 

mb_substr_count("zasada12345", "/[0-9]/")

 

Равно "0" :/

 

Так же не работает "d" в любых вариантах - функция воспринимает за конкретику то что находится в кавычках, например

 

mb_substr_count("zasada 0-9", "/[0-9]/")

 

выдаст "1".

Оно и раньше так было, не только с этой функцией, что странно для PHP.

Это нормально? Может я чего-то неверно понял, с синтаксисом? Только добрался до этих понятий, извините если что. :blink:

За помощь спасибо, большущее!

 

Причина была в остатках прежней версии, скрипт запуска стартовал "не тот Апач".

Угробился правда "МС" после всех манипуляций - не могу толком поставить его теперь ни из портов ни из сорцов: ругается на то что не включена поддержка UTF8 и портит консоль при попытке работы с текстом в любой форме, хотя UTF8 включаю вручную при сборке с оф. сайта; или плюётся на неверный синтаксис скрипта сборки vfs. Ткнул пока лайт-версию, ибо уже 2 ночи было - такая бяка неудобная! :wacko:

Ссылка на сообщение
Поделиться на других сайтах

Ну в mb_ очень много "приятных" особенностей.

Само их назначение как-бы намекает что все должно работать с юникодом (читаем забываем про кодировки и различия в локалях) - а фигушки. Ближайший пример из практики - давеча захотелось мне сделать регистронезависимый поиск по юзерам. Джойн по дохренища табличкам оказался слишком напряжным и неподдерживаемым в моем варианте, так что легкий путь с LIKE пришлось отбросить. Как результат - strtolower не работает возвращая исходную строку, это понятно. Окей, пробуем mb_strtolower и.... он тоже не работает возвращая исходную строку, потому как кирилица :)

Как результат - куча самопальных подпорок со смещениями буковок по арраям.

Ссылка на сообщение
Поделиться на других сайтах
Выходит зря мучился

Ну думаю оно в общем то рабочее если заморочиться на тему описания локали итд. Просто получится менее переносимо.

 

ещё и МС запорол.

он для слабых духом, отвыкайте :)

 

zloe_shkololo.gif

Ссылка на сообщение
Поделиться на других сайтах

В общем нашёл тут хороший рабочий пример: http://forum.php.su/topic.php?forum=4&topic=2031&postid=1328256042#1328256042

   $string = '434jij>!23#$';
   $count  = strlen(preg_replace('/[^d]/','',$string));
   //var_dump($count);

От

mb_substr_count

 

Так и не смог добиться адекватного результата. Жаль, не допилили.

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...