PHP: Call to undefined function mb_strlen() — не установлено расширение mbstring

  • Обновлено
  • Чтение ≈ 4 минуты

Краткий ответ

«Call to undefined function mb_strlen()» в PHP означает, что не установлено или не включено расширение mbstring. Установите пакет phpX.Y-mbstring, раскомментируйте extension=mbstring в php.ini и перезапустите PHP-FPM или Apache.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

#Что означает ошибка

Сообщение
Call to undefined function mb_strlen()

Функции mb_* (mb_strlen, mb_substr, mb_strtolower) работают с многобайтовыми кодировками, например UTF-8, и принадлежат расширению mbstring. В отличие от стандартных strlen, они корректно считают русские символы. Если расширение не загружено, PHP сообщает о неопределённой функции. Эта же ошибка возможна для mb_convert_encoding, mb_detect_encoding, mb_str_pad и других.

#Причины и решения

Возможная причинаКак узнатьЧто делать
Не установлен mbstringПакет с расширением отсутствует.Команда php -m не показывает mbstring.Установите phpX.Y-mbstring.
Не включеноМодуль есть, но отключён в php.ini.;extension=mbstring с точкой с запятой.Раскомментируйте.
Другой php.iniИзменён файл CLI, а сайт читает файл FPM/Apache.phpinfo() указывает другой файл.Правьте файл из phpinfo().
Не перезапущен PHPИзменения не подхвачены.Старое поведение остаётся.Перезапустите службу.

#Пошаговое решение

  1. Проверьте расширениеВ журнале сайта найдите полное сообщение Call to undefined function mb_strlen() с путём и строкой. Функция mb_strlen входит в расширение mbstring; это не то же самое, что strlen, которое считает байты, поэтому механически заменять вызов нельзя. Определите, где возникла ошибка — в веб-запросе или CLI-команде, а также версию PHP нужного сайта. В терминале выполните php -v и php -m, но помните: этот вывод относится к PHP командной строки, а у сайта на PHP-FPM может быть другая версия или другой набор расширений.
  2. Установите на Debian/UbuntuЕсли сайт на Debian/Ubuntu и расширение отсутствует именно в веб-версии, администратор должен определить установленный пакет и номер PHP, например по php-fpm-службе или настройкам панели хостинга. В системных сборках команда установки может быть sudo apt install php8.3-mbstring для PHP 8.3 из соответствующего репозитория, но 8.3 — лишь пример. Сначала выполните apt policy ИМЯ_ПАКЕТА и убедитесь, что он предназначен нужному PHP; для нестандартных сборок, например /opt/php85, требуется способ подключения расширения, предусмотренный поставщиком панели. Не ставьте параллельный пакет от другой версии наугад.
  3. Установите на RHEL/Alma/RockyНа RHEL/AlmaLinux/Rocky Linux администратор сначала выясняет, из какого репозитория и набора установлена работающая версия PHP (php -v, сведения о сервисе и dnf list installed '*php*'). Затем по документации выбранного репозитория ставит соответствующий пакет mbstring, например php-mbstring для системного набора или пакет конкретного потока. Не смешивайте модуль одного выпуска с бинарным файлом другого: в лучшем случае сайт продолжит писать undefined function, в худшем PHP не сможет загрузить расширение. После установки проверьте сообщения журнала о загрузке модулей.
  4. Включите на WindowsВ Windows найдите фактически используемый php.ini: для CLI это php --ini, а для Apache или PHP-FPM путь может отличаться. Сделайте копию файла, затем найдите строку extension=mbstring и включите её, только если подходящий модуль php_mbstring.dll поставляется вместе с этим выпуском PHP и extension_dir указывает на правильный каталог расширений. Сохраните файл и перезапустите именно тот веб-процесс, который обслуживает сайт. Если журнал сообщает, что DLL не загружается, проверьте архитектуру и совместимость версии, не скачивайте DLL с посторонних сайтов.
  5. Перезапустите службыПосле установки или включения модуля администратор согласованно перечитывает конфигурацию нужного PHP-FPM либо перезапускает его службу, поскольку активные процессы должны загрузить новое расширение. Узнайте точное имя службы через systemctl list-units --type=service | grep php (Linux); не копируйте на другой сервер php8.3-fpm, если там работает PHP 8.5 или отдельная сборка панели. Для Apache с модулем PHP порядок иной. Учтите, что перезапуск может прервать текущие запросы; проверьте журнал после перезапуска.
  6. Проверьте на хостингеНа виртуальном хостинге без SSH откройте панель управления сайтом → раздел версии и расширений PHP, если он предусмотрен, и посмотрите активную версию конкретного домена. Включите mbstring для нужного сайта и сохраните настройки; названия кнопок зависят от панели. Если такого управления нет, передайте в поддержку точное сообщение, домен и указанную в панели версию PHP. Не загружайте в каталог сайта чужие бинарные расширения и не пытайтесь исправить отсутствие серверного модуля изменением прав файлов.
  7. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    Не выполняйте apt install php8.3-mbstring автоматически: сначала проверьте версию PHP-FPM сайта. PHP CLI может отличаться.
    # Диагностика PHP командной строки (Linux):
    php -v
    php -m | grep -i mbstring
    php --ini
    # Установка пакета и перезапуск относятся только к точной версии веб-PHP и выполняются отдельно.
  8. Проверьте результатПроверьте результат в той среде, где была ошибка: откройте страницу с проблемным действием и убедитесь, что запись undefined function mb_strlen перестала появляться в журнале. Для CLI можно выполнить php -r "var_dump(extension_loaded('mbstring'), mb_strlen('Привет', 'UTF-8'));"; ожидается bool(true) и число 6, если команды запускаются в нужной UTF-8 среде. При сохранении ошибки выясните, какой PHP реально обрабатывает сайт и загрузился ли модуль; временные страницы phpinfo() удаляйте сразу после ограниченной проверки.

Если вы не можете установить расширение (ограничения хостинга), используйте полифил symfony/polyfill-mbstring: composer require symfony/polyfill-mbstring. Он реализует основные функции на чистом PHP, но медленнее. Для WordPress и Laravel mbstring рекомендуется: без него некоторые плагины работают неверно. Описание расширения — в документации PHP.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 1 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.