Mbstring func overload битрикс как изменить

Рассмотрим общий порядок конвертации сайта с кодировки cp1251 в UTF-8. Внимание! Прежде чем приступить к конвертации сайта обязательно сделайте резервную копию...

Просмотров: 24362
Дата последнего изменения: 23.05.2022

Сложность урока:

4 уровень — сложно, требуется сосредоточиться, внимание деталям и точному следованию инструкции.

5

Недоступно в лицензиях:

Ограничений нет

Рассмотрим общий порядок конвертации сайта с кодировки cp1251 в UTF-8.

Внимание! Прежде чем приступить к конвертации сайта обязательно сделайте резервную копию сайта и базы данных.

Настоятельно рекомендуем

предварительно потренироваться выполнять конвертацию на отдельной копии сайта. Конвертация сайта сложная операция и каждый случай индивидуален. При её выполнении высока вероятность потерять важные данные, если что-то пойдет не так!

  Общий порядок действий

Редактировать файлы и вносить правки на сервере можно подключаясь по SSH.

Общий порядок действий:

  1. В региональных настройках Настройки > Настройки продукта > Языковые параметры > Региональные настройки сменитe кодировку на UTF-8 для всех языков;
  2. mbstring.func_overload до версии 20.100.0 модуля main

  3. Установите в файле настроек php.ini значение default_charset = "utf8";

    Расположение файла настроек php.ini можно посмотреть заранее в административном разделе на странице

    Настройки PHP

    Страница Настройки PHP (Настройки > Инструменты > Диагностика > Настройки PHP) служит для отображения информации о текущих настройках PHP.

    Подробнее в курсе Администратор. Базовый




    (Loaded Configuration File) или с помощью PHP функции phpinfo().

    Если сайт размещен на Хостинге, возможно понадобится обратиться к хостинг провайдеру для внесения этих настроек.

  4. Добавьте в /bitrix/php_interface/dbconn.php
    define("BX_UTF", true);
    

    В этом же файле удалите строки, относящиеся к кодировке cp1251:

    setlocale(LC_ALL, 'ru_RU.CP1251');
    setlocale(LC_NUMERIC, 'C');
    mb_internal_encoding("Windows-1251");
    
  5. Установите значение ‘value’ => true для utf_mode в файле /bitrix/.settings.php:
    utf_mode =>
        array(
            'value' => true,
            'readonly' => true,
        ),
    
  6. Перекодируйте всю базу данных в UTF-8. Вероятнее всего придётся обращаться за помощью к администратору сервера.
  7. Установите в файле /bitrix/php_interface/after_connect.php
    $DB->Query("SET NAMES 'utf8'");
    $DB->Query('SET collation_connection = "utf8_unicode_ci"');
    

    и в файле /bitrix/php_interface/after_connect_d7.php

    $this->queryExecute("SET NAMES 'utf8'");
    $this->queryExecute('SET collation_connection = "utf8_unicode_ci"');
    //До версии main 22.0 вместо $this использовалась переменная $connection.
  8. Установите в /.htaccess:
    php_value default_charset utf-8
    
  9. Перекодируйте все файлы сайта в UTF-8.
  10. Сбросьте весь кеш;
  11. Выйдите и зайдите заново на сайт чтобы обновить данные сессии.

  База данных

Для конвертации базы (БД) потребуется сменить кодировку самой базы, всех её таблиц и всех текстовых полей таблиц. НЕ выполняйте конвертацию БД из административной части. Используйте для этого другие доступные средства.

В простом случае (без сериализованных данных) перекодировать базу данных и все таблицы можно следующим образом:

  • Изменить кодировку самой базы данных сайта:
    ALTER DATABASE имя_базы_данных charset=utf8;
    
  • Изменить кодировку соединения с базой данных:
    SET NAMES 'utf8'
    
    ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  • Выполним запрос, который позволит найти все таблицы базы данных и сформировать запрос на смену кодировки для каждой:
    SELECT CONCAT('ALTER   TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;') as sqlcode
    FROM `information_schema`.`TABLES` t
    WHERE 1
    AND t.`TABLE_SCHEMA` = 'имя_базы_данных'
    ORDER BY 1
    ;
    
  • В качестве ответа получим список запросов вида:
    ALTER TABLE `имя_базы_данных`.`имя_таблицы` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    
  • Выполните все запросы. База данных и таблицы перекодированы.

