Предыстория такова, есть система с осью Ubuntu 18.04 Server на которой развернут главный сайт компании и сайты для регионов, все это базируется на CMS Bitrix (apache2 + php7.4) и вот поступает задача от подрядчиков. Странно, вроде наше руководство платит им деньги не только за Web-разработку, но и самостоятельную настройку, а они не знаю и каждый раз прикидываются что не делают этого.

Может ли Ваш системный администратор (т.е. Я) поправить данное сообщение, которое при проверке системы из Bitrix было обнаружено и помечено, как "Ошибка":

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

С 01.02.2023 будет ограничена поддержка наших продуктов на PHP версии ниже 8.0. Рекомендуемая версия PHP - 8.1 и выше. Вы используете версию PHP 7.4.29. Пожалуйста, запланируйте обновление PHP или обратитесь в службу технической поддержки вашего хостинга.

Информационное сообщение из Bitrix которое нужно поправить

Мне то что, хоть какое-то разнообразие от текущих задач, да и интересно где это можно поправить.

Шаг №1: Для начала нужно самим смоделировать, как и где было получено сообщение выше:

URL: https://IP&DNS/bitrix/admin/#authorize (на главном сайте) — авторизовался — Настройки - Инструменты - Проверка системы — вкладка «Тестирование конфигурации" и нажимаю "Начать тестирование" и вот здесь данная ошибка и значится. Иду дальше.

Шаг №2: Посмотрел глобальные настройки, то данная настройка не включена:

ekzorchik@ekzorchik:~$ cat /etc/php/7.4/apache2/php.ini | grep overload | grep -v ";"
ekzorchik@ekzorchik:~$ cat /etc/php/7.4/cli/php.ini | grep overload | grep -v ";"
ekzorchik@ekzorchik:~$ cat /etc/php/7.4/fpm/php.ini | grep overload | grep -v ";"

вывод пуст

Шаг №3: Создал тестовый файл с функцией на php и положил в корень дабы отобразить всю информацию по PHP модулям и настройкам:

ekzorchik@ekzorchik:~$ sudo nano  /var/www/html/ekzorchik_2023/info.php
<?php phpinfo(); ?>;

теперь при обращении через браузер https://IP&DNS/info.php в выводе вижу, что есть настройка Local Value & Master Value.

Настройки mbstring (Local Value & Master Value)

Никогда не обращал внимание на это, а значит нужно почитать.

  • Master Value - это то, что берется из php.ini
  • Local value - то, что действует на данный конкретный файл с phpinfo, может устанавливаться через .htaccess либо в настройках хоста

значит в моем случае где в настройках сайта(ов) прописана директива.

Посмотрел настройки в

ekzorchik@ekzorchik:~$ sudo ls /etc/apache2/sites-enabled/
000-default.conf      baikal.conf         ekb-le-ssl.conf         krasnodar-le-ssl.conf     rona-le-ssl.conf    shop-le-ssl.conf  test-le-ssl.conf      tomsk-le-ssl.conf
ekzorchik.ru.conf         baikal-le-ssl.conf  khabarovsk.conf         old.ekzorchik.ru.conf         rostov.conf         spb.conf          testshop.conf         volgograd-le-ssl.conf
ekzorchik.ru-le-ssl.conf  chel.conf           khabarovsk-le-ssl.conf  old.ekzorchik.ru-le-ssl.conf  rostov-le-ssl.conf  spb-le-ssl.conf   testshop-le-ssl.conf
atris.conf            chel-le-ssl.conf    krasnodar.conf          perm-le-ssl.conf          shop.conf           test.conf         tomsk.conf
ekzorchik@ekzorchik:~$

и действительно была настройка:

В .htaccess-файлах обоих сайтов:

#php_value mbstring.func_overload 2

А вот в conf-файлах сайтов есть отличия:

ekzorchik.ru-le-ssl.conf:

php_admin_value    mbstring.func_overload 2

shop-le-ssl.conf:

#php_admin_value        mbstring.func_overload 2

Что и требовалось доказать.

ekzorchik@ekzorchik:~$ sudo nano /etc/apache2/sites-available/ekzorchik.ru-le-ssl.conf
закомментировал
                #php_admin_value        mbstring.func_overload 2

ekzorchik@ekzorchik:~$ sudo nano /etc/apache2/sites-available/shop-le-ssl.conf
было закомментировано
                #php_admin_value        mbstring.func_overload 2
ekzorchik@ekzorchik:~$ sudo systemctl reload apache2

Шаг №4: Как шпаргалка самому себе вкладываю в текущую заметку, как пример содержимое сайтов на доступ к 80 порту и редирект на 443 порт:

ekzorchik@ekzorchik:~$ cat /etc/apache2/sites-enabled/ekzorchik.ru.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerName      ekzorchik.ru
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/ekzorchik

<Directory /var/www/html/ekzorchik>
  AllowOverride All
</Directory>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/ekzorchik-error.log
        CustomLog ${APACHE_LOG_DIR}/ekzorchik-access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf


RewriteEngine on
RewriteCond %{SERVER_NAME} =ekzorchik.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

ekzorchik@ekzorchik:~$ cat /etc/apache2/sites-enabled/ekzorchik.ru
ekzorchik.ru.conf         ekzorchik.ru-le-ssl.conf
ekzorchik@ekzorchik:~$ cat /etc/apache2/sites-enabled/ekzorchik.ru-le-ssl.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerName      ekzorchik.ru
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/ekzorchik_2023

<Directory /var/www/html/ekzorchik_2023>
  AllowOverride All
</Directory>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/ekzorchik-error.log
        CustomLog ${APACHE_LOG_DIR}/ekzorchik-access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf

        php_value       default_charset utf-8
        #php_admin_value        mbstring.func_overload 2

RewriteEngine on
# Some rewrite rules in this file were disabled on your HTTPS site,
# because they have the potential to create redirection loops.

# RewriteCond %{SERVER_NAME} =ekzorchik.ekzorchik.ru
# RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]


Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/ekzorchik.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ekzorchik.ru/privkey.pem
</VirtualHost>
</IfModule>
ekzorchik@ekzorchik:~$

Шаг №5: После этого снова через Webпанель администрирования Bitrix запускаю проверку системы и ошибок нет:

URL: https://IP&DNS/bitrix/admin/#authorize (на главном сайте) — авторизовался — Настройки - Инструменты - Проверка системы — вкладка "Тестирование конфигурации" и нажимаю "Начать тестирование"

На заметку: По окончании расследования файл info.php следует удалить, следует ограничивать выдаваемую информацию всем и каждому направо налево.

Шаг №6: Меня спросили зачем я делал данную настройку, я ответил покуда подрядчики имеют полный доступ к серверу с меня что-то спрашивать уж извольте, т.к я эти настройки не вносил. Изначально требование к виртуальному серверу значилось, я разворачиваю операционную систему, настраиваю доступы, ставлю обновления, настраиваю защиту и передаю подрядчикам. Прошло время, и подрядчики съехали с темы поддержания инфраструктуры сервера или не сошлись в цене поддержки, а теперь спрашивать с меня — это уж слишком. Я это озвучил, озвучиваю и в целом, хотят спрашивать, подрядчики делают только в рамках каталог где CMS система Bitrix: /var/www/html и не более.

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

На этом заметка для самого себя успешно сформирована, с уважением автор блога Олло Александр aka ekzorchik.