String functions are overloaded by mbstring


Код ответа сервера при обращении к сайту удобно проверять при помощи curl, когда в браузер выводится ошибка String functions are overloaded by mbstring (она характерна в основном для сайтов на CMS Joomla) код ответа сервера будет 500



curl -v example.com

* Rebuilt URL to: example.com/
* Trying 123.123.123.123…
* Connected to example.com (123.123.123.123) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.47.0
> Accept: */*
>
< HTTP/1.1 500 Internal Server Error



В  php-error.log или в лог ошибок веб-сервера при этом будут записываться сообщения аналогичного содержания:


[08-Sep-2017 11:39:04 UTC] PHP Fatal error: String functions are overloaded by mbstring in /home/web/sites/example.com/libraries/phputf8/utf8.php on line 39



Причина таких ошибок  в том, что в файле php.ini содержится параметр mbstring.func_overload=2, для корректной работы сайтов на CMS Joomla же требуется значение 0.



Как исправить ошибку String functions are overloaded by mbstring


mbstring.func_overload=2 необходим для сайтов на CMS Битрикс. Директива нужна для нормального отображения кодировки. Если на одном сервере размещаются сайты и на Joomla и на Битрикс, и отказаться от данной директивы сохранив работоспособность сайтов нельзя — можно настроить 2 версии РНР на сервере указав для каждой из них разные значения mbstring.func_overload



php.ini может быть идентичным за исключением директивы о которой идет речь, для Битрикс она будет выглядеть как:

mbstring.func_overload=2
mbstring.internal_encoding=utf-8



Для Joomla:

mbstring.func_overload=0



Читайте про то как проверить актуальные настройки PHP с помощью скрипта phpinfo.

Для расширения mbstring в выводе скрипта будет отдельный блок (если расширение подключено). В блоке указаны текущие значения параметров.



Пример представлен на скриншоте:

String functions are overloaded by mbstring


Чтобы поменять значения нужно найти в выводе phpinfo подключаемые файлы php.ini, внести изменения там и перезапустить веб-сервер. Им чаще всего является Apache (в связке Nginx + Apache) или сервис приложений php-fpm.

Об этом также можно судить по выводу phpinfo, в верхней части выводится режим работы РНР. Это может быть Apache Handler, cgi, fastcgi, php-fpm. Последний говорит о том, что скрипты обрабатывает сервис php-fpm, остальные говорят о том, что используется Apache.

Сказать спасибо