Внимание: Если в базе данных хранятся сериализованные данные, то приведенный выше метод конвертации для них не подойдет. Используйте специальные методы / средства для конвертации таких данных.

  Файлы

В простом варианте, когда все файлы сайта в кодировке cp1251, перекодировать их в UTF-8 можно выполнив такую команду в корневой папке сайта (для UNIX систем):

// переходим в корневую папку сайта. Например:
cd /var/www/html/ 

// выполняем команду для перекодирования файлов
find . -name '*.php' -type f -exec iconv -fcp1251 -tutf8 -o /tmp/tmp_file {} ; -exec mv /tmp/tmp_file {} ;

Важно: Способ не подходит для сайтов на нескольких языках, т.к. в таком случае в структуре будут присутствовать файлы в различных кодировках.

Использование внешних программ или конвертация файлов вручную

Часто при использовании внешних программ для конвертации в файлы добавляется специальная последовательность символов, так называемый BOM. Эти символы должны находиться только вначале файла, а поскольку итоговая страница является составной из нескольких php файлов, то спецсимволы появляются в теле страницы. Если делаете конвертацию файлов вручную — не сохраняйте с BOM!

  Советы и ссылки

Основные шаги по конвертации сайта выполнены. Если после конвертации возникают ошибки при открытии сайта, включите режим отладки 'debug' => true в файле /bitrix/.settings.php. Это позволит видеть где и какие возникают ошибки.

Обязательно выполните

проверку системы

Форма Проверка системы (Настройки > Инструменты > Проверка системы) предназначена для всесторонней проверки соответствия параметров системы, на которой осуществляется функционирование проекта, минимальным и рекомендуемым техническим требованиям продукта.

Подробнее в курсе Администратор. Базовый.




. По результатам проверки будет видно, что ещё нужно исправить. Пользуйтесь подсказками под знаками вопроса справа.

Если возникли ошибки с таблицами базы данных (последняя строка проверки), можно посмотреть

логи в журнале




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

Список ссылок по теме:

  • Конвертация сайта из cp1251 в UTF-8 (блог разработчиков);
  • Выбор кодировки сайта;
  • Настройка параметров ядра;
  • Проверка системы в курсе Администратор. Базовый.

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

Удалить настройку PHP mbstring.func_overload

Что это значит

Функционал mbstring.func_overload объявлен устаревшим, начиная с PHP 7.2.0, и его использование крайне не рекомендовано.

В связи с этим в продуктах «1С-Битрикс» прекращается поддержка данного параметра PHP. Вы не сможете установить обновления продукта, пока вы не удалите этот параметр в конфигурации PHP вашего сервера.

Что делать

Перейдите в административном меню в раздел Настройки → Инструменты → Диагностика → Настройки PHP:

Настройки PHP

В открывшем окне найдите в настройках PHP параметр mbstring.func_overload:

mbstring.func_overload=2

Если его значение не равно 0, то вам нужно удалить этот параметр в конфигурации PHP сервера или выставить равным 0 (mbstring.func_overload=0).

Чтобы выполнить эти рекомендации, вам нужно обратиться к вашему системному администратору или хостинг-провайдеру.

Если вы используете виртуальную машину VMBitrix, просто обновите ее до последней версии: выберите в меню виртмашины пункт 2. Manage localhost — 6. Update server и согласитесь на обновление.

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

То же самое можно сделать и вручную в VMBitrix:

  • удалите в файле /etc/php.d/bitrixenv.ini строку mbstring.func_overload=2
  • сделайте рестарт Apache: systemctl restart httpd.service

Внимание! Если в вашем Битрикс24 или сайте используются решения от сторонних разработчиков, может потребоваться доработка этих решений для соответствия новым требованиям.

Спасибо, помогло!

Спасибо :)

Необязательно:

Оставить отзыв о статье

Уточните, пожалуйста, почему:

Это не то, что я ищу

Очень сложно и непонятно

