Найти в Дзене

Виртуальная машина Битрикс, исправление ошибки, связанной с кодировкой и прочие танцы

Я не самый крутой разраб битрикса, поэтому те сложности, с которыми я столкнулся, отняли у меня почти целый день на "танцы с бубном". Пишу эту статью для таких же, как и я. Всё, что тут перечислено, можно найти в интернете. Но удобно, когда все в одном месте. Это та статья, которую я хотел бы прочитать перед началом работы. :)

Ок, скачал последнюю сборку VM битрикса, версия видна на картинке. Все, вроде, норм.

Очень удобно сразу "прибить" к ней фиксированный IP. Это делается просто: залогинился в консоли, и они тебе сразу предлагают: 2. Configure localhost settings Нажимаем 2 и видим 3. Configure network interface manually Дальше все понятно.

---

Начал разворачивать бэкап сайта. Бац! Первый сюрприз. Бэкап еще не развернулся, а я уже читаю сообщение:

Сайт работал в кодировке UTF-8. Конфигурация сервера не соответствует требованиям, установите mbstring.func_overload=2 и mbstring.internal_encoding=UTF-8.

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

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

/home/bitrix/www/bitrix/php_interface/dbconn.php

и закомментить строчку

//define("BX_UTF", true);

Это виртуальная машина, к ней можно достучаться по SFTP. Качаем бесплатный WinSCP, заходим, комментим, нажимаем кнопочку "попробовать снова" и о, чудо!, бэкап развернулся. Но радоваться рано, ошибка осталась.

Во-первых: ошибка "Не далось обнаружить код вызова компонента"

-2

Во-вторых:

-3

то прочитаем вот такое радостное известие.

Ошибка! Сайт работает в UTF кодировке, настройки mbstring: mbstring.func_overload=0 mbstring.internal_encoding= требуется: mbstring.func_overload=2 mbstring.internal_encoding=utf-8

-4

Роемся в интернете, и на разных форумах узнаём, что на версиях PHP до 7 можно было переопределить кодировку в файле

/home/bitrix/www/.htaccess

добавив туда такие строчки:

<IfModule mod_php5.c>

php_flag allow_call_time_pass_reference 1

php_flag session.use_trans_sid off

php_value display_errors off

php_value mbstring.func_overload 2

php_value mbstring.internal_encoding utf-8

</IfModule>

Но в последних версиях это не работает. Смотрим версию нашего PHP, открываем браузером страницу:

http://10.0.0.3/bitrix/admin/phpinfo.php

и видим, что у нас версия 7+. Ок, роем интернет и находим советы, что можно изменить кодировку в настройках PHP радикально, т.е. это будет влиять на все сайты, запущенные на этой ВМ. Но я не буду кучу сайтов на этой машине пилить, если надо будет еще один сайт, я для него отдельную ВМ могу сделать, не утянет, места на харде много.

Ок, начинаю искать php.ini и обнаруживаю, что WinSCP не показывает скрытые файлы. Это исправляется тут

-5

Ок, файлы видно, идем сюда /etc/php.ini

WinSCP умеет редактировать, открываем и ищем секцию [mbstring] ближе к концу. Находим там закоментированные строчки ;mbstring.internal_encoding = и ;mbstring.func_overload = 0

и красиво под ними дописываем то, что нам надо:

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

Перезагружаем ВМ и проверяем:

-6

ошибка пропала.

Если знаете более простой способ - напишите, плиз, в комментариях.

-----------

И тут выясняется, что к базе mysql доступ снаружи закрыт. Ну, т.е., ВМ позиционируется как среда для разработки, но на всякий случай всё там закрыто, чтобы неопытный разраб не добрался.

Нужно будет набрать в консоли следующие команды:

mysql - запустить mysql консоль

use mysql - выбрать базу

select user, host from user; - получаем список пользователей. Если у пользователя в поле host стоит %, то ему можно подключаться удаленно.

update user set host='%' where user = 'bitrix0'; - разрешаем ему

flush privileges; - применяем настройки

ура, к базе подключились, но выясняется, что не видна моя база sitemanager. Набираем

select user, host, db from mysql.db; и видим строчку

bitrix0 | localhost | sitemanager

update mysql.db set host='%' where user='bitrix0'; - тоже разрешаем

flush privileges; - применяем настройки

quit - выходим из консоли mysql

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

---------

Кстати, пока были в консоли, если в файле Файлы и папки - bitrix - php_interface - dbconn.php пароль примерно такой

$DBPassword = "gth$6&J&J45y_h5tg_t7u8m%4_%T^$%b";

а вы хотите более человеческий, то можно было набрать строчку

update user set password=PASSWORD('123456') where user='bitrix0';

и в файлике dbconn.php тоже его прописать. А еще этот же пароль записан в файле Файлы и папки - bitrix - .settings.php Не забываем про него тоже.