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