Оставить отзыв о статье

В заметке собраны некоторые проблемы с Bitrix Framework и VMBitrix, а так же приведены способы их решения.

Важно: описанные ниже действия потенциально опасные и могут привести к неработоспособности вашего сайта, выполняйте их осознанно на свой страх и риск.

Прежде чем затронуть функциональность сайта не забудьте сделать бэкап.

Как уменьшить размер БД

Если база данных 1С-Битрикс разрослась и это не связно с количеством информации или товаров на сайте, то возможно базу раздувают записи Журнала событий, статистика модуля Веб-аналитика или другие таблицы.

Разросшуюся базу данных можно подчистить. Однако если 1С-Битрикс продолжает необоснованно расти, возможно проблема глубже и выходит за рамки данной статьи.

Как очистить статистику Веб-аналитики

В админке перейдите в Настройки > Настройки продукта > Настройки модулей > Веб-аналитика. В разделе Очистка статистики укажите до какой даты выполнить очистку (если оставить незаполненным, то будет очищена вся статистика) и нажмите кнопку Очистить.

Как удалить записи из Журнала событий

В настройках главного модуля, на вкладке Журнал событий, уменьшите количество дней для хранения событий. Чем меньше дней хранятся записи, тем меньше весит таблица. Дополнительно можно исключить типы событий, которые не нужно записывать в таблицу. База уменьшится не сразу, Битрикс потребуется некоторое время на удаление старых событий.

Более быстрый и радикальный вариант – очистить таблицу b_event_log через SQL-запрос. При этом будут удалены все события!

Если таблица не очень большая, выполните запрос через админку: Настройки > Инструменты > SQL запрос (или на странице you.site/bitrix/admin/sql.php).

DELETE FROM `b_event_log`;

Если таблица огромная (больше 4Гб), то скорее всего запрос не выполнится и отвалится по тайм-ауту. В таком случае выполнить запрос лучше из консоли MySQL на сервере, примерно так:

mysql -h you_sql_server -u root -p

USE you_db_name;

DELETE FROM `b_event_log`;

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

К слову, поврежденную таблицу можно восстановить командой.

REPAIR table b_event_log;

Как очистить разросшуюся таблицу b_cache_tag

Перейдите в Настройки продукта > Автокэширование > Очистка файлов кэша.

Затем аналогично действиям описанным в предыдущем разделе выполните:

TRUNCATE TABLE b_cache_tag

Где изменить mbstring.internal_encoding и mbstring.func_overload

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

Вариант 1 (для Apache и PHP ниже версии 7.3). Установить необходимые значения в файле .htaccess.

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

Вариант 2 (так же для PHP ниже версии 7.3). Добавить параметры в файле настройки виртуальных хостов. Для Apache это:

  • /etc/apache2/sites-available/сайт.conf (если использется BitrixVM)
  • /etc/apache2/httpd.conf
  • /etc/apache2/apache2.conf
<VirtualHost *:80>
  ServerAdmin ...
  ServerName ...
  ServerAlias ...
  DocumentRoot "/путь/к/папке/сайта"

  php_admin_value mbstring.func_overload 2
  php_admin_value mbstring.internal_encoding UTF-8
</VirtualHost>

Вариант 3 (для всех версий PHP). Установить необходимые значения в php.ini, для BitrixVM /etc/php.d/z_bx_custom.ini. После внесения изменений нужно перезагрузить сервер.

Начиная с версии PHP 7.3  значение mbstring.func_overload нельзя установить индивидуально для конкретного сайта, ни через .htaccess, ни через конфигурационный файл Apache. Единственный вариант – установить значение mbstring.func_overload непосредственно в файле php.ini. Однако php.ini общий и если на сервере несколько сайтов, то они могут перестать работать, например если часть сайтов работает в кодировке UTF-8, а часть на cp1251.

Смена кодировки Битрикс на UTF8

Для PHP установите следующие параметры.

mbstring.func_overload 2
mbstring.internal_encoding UTF-8

Удалите модули Поиск без сохранения таблиц и Веб-аналитика (без сохранения таблиц, но с сохранением шаблонов сообщений).

