Логин:
Пароль:

Изменение mbstring.func_overload и internal_encoding

Наши клиенты, установив одну из популярных систем управления сайтом, сталкивались с тем, что данная CMS требовала изменить стандартные настройки параметров PHP mbstring.func_overload и mbstring.internal_encoding.

В частности, система требует прописать настройки:

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

Разработчики CMS предлагают менять эти параметры через файл .htaccess, но на большинстве современных конфигураций этот метод не работает. В этой статье мы поможем внести данные настройки в конфигурацию PHP.

Почему не меняются mbstring.func_overload и internal_encoding?

Одним из методов изменения mbstring.func_overload и mbstring.internal_encoding является внесение настроек в файл .htaccess:

php_value mbstring.internal_encoding UTF-8
php_value mbstring.func_overload 2

Но, начиная с одной из версий php 5.2 данные настройки в файле .htaccess игнорируются интерпретатором этого языка программирования. К тому же, PHP может быть установлен в режиме, отличном от mod_php (модуль Apache), что приведет к ошибке 500 после внесения настроек в файл .htaccess.

Как изменить mbstring.func_overload и internal_encoding?

Изменить настройки mbstring.func_overload и mbstring.internal_encoding в современных конфигурациях можно несколькими способами, но до этого потребуется определиться с тем, какой услугой Вы пользуетесь (хостинг с php, VDS или сервер) и режимом работы php.

Если с первым вопросом проблем не возникнет, то с режимом php несколько сложнее. Узнать о режиме работы можно из функции phpinfo, найдя строку: "Server API", где может быть указано "Apache … Handler" или иное. Значение "Apache … Handler" укажет нам на то, что PHP работает в режиме mod_php, иное значение укажет на режим CGI или аналогичный.

Изменение настроек для режима mod_php

Изменение mbstring.func_overload и mbstring.internal_encoding в режиме модуля Apache на хостинге с PHP можно выполнить, только обратившись в техническую поддержку хостинга.

При использовании своего сервера (VPS/VDS или контейнера) достаточно будет внести изменения в настройки файла httpd.conf в секцию VirtualHost сайта, для которого вносятся изменения, где указать:

php_admin_value mbstring.func_overload 2
php_admin_value mbstring.internal_encoding UTF-8

Изменение настроек для PHP в иных режимах

Изменить mbstring.func_overload и mbstring.internal_encoding в иных режимах, таких как: CGI, FastCGI и т.д., доступно, как на обычном хостинге, так и на собственном VDS или сервере.

В этом режиме изменение можно произвести простой модификацией пользовательского файла php.ini, где следует указать:

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

Универсальный метод изменения настроек

Мы сталкивались с конфигурациями систем, на которых отсутствовала возможность изменить параметры mbstring.func_overload и mbstring.internal_encoding, указанными выше методами.

В этом случае для хостинга единственным методом решения проблемы будет обращение в техническую поддержку.

А вот для контейнера, VDS и сервера существует универсальное решение, где необходимо в конец основного файла php.ini внести строки:

[HOST=domain.tld]
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8

[HOST=www.domain.tld]
mbstring.func_overload = 2
mbstring.internal_encoding = UTF-8

Где domain.tld - это имя Вашего домена без www.

mbstring.func_overload и internal_encoding в PHP 5.6 и 7.2

Обратите внимание на то, что директива mbstring.internal_encoding объявлена устаревшей в PHP 5.6. Эта же участь постигла и mbstring.func_overload в PHP 7.2. Начиная с этих версий PHP, корректная работа систем управления сайтом, использующих данные директивы, не возможна!