Наши клиенты, установив одну из популярных систем управления сайтом, сталкивались с тем, что данная 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, корректная работа систем управления сайтом, использующих данные директивы, не возможна!