Из словаря транслита в модуле Форум (Сервисы > Форумы > Фильтр нецензурных слов > Словарь транслита) удалить букву ё (ID = 7).

В настройках сайта изменить кодировку с windows-1251 на utf-8.

В файле /bitrix/php_interface/dbconn.php установить для константы BX_UTF значение true.

define("BX_UTF", true);

Скачать с сайта 1С-Битрикс скрипт convert_utf8.php, поместить его в корень сайта, затем запустить и дождаться полного выполнения.

Если база данных большая, конвертация может занять долгое время или вообще закончится неудачей. В таком случае попробуйте конвертировать базу данных вручную. Для этого в админке сайта на странице SQL-запрос выполните запрос:

SELECT CONCAT('ALTER   TABLE `', t.`TABLE_SCHEMA`, '`.`', t.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;') as

sqlcode

FROM `information_schema`.`TABLES` t

WHERE 1

AND t.`TABLE_SCHEMA` = 'database_name' ORDER BY 1

Где database_name – имя базы данных сайта.

В результате будет выведен новый запрос, который нужно скопировать и выполнить. По завершении таблицы базы данных будут переведены в кодировку UTF-8.

Далее пропишите в /bitrix/php_interface/after_connect.php:

$DB->Query("SET NAMES 'utf8'");
$DB->Query('SET collation_connection = "utf8_unicode_ci"');

В файл /bitrix/php_interface/after_connect_d7.php:

$connection->queryExecute("SET NAMES 'utf8'");
$connection->queryExecute('SET collation_connection = "utf8_unicode_ci"'); 

В /bitrix/.settings.php:

return array (
  'utf_mode' => 
  array (
    'value' => true,
    'readonly' => true,
  ),

Затем полностью очистите кэш сайта.

Удалите более ненужный скрипт convert_utf8.php.

Заново установите модуль Поиск и сделайте переиндексацию.

Установите модуль Веб-аналитика (если использовали ранее).

Если возникли проблемы с сериализованными массивами возможно сможет помочь скрипт.

Дополнительные сведения на dev.1c-bitrix.ru и тема на форуме.

Если выкидывает из админки Битрикс

После ввода логина и пароля снова открывается страница авторизации

Первая причина – изменение прав доступа к файлам и папкам, точнее к папке хранения сессии пользователей. Такая проблема может наблюдается после смены хостинг-провайдера. В этом случае стоит проверить права записи в папку и откорректировать их.

Вторая причина – переполнения дискового пространства сервера. Очистите место на диске, удалите лишние бэкапы или докупите место (если это возможно) у своего хостинг-провайдера.

Периодически выкидывает из админки

Такое может происходить если в качестве DNS-сервера используется Cloudflare или аналог, например для использования SSL-сертификатов или защиты от DDoS. В этом случае, сессию обрывает механизм защиты Битрикс. Cloudflare подменяет ip-адрес пользователя и админка пресекает доступ. Для исправления внесите в dbconn.php следующие правки:

$_SERVER["REMOTE_ADDR"] = $_SERVER['HTTP_CF_CONNECTING_IP'];

Однако после окончания работы в админке, лучше вернуть исходные настройки dbconn.php, ради безопастности.

Другой причиной вылетов, может быть наличие лишних символов или пробелов в файлах dbconn.php, after_connect.php, after_connect_d7.php, особенно в начале или в конце файла. Исправьте и проблема должна решиться.

Не отправляется почта

Если перестала отправляться почта на Яндекс

После многих лет пользования Яндекс.Почтой для отправки сообщений от интернет-магазина на Битрикс, почта перестала работать. В логах ошибка:

Sender or From header address rejected: not owned by authorized user

Одна из причин по которой это может произойти: адрес почты, под которой авторизируется сервер, отличается от почты (поле «From», «От кого») указанной на сайте.

Раньше такая схема вполне себе работала на Яндекс. В Битрикс можно было указать почту, например my@company.ru, при том, что сервер отправлял ее с ящика info@yandex.ru. Получатель письма все равно в отправителях видел почту my@company.ru.

Но начиная с 2020 года, Яндекс постепенно запрещает отправку писем если поле «From» отличается от адреса пользователя, с данными которого производится авторизация на сервере.

Решений несколько:

  • указать на сайте почту, под которой происходит авторизация на сервере, что в случае использования почты на Яндекс возможно будет не очень солидным;
  • поднять свой почтовый сервер и настроить отправку с него;
  • арендовать недорогой хостинг, который позволяет отправлять письма даже если поле «From» отличается от адреса пользователя, с данными которого производится авторизация на сервере. Например REG.RU предоставляет такую возможность, подойдет даже самый простой тариф дешевле 100 руб. в мес.

Свою проблему решил, выбрав третий вариант. Рекомендую хостинги:

  • REG.RU (промокод на скидку для заказа домена или хостинга: 2229-CC0A-AC4D-C31B)
  • Hostland (месяц бесплатно)

Логирование почты

Если проблему с почтой решить не получается, можно сделать логировщик для отлова писем с bxmail, который поможет понять проблему.

Добавьте в dbconn.php следующие строки.

// определим константу LOG_FILENAME, в которой зададим путь к лог-файлу
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/mylog-123.txt");

//дебаг почты
function custom_mail($to, $subject, $message, $additional_headers='', $additional_parameters='')
{
   AddMessage2Log(
            'To: '.$to.PHP_EOL.
            'Subject: '.$subject.PHP_EOL.
            'Message: '.$message.PHP_EOL.
            'Headers: '.$additional_headers.PHP_EOL.
            'Params: '.$additional_parameters.PHP_EOL
         );
   if ($additional_parameters!='') {
      return @mail($to, $subject, $message, $additional_headers, $additional_parameters);
   } else {
       return @mail($to, $subject, $message, $additional_headers);
   }
}

Теперь, при отправке письма в лог будут писаться сообщения.

Проблемы с отправкой уведомления о заполнении веб-форм

Для начала проверьте, настройки почтового события заполнения формы и его шаблона. Откройте Панель управления > Настройки > Настройки продукта > Почтовые события > Типы событий и выберите интересующее событие.

На вкладке Тип события, убедитесь, что отмечены галочки возле используемых на сайте кодов языка.

Тип почтового события Битрикс

На вкладке Шаблоны должен задан хотя бы один шаблон. Перейдите в шаблон кликнув на его идентификаторе или откройте его из списка шаблонов: Панель управления > Настройки > Настройки продукта > Почтовые события > Почтовые шаблоны.

В настройках выбранного почтового шаблона, должна стоять галочка Активен, и выбран хотя бы один сайт. Также должны быть корректно заполнены поля От кого и Кому (значения по-умолчанию #DEFAULT_EMAIL_FROM# и #EMAIL# соответственно).

Редактирование почтового шаблона

Если указанные настройки соответствуют истине, попробуйте в настройках модуля веб-формы отключить флаг Использовать упрощенный режим. В настройках формы, на вкладке Дополнительно убедитесь, что проставлен флаг привязки к почтовому шаблону.

Если не помогло, перейдите в Настройки > Инструменты > SQL-запрос и выполните следующий запрос:

select * from b_event where event_name like '%form%' order by date_insert desc

Найдите событие заполнения формы, поле SUCCESS_EXEC:

  • Y – сообщение отправлено, дальнейший его путь сможет определить администратор хостинга или почтового сервера;
  • N – сообщение не отправлено. Проверьте файл /bitrix/php_interface/dbconn.php на наличие констант BX_CRONTAB и BX_CRONTAB_SUPPORT, уберите их если они присутствуют, затем выполните SQL-запрос еще раз. Если и после этого SUCCESS_EXEC равен N, попробуйте очистить кэш /bitrix/managed_cache/.
  • F – функция mail вернула False при отправке. Смотрите логи. Возможно почта на хостинге (сервере) не настроена или настроена некорректно, решается хостером или администратором сервера. Другая причина, почтовый сервер не поддерживает формат письма. Попробуйте изменить настройки отправки в Главном модуле: убрать/поставить галку Дублировать email адрес в заголовке, убрать/поставить галку Конвертировать 8-битные заголовки.
  • 0 (ноль) – не корректные настройки типов событий или в почтовом шаблоне. Проверьте настройки как указано в начале.

Ошибка БД после переноса на другой хостинг

Одна из типичных ошибок после переноса на другой хостинг, например такая:

2016-05-25 15:33:22 - Host: host:80 - UNCAUGHT_EXCEPTION - [Error]
Call to undefined function BitrixMainDBmysql_connect() (0)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#0: BitrixMainDBMysqlConnection->connectInternal()...

Может быть вызвана сменой СУБД с MySQL на MySQLi или наоборот.

Чтобы исправить нужно перенастроить подключение к БД, отдельно для старого и нового ядра.

В случае с MySQLi

В файле bitrixphp_interfacedbconn.php

define("BX_USE_MYSQLI", true);

В файле bitrix.settings.php поменять класс соединения с базой на MysqliConnection.

'connections' =>
    array (
        'value' =>
        array (
            'default' =>
                array (
                    'className' => '\Bitrix\Main\DB\MysqliConnection',
                    'host' => 'localhost',
                    'database' => 'database',
                    'login' => 'login',
                    'password' => '*****',
                ),
        ),
    ),

В случае с MySQL соответственно

В файле bitrixphp_interfacedbconn.php

define("BX_USE_MYSQLI", false)

В файле bitrix.settings.php поменять класс соединения с базой на MysqlConnection.

'connections' =>
    array (
        'value' =>
            array (
            'default' =>
                array (
                    'className' => '\Bitrix\Main\DB\MysqlConnection',
...

После изменения настроек, сайт должен заработать.

Ошибка: innodb_strict_mode=ON, требуется OFF

Ошибка может появиться при проверке системы. Для исправления воспользуйтесь одним из двух вариантов.

Вариант 1. Через конфигурационные файлы Битрикс.

В файл /bitrix/php_interface/after_connect.php добавьте сторку:

$DB→Query("SET innodb_strict_mode='OFF'");

В файл /bitrix/php_interface/after_connect_d7.php

$connection→queryExecute("SET innodb_strict_mode='OFF'");

Вариант 2. Через конфигурационные файлы MySQL.

Откройте конфигурационный файл MySQL (три возможных варианта расположения):

  • /etc/my.cnf
  • /etc/alternatives/my.cnf
  • /etc/bitrix-my.cnf

Добавить строку в блоке # InnoDB parameters

innodb_strict_mode = OFF

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

Ошибка: Переменная sql_mode в MySQL должна быть пустая

Ошибка может появиться при проверке системы, когда параметр sql_mode задаёт режим работы MySQL, несовместимый с Битрикс.

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

В файл /bitrix/php_interface/after_connect_d7.php

$connection = BitrixMainApplication::getConnection();
$connection->queryExecute("SET sql_mode=''");

В файл /bitrix/php_interface/after_connect.php

$DB->Query("SET sql_mode=''");

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

Недоступны файлы для чтения и записи

Если при проверке доступа к файлам 1С-Битрикс (Настройки – Инструменты – Проверка сайта – Проверка доступа) появляется ошибка: Недоступны для чтения или записи (показаны первые 10), это значит на сервере неверно настроены права для сайта.

Bitrix Files Access Denied

Причины могут быть разные, чаще это происходит если какие то файлы создавались, распаковывались или перемещались пользователем, к файлам которого 1С-Битрикс не имеет доступа.

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

Следующая команда сделает владельцем файлов и папок пользователя bitrix в указанном каталоге (у вас он может быть другим). Как правило это /home/bitrix/www/ для основного сайта и/или /home/bitrix/ext_www/папка_сайта/ для дополнительных.

chown -R bitrix:bitrix /home/bitrix/www/

Ключ -R означает рекурсивно, т.е. включая вложенные папки и файлы.

А следующие команды выставят правильные права на доступ к файлам и папкам.

cd /home/bitrix/www
find . -type d -exec chmod 775 {} ;
find . -type f -exec chmod 664 {} ;
find . -type d -exec chown bitrix:bitrix {} ;
find . -type f -exec chown bitrix:bitrix {} ;

Затем выполните проверку повторно, ошибка должна исчезнуть.

На этом всё. Но вы можете поддержать проект. Даже небольшая сумма поможет нам писать больше полезных статей.

Если статья помогла или понравилась, пожалуйста поделитесь ей в соцсетях.

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

Немного предыстории.

Битрикс всегда требовал настройку на сервере в виде:
php_value mbstring.func_overload = 2
php_value mbstring.internal_encoding = UTF-8

Эта устаревшая настройка, которая до сих пор тянулась из версии к версии. Из-за нее требовалось использовать специально настроенный сервер под Битрикс. Если вы используете виртуальную машину Bitrix VM, тут никаких проблем не было. Но если вы использовали виртуальный хостинг, то большинство таких хостингов не давали менять эту настройку и делали специальные тарифы для сайтов на 1С-Битрикс (которые, замечу, были дороже).
Сейчас же, если вы хотите запустить небольшой сайт, не требующий больших ресурсов, вы можете использовать любой виртуальный хостинг.

Но что же делать тем, кто увидел эту ошибку? А особенно тем, у кого после обновления поломалась часть функционала сайта или облачной CRM?

Как починить

Все просто. Если вы используете виртуальную машину Битрикса, вам нужно ее обновить до версии 7.4.4 и выше. В этих версиях удалена устаревшая опция mbstring.func_overload. После обновления все отлично заработает.
Если у вас несколько сайтов и один из них на непродленной лицензии Битрикса, который нельзя обновить, то только для него отдельно нужно будет прописать старую настройку mbstring.func_overload = 2.В этой статье написано как это сделать.

Если вы используете простой виртуальный хостинг, то обратитесь к техподдержке хостинга с просьбой убрать mbstring.func_overload.

Решение для Timeweb

Многие пишут о проблеме с обновлением на хостинге TimeWeb. На нем можно отключать и включать параметр mbstring.func_overload прямо в .htaccess. И при отключении ее там, получают ошибку, подробнее можете ознакомиться ниже в комментариях.

Несколько пользователей подтвердили решение проблемы:
Заходим в админке в Настройки -> Проактивная защита -> Проактивный фильтр и на вкладке исключения добавляем в исключения /bitrix/*

Как вариант, можете просто отключить проактивную защиту, обновиться и потом ее включить.

Сайт на 1С-Битрикс, работает в кодировке UTF-8. В httpd.conf для Apache выставлена конфигурация виртуального сервера с параметром mbstring.func_overload=2 через php_admin_value. Как известно, теперь в .htaccess нельзя менять параметр mbstring.func_overload. На сайте используется библиотечка FPDF для генерации pdf файлов, которая требует установки значения перегрузки в 0. С данной библиотекой давно работаю и все скрипты ориентированы на неё.
Как можно было бы для отдельной директории сайта указать другое значение перегрузки? или может возможно в .htaccess указать другой файл конфига php.ini?
Прочитал много форумов по данной тематике, но нигде вразумительного решения не нашёл. И еще в добавок: у меня проксирующая связка nginx+apache. Сервер vds. ОС Ubuntu server 15. PHP версии 5.5.9-1ubuntu4.14.
Просьба посоветовать как действовать. Не хотелось бы библиотечку менять)


  • Вопрос задан

    более трёх лет назад

  • 38337 просмотров

Хех….
Порылся в Гугле и всё таки нашёл решения и ответ на свой же вопрос: добавить в конфиг Apache следующие строки:

<Directory /var/www/path/to/dir>
php_admin_value mbstring.func_overload 0
</Directory>

Заработало. Спасибо, вопрос можно закрывать.

Пригласить эксперта

Можно в глобальной конфиге php прописать mbstring.func_overload=0, а для сайта в конфиге Apache (если не nginx) прописать php_admin_value mbstring.func_overload 2 и в вашем приложении исполнять код для которого нужна настройка mbstring.func_overload=0 из под php при помощи функции exec();

Мы так сделали сборку одного pdf-файла из нескольких pdf-файлов на Битрикс с использованием библиотеки mPDF, которая в свою очеред использует FPDF.

Вообще начиная с версии PHP 5.3 менять в .htaccess mbstring.func_overload действительно нельзя. Но на хостинге ТаймВеба почему-то работает. Как они этого добились — загадка.

Вы можете использовать
php_admin_value mbstring.func_overload 0
или
php_admin_value mbstring.func_overload 2
соответственно
но в директиве VirtualHost (желательно перед настройками директорий)
в htaccess с какой-то версии не должно работать.


  • Показать ещё
    Загружается…

10 февр. 2023, в 00:15

1000 руб./в час

09 февр. 2023, в 22:06

500 руб./за проект

09 февр. 2023, в 22:01

50000 руб./за проект

Минуточку внимания

Обновлено 30.05.2018

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

Добрый день уважаемые читатели блога, сегодня я продолжу вам рассказывать про траблшутинг одной популярной CMS системы под названием 1С Битрикс, один мой подписчик задал мне вопрос, как исправить ситуацию с ошибкой:  Внимание! Сайт работал в одно байтовой кодировке, а конфигурация сервера рассчитана на кодировку UTF-8. Установите php_value mbstring.func_overload=0 или php_value mbstring.internal_encoding=ISO-8859-1. Давайте разбираться откуда растут ноги у данной проблемы.

Решаем ошибку восстановления

Расскажу предысторию, один мой подписчик переносил сайт клиента с одного хостинга на другой, он установил 1C битрикс на своем VPS. Все вроде бы стандартно, но когда он попытался восстановить битрикс из резервной копии, то получил ошибку:

Внимание! Сайт работал в одно байтовой кодировке, а конфигурация сервера рассчитана на кодировку UTF-8. Установите php_value mbstring.func_overload=0 или php_value mbstring.internal_encoding=ISO-8859-1.

Появляется она на третьем шаге, где нужно восстанавливать базу данных.

сайт работал в одно байтовой кодировке-2

Если понять из-за чего это происходит, то тут все просто. 1С Битрикс Веб окружение работает с ресурсами на кодировке UTF-8, а так как у клиента сайт древний и был создан на старой версии 1С Битрикс, он тупо не устанавливал обновления. В итоге у него ресурс работал в одно байтовой кодировке символов.

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

В консоли сервера пишем:

vi /home/bitrix/www/.htaccess

В файле требуется за комментировать некоторые строки строки и кое-что дописать.

Комментируем:
#php_value mbstring.func_overload 2
#php_value mbstring.internal_encoding UTF-8
дописываем

php_value mbstring.func_overload 0
php_value mbstring.internal_encoding cp1251

В некоторых случаях придется править файл /etc/httpd/bx/conf/default.conf и дописать в него так же
php_value mbstring.func_overload 0
php_value mbstring.internal_encoding cp1251
или
php_admin_value mbstring.internal_encoding latin вместо cp1251

Сама Bitrix вам настоятельно рекомендует использовать кодировку ISO-8859-1, но так как в России исторически сложилось, что используют cp1251, то ставим ее. Не забудьте перезапустить сервер Apache

Если не правильно выставить параметр mbstring.func_overload, то вы вполне можете ловить ошибки с кодировкой и при авторизации. Параметр mbstring.func_overload, можно объявлять ив корневом .htaccess, просто добавьте строку:

php_value mbstring.func_overload 0

Тут  параметра mbstring.func_overload имеет значение 0, обращаю ваше пристальное внимание, что перед 0 идет пробел, но есть некое но, в PHP 5,2 и выше, параметр mbstring.func_overload из файла .htaccess просто не учитывается и вам придется править файл /etc/php.d/mbstring.in, вот пример:

vi /etc/php.d/mbstring.ini
; Enable mbstring extension module
extension=mbstring.so
mbstring.func_overload=0

Если же на вашем сайте используется кодировка UTF-8, то укажите для mbstring.func_overload значение 2. Чтобы проверить изменения, вам потребуется зайти в панель управления Bitrix > Настройки > Инструменты > Настройки PHP

сайт работал в одно байтовой кодировке-3

Понравилась статья? Поделить с друзьями:
  • Mbr1 error что делать
  • Mbr1 error windows 10
  • Mbr1 error press any key to boot from floppy
  • Mbr поврежден как исправить
  • Mbr или gpt при установке windows 10 как исправить