В процессе установки или работы с сайтом на хостинге или виртуальной машине, сконфигурированной самостоятельно или установленной из образов сервера хостинг провайдера, могут возникнуть ошибки, связанные с наличием и конфигурацией модулей php, правами доступа, базой данных и настройкой некоторых модулей Битрикс.
Для диагностики основных ошибок в работе сайта используйте штатный функционал Битрикс проверка системы, Настройки -> Инструменты -> Проверка системы -> Начать тестирование
Общая работа сайта
Наличие необходимых модулей php
Проверяется доступность требуемых расширений для полноценной работы продукта. В случае ошибки выводится список модулей, которые недоступны.
Для решения проблемы необходимо обратиться к хостеру, а для локальной установки самостоятельно установить требуемые расширения на основе документации на сайте php.net
Обязательные параметры PHP
Проверяются критические значения параметров, определяемых в файле настроек php.ini. В случае ошибки выводится список параметров, которые настроены неправильно. Подробную информацию по каждому параметру можно найти на сайте php.net.
Битрикс веб-окружение - это оптимально сконфигурированная серверная среда для работы продуктов "1С-Битрикс24" и "1С-Битрикс управление сайтом".
Модули веб-сервера
Модуль Apache mod_security подобно модулю php suhosin призван защищать сайт от атак хакеров, но на практике он чаще препятствует нормальной работе сайта. Рекомендуется его отключить, вместо него использовать модуль проактивной защиты 1С-Битрикс.
Значения переменных сервера
Проверяются значения переменных, определяемых веб-сервером.
Значение HTTP_HOST берется на основе имени текущего виртуального хоста (домена). Невалидный домен приводит к тому, что некоторые браузеры (например, Internet Explorer 6) отказываются сохранять для него cookie, как следствие - не сохраняется авторизация.
Сохранение сессии
Проверяется возможность хранить данные на сервере используя механизм сессий. Эта базовая возможность необходима для сохранения авторизации между хитами.
Сессии могут не работать, если их поддержка не установлена, в php.ini неправильно указана папка для хранения сессий или она не доступна на запись.
Параметры настройки UTF (mbstring и константа BX_UTF)
Модуль mbstring необходим для работы с разными языками.
Кодировка сайта должна быть указана в параметре default_charset, например:
default_charset=utf-8
Если параметры не соответствуют требуемым, то в разных местах будут появляться совершенно непредсказуемые ошибки: частично обрезанный текст, неработающий импорт xml, система обновлений и т.д.
Служебные скрипты в корне сайта
Иногда пользователи забывают удалять установочные скрипты после восстановления резервной копии или установки продукта (restore.php, bitrixsetup.php). Если пользователь проигнорировал ошибку автоматического удаления, оставленные служебные скрипты могут стать причиной взлома сайта, нужно их обязательно удалить вручную.
Работа с сокетами
Осуществляется сетевое подключение с веб-сервера к самому себе. Это необходимо чтобы проверить работу сетевых функций, а также требуется для ряда последующих тестов.
А значит, если этот базовый тест не отработал, то дальнейшие тесты, где требуется создание независимого php процесса, не могут быть произведены.
Обычно проблема возникает, если подключение запрещено фаерволом, доступ к административной части запрещен по IP или для входа на сайт требуется HTTP/NTLM авторизация. На этапе тестирования необходимо отключить эти ограничения.
Выполнение агентов на cron
Чтобы перенести работу непериодических агентов (и передачу почты) на cron, необходимо в /bitrix/php_interface/dbconn.php установить константу:
define('BX_CRONTAB_SUPPORT', true);
После этого на хитах будут выполняться только периодические агенты. Затем в cron поставить задание на ежеминутный запуск скрипта /var/www/bitrix/modules/main/tools/cron_events.php.
(замените /var/www на свой путь к корню сайта).
Внутри скрипта определена константа BX_CRONTAB, которая является индикатором того, что скрипт работает из cron и приводит к выполнению только непериодических агентов. Если эта константа ошибочно определена в dbconn.php, периодические агенты полностью перестают выполняться.
Дополнительные функции
Лишний вывод в файлах конфигурации
Проверяется вывод текста в файлах конфигурации: dbconn.php и init.php.
Даже пробел или перенос строки может приводить к тому, что с включенной компрессией страница не сможет распаковаться на стороне браузера и будет нечитаема.
Также могут возникнуть проблемы с авторизацией или в работе CAPTCHA.
Сохранение сессии без UserAgent
Тестируется сохранение сессий, но при этом не передается HTTP заголовок идентификации браузера User-Agent.
Так могут работать внешние по отношению к браузеру приложения: множественная загрузка файлов, загрузка фото, клиенты WebDav, 1С и пр.
Причиной проблемы часто бывает неправильная настройка php модуля suhosin.
Настройки сайтов
Проверяются базовые настройки многосайтовости. Если для сайтов указан путь к корневой папке (а это необходимо делать только для сайтов на разных доменах), в каждой такой папке должна быть символьная ссылка на папку bitrix, доступную на запись.
На одной установке продукта все сайты должны работать либо в кодировке UTF-8, либо в однобайтовой кодировке.
Размер стека и pcre.recursion_limit
Если параметр pcre.recursion_limit превышает системный размер стека (обычно 8 Мб), то PHP падает с ошибкой Segmentation fault при выполнении сложных регулярных выражений.
Если нет возможности увеличить системный размер стека, необходимо уменьшить параметр pcre.recursion_limit. В этом случае PHP падать не будет, но обработка строк будет работать не всегда правильно: могут появляться пустые сообщения на форуме.
Загрузка файла
Осуществляется попытка подключиться к веб-серверу и передать бинарные данные в виде файла. На стороне сервера сравниваются переданные данные с эталоном. Проблема может быть в том, что передача файлов запрещена в php.ini, недоступна временная папка на запись или /bitrix/tmp.
Возможна ситуация, когда в качестве веб-сервера используется русский Apache, который перекодирует двоичные данные.
Для решения проблем с загрузкой файлов необходимо обратиться к хостеру или, для локальной установки, самостоятельно настроить сервер для загрузки файлов.
Загрузка файла больше 4Мб
Загружается бинарный файл размером более 4Мб. Если при этом отработал предыдущий тест загрузки файла, возможно, сработало ограничение php.ini post_max_size или upload_max_filesize. Уточнить значения можно в phpinfo (Настройки - Инструменты - Диагностика - Настройки PHP).
Возможен вариант недостатка места на диске.
Загрузка файла через php://input
Передаются бинарные данные через тело POST запроса. В ряде случаев на стороне сервера происходит искажение этих данных, в результате не работает интеграция с 1С и загрузка фотографий через flash загрузчик.
Передача POST запроса с большим числом параметров
Передача POST запроса с большим числом параметров. Если на сервере установлено защитное ПО, например suhosin, данные могут блокироваться. Обычно в этом случае не работает сохранение элемента инфоблока.
Отправка почты
Осуществляется передача тестового письма на почтовый адрес hosting_test@bitrixsoft.com через стандартную php функцию mail. Чтобы максимально приблизить тест к реальной работе почты, заведен служебный ящик.
В качестве тестового текста письма передается исходный код скрипта проверки сайта.
Никакие пользовательские данные не передаются!
Обратите внимание, что тест не проверяет доставку письма в почтовый ящик. Более того, нельзя протестировать доставку почты на другие почтовые сервера.
Если время отправки письма больше секунды, это может значительно затормозить работу сайта. Обратитесь к хостеру с просьбой настроить отложенную отправку почты (через спулер) или включите передачу почты (и работу агентов) через cron. Для этого в dbconn.php надо добавить константу:
define('BX_CRONTAB_SUPPORT', true);
Затем на cron добавьте ежеминутное выполнение скрипта php /var/www/bitrix/modules/main/tools/cron_events.php.
(замените /var/www на свой путь к корню сайта).
Но если функция mail() в данном случае не отработала, с большой уверенностью можно утверждать, что передача почты стандартным способом php на сервере невозможна.
Если хостер предоставляет альтернативные способы отправки почты с сайта, их можно использовать через функцию custom_mail. Определите эту функцию в файле /bitrix/php_interface/init.php, она будет использоваться вместо встроенной mail функции с тем же набором параметров.
Отправка почтового сообщения больше 64Кб
При отправке большого сообщения текст предыдущего письма (исходный код скрипта проверки сайта) повторяется 10 раз. Кроме того, тема письма разрывается на две строки и добавляется передача скрытой копии на адрес noreply@bitrixsoft.com.
На некорректно настроенных серверах такие письма могут не отправляться.
Для решения проблем с загрузкой файлов необходимо обратиться к хостеру или, для локальной установки, самостоятельно настроить сервер для передачи почты.
Проверка на наличие неотправленных сообщений
Таблица в базе данных B_EVENT хранит очередь отправки почты с сайта. Там же регистрируется результат передачи писем. Если какие-то письма с сайта не были отправлены, возможно, проблема в адресе получателя, параметрах почтового шаблона или в работе почты на сервере в целом.
Внутреннее перенаправление (функция LocalRedirect)
Административная часть 1С-Битрикс работает так, что после всех сохранений форм происходит перенаправление на исходную страницу. Это позволяет избежать повторной передачи данных при обновлении страницы. Чтобы корректно отработало перенаправление, веб-сервер должен корректно определять целый ряд переменных. Также должна быть возможность переопределить заголовки HTTP ответа.
Если какие-то серверные переменные были переопределены в dbconn.php, данные об этом передаются в тест. Т.е. перенаправление работает в тех же условиях, что и в реальной ситуации на сайте.
Фактическое ограничение памяти
Тест создает отдельный php процесс, который генерирует в памяти переменную заданного размера. Путем ряда последовательных измерений определяется размер памяти, доступный процессу php.
Основной параметр ограничения памяти в php.ini – это memory_limit. Но доверять значению параметра нельзя, т.к. на хостингах могут быть установлены дополнительные ограничения памяти.
Обратите внимание, тест пытается увеличить значение memory_limit используя код:
ini_set("memory_limit", "512M")
Если текущее значение меньше, установите указанную строку в /bitrix/php_interface/dbconn.php.
Работа с файлами кеша
Иногда возникает ситуация, когда процесс php может создать файл с расширением tmp в папке кеша, но не может переименовать в php. Проблема может наблюдаться на веб-серверах, работающих под Windows. Связана с неправильной настройкой прав пользователя, под которым работает веб-сервер.
Доступ к серверу обновлений
Осуществляется тестовое подключение к серверу обновлений на основе настроек главного модуля. Если соединение не удалось, установка обновлений, а также активация пробной версии будут недоступны.
Причина может быть в неправильной настройке прокси сервера, ограничениях фаервола или сетевых настройках сервера.
HTTP авторизация
Используя заголовки HTTP запроса передаются данные авторизации, затем осуществляется попытка их определить, используя переменную сервера REMOTE_USER (или REDIRECT_REMOTE_USER). HTTP авторизация необходима для интеграции с 1С и другого функционала.
Если php работает в режиме CGI/FastCGI (этот вопрос можно уточнить у хостера), для Apache требуется наличие модуля mod_rewrite и правило в .htaccess:
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
Если есть возможность, используйте режим работы php как модуль Apache.
Создание и запуск файла
Когда php работает в режиме CGI/FastCGI на Unix системе, для корректной работы скриптов требуются определенные системные права для запуска этих скриптов.
Если тест не отрабатывает, узнайте необходимые права для скриптов и установите в dbconn.php для констант BX_FILE_PERMISSIONS и BX_DIR_PERMISSIONS.
Если есть возможность, используйте режим работы php как модуль Apache.
Функция getimagesize для swf
Для вставки Flash ролика в визуальном редакторе необходимо определить его размер. Для этого используется стандартная php функция getimagesize. Также требуется наличие расширения Zlib. Функция может работать некорректно для сжатых Flash роликов, если расширение Zlib установлено в качестве модуля. Необходимо, чтобы оно было скомпилировано статически.
Для решения проблемы обратитесь к хостеру.
Тестирование базы данных
Версия MySQL-сервера
Известны версии MySQL с ошибками, препятствующими нормальной работе сайта:
5.0.41 - некорректно работает метод EXISTS, поиск работает неправильно;
5.1.34 - шаг auto_increment по умолчанию равен 2, требуется 1.
Обновите MySQL, если у вас установлена одна их этих версий.
Время на БД и веб-сервере
Сравнивается системное время базы данных и веб-сервера. Рассинхронизация может быть, когда они установлены на разные физические машины, но чаще всего в результате неправильной установки часового пояса.
Установить часовой пояс php можно в /bitrix/php_interface/dbconn.php, например:
date_default_timezone_set("Etc/GMT-3");
Для базы данных добавьте в /bitrix/php_interface/after_connect_d7.php:
$connection = Bitrix\Main\Application::getConnection();
$connection->queryExecute("SET LOCAL time_zone='".date('P')."'");
В файл /bitrix/php_interface/after_connect.php
$DB->Query("SET LOCAL time_zone='".date('P')."'");
Вместо Etc/GMT-3 укажите свой часовой пояс из списка: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
Режим работы MySQL
Параметр sql_mode задаёт режим работы MySQL. Может принимать значения, несовместимые с 1С-Битрикс. Чтобы установить режим работы по умолчанию, добавьте в /bitrix/php_interface/after_connect_d7.php:
$connection = Bitrix\Main\Application::getConnection();
$connection->queryExecute("SET sql_mode=''");
$connection->queryExecute("SET innodb_strict_mode=0");
Обратите внимание, что в Mysql 8.0.26 и новее для настройки параметров соединения может потребоваться привилегия пользователя БД SESSION_VARIABLES_ADMIN. Если текущих привилегий недостаточно, то необходимо обратиться к администратору БД или настроить параметры в файле конфигурации Mysql.
Кодировка соединения
Проверяется кодировка и сравнение, используемые при передаче данных на MySQL сервер.
Для сайта в кодировке utf8 необходимо чтобы кодировка была utf8, а сравнение utf8_unicode_ci. Если сайт работает в кодировке cp1251, соединение должно использовать эту же кодировку.
Чтобы изменить кодировку соединения, установите в /bitrix/php_interface/after_connect_d7.php код (пример для utf8):
$connection = Bitrix\Main\Application::getConnection();
$connection->queryExecute('SET NAMES "utf8"');
Чтобы скорректировать сравнение, установите после указания кодировки код:
$connection->queryExecute('SET collation_connection = "utf8_unicode_ci"');
В файл /bitrix/php_interface/after_connect.php
$DB->Query("SET NAMES 'utf8'");
$DB->Query("SET collation_connection = 'utf8_unicode_ci'");
Внимание! После того, как установлены новые значения, убедитесь, что данные на сайте отображаются корректно.
Кодировка базы данных
Проверяется соответствие кодировки и сравнения базы данных кодировке и сравнению соединения. Эти значения MySQL использует для создания новых таблиц.
Ошибка может быть исправлена автоматически, для этого у пользователя, под которым работает сайт, должны быть права на изменение базы данных (ALTER DATABASE).
Формат хранения таблиц в БД
Для корректной работы с базой данных требуется:
1. Система хранения InnoDB, обладающая высокой надёжностью и поддержкой транзакций.
2. Формат хранения строк в таблицах не должен быть REDUNDANT или COMPACT т.к. в этом случае для кодировки UTF-8 не смогут быть созданы некоторые индексы из-за ограничений на длину хранения строк в индексах.
Кодировки таблиц в БД
Кодировка всех таблиц (и полей) должна совпадать с кодировкой базы данных. Если какие-то таблицы имеют неправильную кодировку, необходимо исправить их вручную через SQL запросы.
Сравнение всех таблиц также должно соответствовать сравнению базы, если кодировки установлены правильно, а сравнения отличаются, ошибка может быть исправлена автоматически.
Внимание! Перед изменением кодировок таблиц и полей сделайте полную резервную копию базы данных.
Структура базы данных
Установочные файлы модулей содержат информацию о структуре таблиц, с которыми они работают. При обновлении модулей меняется структура таблиц и установочные файлы.
Если файлы модуля не соответствуют фактической структуре данных, в работе продукта возникнут проблемы.
Некоторые индексы были добавлены в дистрибутивах, но не выходили в обновлениях, т.к. создание индексов может занимать много времени и приводить к сбоям системы обновлений.
Проверка системы диагностирует установленные модули и может автоматически создать недостающие индексы и поля, а также модифицировать поля таблиц таким образом, чтобы гарантировать целостность данных. Если меняется тип поля, то необходимо анализировать вручную данные журнала.
Проверить хостинг официальным скриптом Битрикс
Если вам нужна консультация по интернет-маркетингу или помощь в работе с Битрикс, вы можете ознакомиться с ценами на услуги и консультации и оставить заявку.
Или оставить свой вопрос в комментарии.