Как найти cms ошибки

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

Наиболее распространённые ошибки и примеры их устранения.

Белый экран смерти

Белый экран смерти [WSOD], вместо сайта отображается белый экран.

Один из вариантов решения

Включите отображение ошибок, для чего добавьте в файл wp-config.php следующую строку:

define('WP_DEBUG', true);

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

Один из вариантов решения

Деактивируйте все установленные плагины, а затем включайте по одному. Если консоль управления сайтом недоступна, откройте через FTP папку wp-content/plugins и переименуйте папку, например, в wp-content/plugins_old.

Один из вариантов решения

Увеличьте количество памяти. Для чего откройте файл wp-config.php и добавьте следующую строку:

define('WP_MEMORY_LIMIT', '32M');

Значение может быть любым: 64, 128 и так далее, но помните, в любом случае вы не сможете использовать памяти больше, чем предоставляется тарифным планом хостинга.

Один из вариантов решения

Ошибка в активной теме, переключитесь на стандартную тему Twenty Seventeen; если админпанель сайта недоступна, то через FTP измените папку с темой Twenty Seventeen на название активной темы. Имя активной темы также придется на время поменять.

Internal server error

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

Один из вариантов решения

Через FTP переименуйте файл .htaccess в .htaccess_old. Перезагрузите страницу сайта и, если он заработал, сбросьте постоянные ссылки на панели управления WordPress через «Настройки» -> «Постоянные ссылки», чтобы создать новый файл .htaccess.

Ошибка установления подключения к базе данных

Один из вариантов решения

Откройте файл wp-config.php и убедитесь, что следующие данные базы данных верны: имя базы, имя пользователя, пароль и хост.

Ошибка 404

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

Один из вариантов решения

Ошибки вордпресс

Перейдите в «Настройки» -> «Постоянные ссылки» на панели управления WordPress и просто нажмите кнопку «Сохранить изменения». Это обновит ваши настройки постоянных ссылок и очистит правила перезаписи. Если это не работает, вам необходимо обновить файл .htaccess вручную. Если вы не знакомы с редактированием файлов .htaccess, обратитесь к вашему хост-провайдеру и попросите его включить mod_rewrite.

Режим обслуживания после обновления

Ошибка, возникающая после обновления, с сообщением «Коротко недоступно для планового обслуживания. Вернитесь через минуту».
Как правило, причина в неудаленном файле .maintenance, удалите его из корневого раздела сайта через FTP или менеджер файлов.

Не получается войти в панель управления (консоль)

Возможные причины

  • Вы забыли пароль, и у вас нет доступа к электронной почте для восстановления. Откройте в phpMyAdmin базу вашего сайта, найдите таблицу wp_uers, откройте ее, в поле «Password» выберите значение MD5 и установите новый.
  • Возможно, входу мешает плагин, отключайте по очереди плагины, как это было описано выше.
  • Ошибка скриптов: включите режим отладки, как это было описано выше.
  • Сайт взломан. В этом случае можно попробовать удалить вредоносные скрипты самостоятельно либо обратится к специалистам.

Переадресация на странице входа в панель управления (консоль)

При попытке зайти на страницы /wp-login, /wp-admin происходит редирект на главную страницу сайта.

Возможные причины

  • Неправильные значения полей URL сайта и домашнего URL в таблице wp-config
  • Ненастроенные постоянные ссылки
  • Ошибки в .htaccess

Варианты решения

Очистите файлы cookie и кэш браузера и убедитесь, что в вашем браузере включен прием cookie.

Перезапустите браузер и попробуйте войти снова.

Деактивировать все плагины (см. предыдущие пункты).

Использовать тему по умолчанию (см. предыдущие пункты).

Удалите файл .htaccess из корневого каталога вашего сайта. (см. предыдущие пункты).

Добавьте в файл wp-config.php и добавьте эти строки (не забудьте заменить example.com собственным URL и добавить www. если вы используете этот префикс).

define(fWP_HOME*, fhttp://example.comf); define(1WP_SITEURL1, 1 http://example.com*);

Белый текст или отсутствующие иконки в редакторе

Возможные причины: проблема с объединенными файлами JavaScript, TinyMCE или плагином.

Очистить кеш браузера.

Заменить скрипты TinyMCE. Это можно сделать, заменив папку /wp-includes/js/tinymce/ новой копией.

Если ничего из вышеперечисленного не работает, откройте файл wp-config.php и добавьте следующую строку в самом верху после открывающего тега PHP.

define('CONCATENATE SCRIPTS', false);

 Если ничего не помогает

Включите запись ошибок в лог сервера, как правило, подобные ошибки уже неоднократно встречались на множестве сайтов, погуглите, и в 99,9% случаев решение будет найдено.

Orchard — это бесплатная система управления контентом с открытым исходным кодом, являющаяся частью галереи ASP.NET-проектов с открытым исходным кодом некоммерческого фонда Outercurve Foundation.

Picture 4

Для нас, разработчиков статического анализатора PVS-Studio, это еще одна возможность проверить интересный проект, рассказать людям (и разработчикам в том числе) о найденных ошибках и, в свою очередь, еще раз протестировать наш анализатор. Сегодня речь пойдёт об ошибках, найденных в проекте Orchard CMS.

О проекте Orchard CMS

Описание проекта взято с сайта.

Проект Orchard CMS был анонсирован в марте 2010 года с выпуском первой бета-версии проекта. Создатели Orchard CMS поставили перед собой цель построить систему управления контентом на новом успешном фреймворке ASP.NET MVC, которая соответствовала бы следующим требованиям:

  1. Открытый бесплатный и свободный проект, зависящий от запросов сообщества;
  2. Быстрый движок с модульной архитектурой и всеми необходимыми средствами CMS;
  3. Общедоступная онлайн-галерея модулей, тем и других компонентов расширения от сообщества;
  4. Высокое качество типографики, внимание к компоновке и разметке страниц;
  5. Упор на создание удобной и функциональной панели администрирования;
  6. Быстрое развертывание системы на рабочем месте и легкая публикация на сервер.

Первоначально Orchard и его исходные коды лицензировались на основе свободной лицензии MS-PL, но, с выходом первой публичной версии, проект сменил лицензию на более простую и распространенную New BSD License.

Четыре предварительные версии были выпущены в течение года, пока Orchard CMS не достигла версии 1.0. Все это время разработчики держали связь с сообществом, принимая пожелания, учитывая комментарии и исправляя найденные ошибки. Для публикации исходных кодов и сбора отзывов пользователей проект был запущен на портале проектов с открытым исходным кодом codeplex.com по адресу orchard.codeplex.com.

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

Кроме страницы для разработчиков был запущен и официальный сайт проекта по адресу http://www.orchardproject.net/, который сегодня содержит всю необходимую для работы с Orchard CMS сопроводительную документацию. Кроме того, на официальном сайте размещена галерея модулей и других компонентов, созданных сообществом для расширения функционала Orchard CMS.

Результаты проверки

В проверке участвовали все исходные файлы (3739 штук) с расширением .cs. В общей сложности они содержали 214 564 строк кода.

Picture 5

По итогам проверки было получено 137 предупреждений. Если рассматривать более детально, то на первом (высоком) уровне было получено 39 предупреждений. 28 из них явно указывали на проблемные места или ошибки. На втором уровне (среднем) было получено 60 предупреждений. По моему субъективному мнению, 31 предупреждение верно указывало на места с ошибками или опечатками. Третий (низкий) уровень предупреждений мы рассматривать не будем, так как это предупреждения с низким уровнем достоверности и, как правило, среди них очень много ложных срабатываний или присутствуют предупреждения, которые не актуальны для многих типов проектов.

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

Так же, насколько я понимаю, разработчики Orchard CMS уже используют в работе над проектом ReSharper. Я делаю этот вывод на основе:

» https://github.com/OrchardCMS/Orchard-Harvest-Website/blob/master/src/Orchard.4.5.resharper

Нам не нравится идея сравнивать ReSharper и PVS-Studio, так как это инструменты разного типа. Но, как видите, использование ReSharper не мешает нам находить в коде реальные ошибки.

Бесконечная рекурсия

Picture 9

V3110 Possible infinite recursion inside ‘ReturnTypeCustomAttributes’ property. ContentItemAlteration.cs 121

public override ICustomAttributeProvider 
  ReturnTypeCustomAttributes 
{
  get { return ReturnTypeCustomAttributes; }
}

Открывает список ошибок у нас довольно распространённая опечатка, которая, при получении значения у свойства ReturnTypeCustomAttributes, приведет к возникновению бесконечной рекурсии и, как следствие, к выбросу исключения StackOverflow, что в свою очередь приведет к «падению» программы. Вероятнее всего программист хотел вернуть из свойства одноименное поле у объекта _dynamicMethod, тогда корректный вариант выглядел бы так:

public override ICustomAttributeProvider 
  ReturnTypeCustomAttributes
{
  get { return _dynamicMethod.ReturnTypeCustomAttributes; }
}

А вот еще одна опечатка, которая приведет к возникновению бесконечной рекурсии, и, как следствие, выбросу исключения StackOverflow.

V3110 Possible infinite recursion inside ‘IsDefined’ method. ContentItemAlteration.cs 101

public override bool IsDefined(Type attributeType, bool inherit) {
  return IsDefined(attributeType, inherit);
}

В данном случае метод IsDefined вызывает сам себя. Думаю, тут программист также хотел вызвать одноименный метод у объекта _dynamicMethod. Тогда корректный вариант выглядел бы так:

public override bool IsDefined(Type attributeType, bool inherit) {
  return _dynamicMethod.IsDefined(attributeType, inherit);
}

Когда в минуте не всегда 60 секунд

Picture 8

V3118 Seconds component of TimeSpan is used, which does not represent full time interval. Possibly ‘TotalSeconds’ value was intended instead. AssetUploader.cs 182

void IBackgroundTask.Sweep() 
{
  ....
  // Don't flood the database with progress updates; 
  // Limit it to every 5 seconds.
  if ((_clock.UtcNow - lastUpdateUtc).Seconds >= 5) 
  {
    ....
  }
}

Еще одна довольно распространённая опечатка, возникающая из-за не совсем очевидной реализации типа TimeSpan. Из комментария видно, что данный метод должен блокировать запрос к базе данных, если с момента предыдущего запроса прошло менее 5 секунд. Но программист, видимо, не знал, что свойство Seconds у объекта типа TimeSpan возвращает не суммарное количество секунд на данном временном промежутке, а остаточное количество секунд.

К примеру, если у нас есть временной промежуток длинной 1 минута 4 секунды, то вызов метода Seconds вернет нам всего 4 секунды. Если необходимо вернуть суммарное количество секунд — необходимо использовать свойство TotalSeconds. Для данного примера это будет 64 секунды.

Корректный вариант мог бы выглядеть так:

void IBackgroundTask.Sweep() 
{
  ....
  // Don't flood the database with progress updates; 
  // Limit it to every 5 seconds.
  if ((_clock.UtcNow - lastUpdateUtc).TotalSeconds >= 5) // <=
  {
    ....
  }
}

Пропущено значение перечисления при проверке через switch

Picture 1

V3002 The switch statement does not cover all values of the ‘TypeCode’ enum: Byte. InfosetFieldIndexingHandler.cs 65

public enum TypeCode
{
  Empty = 0,
  Object = 1,
  DBNull = 2,
  Boolean = 3,
  Char = 4,
  SByte = 5,
  Byte = 6,
  Int16 = 7,
  UInt16 = 8,
  Int32 = 9,
  UInt32 = 10,
  Int64 = 11,
  UInt64 = 12,
  Single = 13,
  Double = 14,
  Decimal = 15,
  DateTime = 16,
  String = 18
}

public InfosetFieldIndexingHandler(....)
{
  ....
  var typeCode = Type.GetTypeCode(t);
  switch (typeCode) {
    case TypeCode.Empty:
    case TypeCode.Object:
    case TypeCode.DBNull:
    case TypeCode.String:
    case TypeCode.Char:
      ....
      break;
    case TypeCode.Boolean:
      ....
      break;
    case TypeCode.SByte:
    case TypeCode.Int16:
    case TypeCode.UInt16:
    case TypeCode.Int32:
    case TypeCode.UInt32:
    case TypeCode.Int64:
    case TypeCode.UInt64:
      ....
      break;
    case TypeCode.Single:
    case TypeCode.Double:
    case TypeCode.Decimal:
      ....
      break;
    case TypeCode.DateTime:
      ....
      break;
  }
}

Данный участок кода довольно громоздкий, поэтому тяжело сразу заметить ошибку. В данном случае имеется перечисление TypeCode и метод InfosetFieldIndexingHandler, в котором проверяется, к какому из элементов перечисления принадлежит переменная typeCode. В данном случае программист, писавший этот код, вероятнее всего забыл об одном небольшом элементе по имени Byte, но добавил его собрата SByte. Из-за этой ошибки обработка типа Byte будет проигнорирована. Избежать этой ошибки было бы проще, если бы программист добавил блок default, в котором выбрасывается исключение о необработанном элементе перечисления.

Отсутствие обработки возвращаемого значения из метода Except

Picture 2

V3010 The return value of function ‘Except’ is required to be utilized. AdminController.cs 140

public ActionResult Preview(string themeId, string returnUrl) {
  ....
  if (_extensionManager.AvailableExtensions()
    ....
  } else {
    var alreadyEnabledFeatures = GetEnabledFeatures();
    ....
    alreadyEnabledFeatures.Except(new[] { themeId }); // <=
    TempData[AlreadyEnabledFeatures] = alreadyEnabledFeatures;
  }
  ....
}

Как известно, метод Except исключает из коллекции, для которой он был вызван, элементы другой коллекции. Но программист, видимо, не знал, либо не обратил внимание на то, что результат работы данного метода возвращает новую коллекцию. Корректный вариант мог бы выглядеть так:

alreadyEnabledFeatures = 
  alreadyEnabledFeatures.Except(new[] { themeId });

Метод Substring не принимает отрицательное значение

V3057 The ‘Substring’ function could receive the ‘-1’ value while non-negative value is expected. Inspect the second argument. ContentIdentity.cs 139

.... GetIdentityKeyValue(....) {
  ....
  var indexOfEquals = identityEntry.IndexOf("=");
  if (indexOfEquals < 0) return null;

  var key = identityEntry.Substring(1, indexOfEquals - 1);

  ....
}

Обратите внимание на проверку переменной indexOfEquals. Проверка защищает от случая, если значение переменной отрицательное. Но нет защиты от нулевого значения.

Если символ ‘=’ находится в самом начале, то возникнет исключение, так как второй аргумент метода Substring() будет иметь отрицательное значение -1.

Были найдены также похожие ошибки, отдельно рассматривать которые нет смысла:

  • V3057 The ‘Substring’ function could receive the ‘-1’ value while non-negative value is expected. Inspect the second argument. CommandParametersParser.cs 18
  • V3057 The ‘Substring’ function could receive the ‘-1’ value while non-negative value is expected. Inspect the second argument. CommandStep.cs 73

Приоритет операций в выражении

Picture 10

V3022 Expression ‘localPart.Name + «.» + localField.Name + «.» + storageName’ is always not null. ContentFieldProperties.cs 56

localPart.Name + "." + localField.Name + "." + storageName ?? ""

В данном случае программист, вероятнее всего, думал, что оператор ?? проверит на null только переменную storageName, и если это так, то вместо нее к выражению будет добавлена пустая строка. Но поскольку оператор + обладает более высоким приоритетом, то на null будет проверено всё выражение. Стоит так же отметить, что если к строке прибавить null, то мы получим ту же строку без изменений. Таким образом, в данном случае можно без опаски выбросить данную проверку как излишнюю и вводящую в заблуждение. Исправленный вариант мог бы выглядеть так:

localPart.Name + "." + localField.Name + "." + storageName

Анализатор также нашел еще одну аналогичную ошибку:

V3022 Expression 'localPart.Name + "." + localField.Name + "." + storageName' is always not null. ContentFieldsSortCriteria.cs 53

Проверка всегда ложная

V3022 Expression ‘i == 4’ is always false. WebHost.cs 162

public void Clean() {
  // Try to delete temporary files for up to ~1.2 seconds.
  for (int i = 0; i < 4; i++) {
    Log("Waiting 300msec before trying to delete ....");
    Thread.Sleep(300);

    if (TryDeleteTempFiles(i == 4)) {
      Log("Successfully deleted all ....");
      break;
    }
  }
}

Видно, что итератор цикла i всегда будет иметь значение в пределе от 0 до 3, но, несмотря на это, программист внутри тела цикла смело проверяет, имеет ли итератор значение 4. Данная проверка никогда не выполнится, но, не зная истинной цели данного участка кода, мне тяжело сказать насколько опасна эта ошибка в масштабах проекта.

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

  • V3022 Expression ‘result == null’ is always false. ContentFieldDriver.cs 175
  • V3022 Expression ‘String.IsNullOrWhiteSpace(url)’ is always true. GalleryController.cs 93
  • V3022 Expression ‘_smtpSettings.Host != null’ is always true. SmtpMessageChannel.cs 143
  • V3022 Expression ‘loop’ is always false. IndexingTaskExecutor.cs 270
  • V3022 Expression ‘Convert.ToString(Shape.Value)’ is always not null. EditorShapes.cs 372
  • V3022 Expression ‘ModelState.IsValid’ is always true. RecycleBinController.cs 81
  • V3022 Expression ‘previousXml != null’ is always true. ContentDefinitionEventHandler.cs 104
  • V3022 Expression ‘previousXml != null’ is always true. ContentDefinitionEventHandler.cs 134
  • V3022 Expression ‘layoutId != null’ is always true. ProjectionElementDriver.cs 120

Использование члена класса перед проверкой объекта на null

V3027 The variable ‘x.Container’ was utilized in the logical expression before it was verified against null in the same logical expression. ContainerService.cs 130

query.Where(x => 
           (x.Container.Id == containerId || 
            x.Container == null) && 
            ids.Contains(x.Id));

Как видно из кода выше (нас интересует 2 и 3 строки), программист сначала проверяет обращение к свойству Id у контейнера, и только потом проверяет контейнер на null. Правильным вариантом было бы сначала проверить на null, и только потом обращаться к элементам контейнера.

Следующий случай аналогичен предыдущему. Попробуйте найти здесь ошибку сами.

V3095 The ‘Delegate’ object was used before it was verified against null. Check lines: 37, 40. SerializableDelegate.cs 37

void ISerializable.GetObjectData(
  SerializationInfo info, 
  StreamingContext context)
{
  info.AddValue("delegateType", Delegate.GetType());
  ....
  if (.... && Delegate != null)
  {
    ....
  }                
}

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

  • V3095 The ‘Delegate’ object was used before it was verified against null. Check lines: 37, 40. SerializableDelegate.cs 37
  • V3095 The ‘widget’ object was used before it was verified against null. Check lines: 81, 93. TagsWidgetCommands.cs 81

Заключение

Picture 3

В данном проекте были найдены и другие ошибки, опечатки, недочёты. Но мне они не показались интересными настолько, чтобы описывать их в статье. Разработчики Orchard CMS легко смогут найти все недочёты, воспользовавшись инструментом PVS-Studio. Вы так же можете поискать ошибки в своих проектах воспользовавшись предложенным выше статическим анализатором.

Хочу напомнить, что основная польза от статического анализа заключается в регулярном его использовании. Скачать и разово проверить код — это несерьезно. Например, предупреждения компилятора программисты смотрят регулярно, а не включают их раз в 3 года перед одним из релизов. При регулярном использовании, статический анализатор сэкономит массу времени на поиск опечаток и ошибок.

P.S. Для тех, кто пропустил новость, хочу напомнить, что PVS-Studio теперь умеет интегрироваться с SonarQube. Статья на эту тему: «Контролируем качество кода с помощью платформы SonarQube».

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Ivan Kishchenko. Analysis of bugs in Orchard CMS.

Ошибка подключения к устройству – решаем проблему

На этой странице рассмотрим проблему с распространенной программой General CMS. Она используется для удаленнго просмотра камер видеонаблюдения, а статью, как установить ее вы можете прочитать здесь: General CMS. Установить программу на ПК

Иногда пользователи получают ошибку при использовании программы CMS, а именно – Ошибка подключения к устройству или устройство не найдено. Устройство в данном случае – это видеорегистратор или IP-камера. Подключаемся мы к нему удаленно по локальному IP адресу или по облачному серийному номеру. Вот как выглядит ошибка в диалоговом окне программы.

General CMS ошибка соединения

Ошибка соединения в диалоговом окне программы CMS

Пропингуйте устройство командой PING

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

Команда PING поможет выяснить, на связи ли ваше устройство. Введите в командной строке: “PING” и напишите IP адрес устройства.

Пример удачного пинга камеры наблюдения

Пример удачного пинга камеры наблюдения

Почему возникает ошибка соединения “Устройство не может быть обнаружено”

Проблема заключается в следующем: ПО пытается соединиться с нашим устройством (камера или регистратор) по заданному ей адресу, а подключения не происходит. Буквально все данные есть в сообщении, это IP адрес или CloudID. Причин может быть несколько:

  • Глюк программы General CMS
  • Наша камера или видеорегистратор не работают, потому что отключено электропитание
  • На нашем компьютере, с которого мы работаем, отсутствует подключение к сети
  • У целевого устройства изменился IP адрес
  • Устройство зависло или вышло из строя
  • Рассмотрим подробнее про эти причины и посоветуем, как их устранить или продиагностировать.

    Глюк программы General CMS

    У программы General CMS всех версий присутствует одна особенность работы и про неё нужно знать. При долгой работе в фоновом режиме ПО перестает передавать данные и подключаться к устройствам и выдает ошибку. Проверить это совсем просто. Необходимо перезагрузить компьютер и снова выполнить подключение.

    General CMS перезапуск программы

    При ошибке подключения попробуйте перезапустить программу General CMS

    Для верности можно попробовать перезагрузить еще и ПК.

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

    Устройство не работает, потому что отключено электропитание

    На нашей практике очень часто бывало, что устройство видеонаблюдения просто было отключено из розетки или выпал штекер питания из гнезда. Здесь необходимо проверить, подается ли ток на ваше оборудование. На IP камере должна включаться подсветка, при ее наличии, когда объектив устройства погружается в темноту, а на видеорегистраторе должны гореть сигнальные лампы питания, активности сети и записи жесткого диска. Само-собой, проверить вставлена ли вилка в розетку нужно в первую очередь. Практически все оборудование для видеонаблюдения работает от постоянного напряжения 12 вольт, но бывают и исключения, например для IP камер, которые работают по технологии PoE.

    Проверить напряжение на оборудовании

    Проверьте, включено ли ваше оборудование в розетку

    Если вы проверили наличие питания и там всё хорошо, тогда читайте далее…

    На нашем компьютере, с которого мы работаем, отсутствует подключение к сети

    Проверьте, подключен ли ваш компьютер к локальной сети и интернету. Сделать это можно, посмотрев на значок в панели задач или открыв любой интернет-сайт через браузер. Если подключения нет, то нужно разбираться, куда оно пропало. Может у вас выключен Wi-Fi роутер или выпал провод из сетевой карты компьютера. Здесь причин может быть очень много. Ну а если подключение работает, тогда нужно читать дальше…

    Проверяем подключение к локальной сети и интернету

    Проверяем подключение к локальной сети и интернету

    Изменился IP адрес у целевого устройства

    Частой причиной отсутствия подключения к оборудованию по локальной сети – это смена его IP адреса. Например, при получении адресов по протоколу DHCP , после перезагрузки у оборудования он может легко измениться. также могло иметь место ошибочное изменение IP-адреса неопытным пользователем. В этом случае узнать верный адрес поможет программа Device Manager, которая специально создана для поиска оборудования на платформе XMtech в локальной сети. Необходимо запустить ее и просканировать сеть для поиска. в Окне отобразится текущий IP-адhtc устройства и его можно сравнить с тем, который указан в программе CMS.

    Окно программы Device Manager

    Окно программы Device Manager, с помощью которой можно просканировать сеть на наличие включенных устройств на платформе XM

    Если у вас видеорегистратор, можно подключить к нему монитор, с помощью мышки войти в меню, в разделе “сеть” проверить текущий IP адрес.

    Устройство зависло или вышло из строя

    Одним из дельных советов будет перезагрузить ваше оборудование, чтобы исключить возможный вариант повисания внутреннего программного обеспечения. Делается это путем кратковременного отключения электропитания. Достаточно на пол-минуты отключить оборудование из розетки и включить снова. После этого проверьте работу программы CMS.

    Перезагрузите оборудование, если зависло

    Перезагрузите ваше оборудование, если оно зависло

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

    Не забудьте сохранить ссылку!

    Опция «Проверка системы» в CMS Битрикс позволяет проверить соответствие настроек сервера требованиям CMS и вашего сайта. При запуске этой опции Битрикс, как правило, приводит несколько ошибок и замечаний. В этой статье мы рассмотрим, как их исправить.

    Режим работы MySQL

    Уведомление:

    Ошибка! innodb_strict_mode=ON, требуется OFF. Переменная sql_mode в MySQL должна быть пустая, текущее значение: NO_ENGINE_SUBSTITUTION

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

    Решение:

    Необходимо внести изменения в файлы конфигурации Bitrix, в которых задаются параметры базы данных, и указать в них нужные значения. Отредактировать файлы можно, например, с помощью подключения по FTP/SFTP.

    В файл /директория_сайта/bitrix/php_interface/after_connect.php под уже имеющимися строками и до символов ?> добавьте:

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

    В файл /директория_сайта/bitrix/php_interface/after_connect_d7.php под уже имеющимися строками и до символов ?> добавьте:

    $connection->queryExecute('SET sql_mode=""');
    $connection->queryExecute("SET innodb_strict_mode=0");

    После этого проверка Bitrix пройдет успешно.

    Выполнение агентов на cron

    Уведомление:

    Замечание: Агенты выполняются на хитах, рекомендуется перенести их выполнение на cron

    Это замечание некритично. В Битрикс предусмотрен внутренний планировщик задач (агентов). Данное замечание влияет на то, насколько точно по времени сработают запланированные задачи. Грубо говоря, скрипты сайта выполняются, только когда его страницы кто-то посещает. Если нет посещений, то и таймер работать не будет. Cron позволяет полностью решить проблему с планированием задач.

    Решение:

    Чтобы перенести работу непериодических агентов (и передачу почты) на Сron, необходимо установить константу BX_CRONTAB_SUPPORT.

    Для этого добавьте в файл /директория_сайта/bitrix/php_interface/dbconn.php строку:

    define('BX_CRONTAB_SUPPORT', true);

    Затем нужно добавить задачу в Crontab. Это можно сделать инструментами вашей панели управления или с помощью cli.

    Уведомление:

    Ошибка! Не настроен запуск cron_events.php на cron

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

    Решение:

    Выполните приведенную выше инструкцию по добавлению задачи cron, и ошибка будет устранена.

    Обязательные параметры PHP

    Уведомление:

    Ошибка! Значение max_input_vars должно быть не ниже 10000

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

    Решение:

    Необходимо добавить следующую строку в файл /директория_сайта/.htaccess:

    php_value max_input_vars 11000

    «1С-Битрикс: Управление сайтом» — одна из самых популярных коммерческих CMS. Как и в случае с любой другой CMS, при работе с Битриксом возникают разные ошибки, мешающие нормальной работе сайта. Выявить их можно с помощью встроенного функционала проверки системы в панели администратора Битрикс.

    Чтобы запустить проверку системы, перейдите в панель администратора по ссылке https://example.com/bitrix/admin (замените example.com на ваш домен), введите логин и пароль учетной записи администратора сайта, перейдите в Настройки — ИнструментыПроверка системы и нажмите на кнопку Начать тестирование. Дождитесь окончания проверки. В форме Проверка системы могут быть ошибки, которые, на первый взгляд, не влияют на работу сайта, однако требуют внимания владельца или системного администратора сайта.

    В данной статье рассмотрим способы устранения популярных ошибок, возникающих в CMS Битрикс.  

    1. Ошибка «The script encountered an error and will be aborted. To view extended error messages, enable this feature in .settings.php.» при переходе на сайт
    2. «Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на cron» при проверке системы 
    3. Ошибка работы с сокетами при проверке системы
    4. Ошибка! Не работает «Отправка почты» и «Отправка почтового сообщения больше 64Кб» при проверке системы
    5. «Служебные скрипты в корне сайта. Ошибка! Файл существует» при проверке системы
    6. Ошибка «Загрузка файла» и «Загрузка файла больше 4Мб» при проверке системы

    Ошибка «The script encountered an error and will be aborted. To view extended error messages, enable this feature in .settings.php.» при переходе на сайт

    Такая ошибка в большинстве случаев означает некорректное подключение к базе данных. В первую очередь проверьте, работает ли СУБД, введя следующую команду в терминал:

    # systemctl status mysql

    Если СУБД работает, проверьте файлы, расположенные в /home/bitrix/www/bitrix/.settings.php и /home/bitrix/www/bitrix/php_interface/dbconn.php (при необходимости замените /home/bitrix/www на корневую директорию вашего проекта, далее в статье будут использованы относительные пути вида /bitrix/php_interface/dbconn.php). В этих файлах указываются доступы для подключения к базе данных сайта.

    Для файла .settings.php

    'host' => 'localhost',
    'database' => 'database_name',
    'login' => 'user_name',
    'password' => 'secret_password',

    Для файла dbconn.php

    $DBHost = "localhost";
    $DBLogin = 'user_name';
    $DBPassword = 'secret_password’;
    $DBName = "database_name";

    Проверьте корректность указанных данных:

    • хост базы данных (должен быть localhost, если СУБД установлена локально),
    • название базы данных (замените в обоих файлах database_name на название своей базы данных),
    • имя пользователя базы данных (замените user_name на имя своего пользователя базы данных)
    • и пароль пользователя базы данных (замените secret_password на пароль пользователя вашей базы данных).

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

    «Замечание. Агенты выполняются на хитах, рекомендуется перевести выполнение агентов на cron» при проверке системы 

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

    Как правило, для настройки выполнения агентов на cron достаточно следовать рекомендациям проверки системы. Для этого нажмите на вопросительный знак справа от уведомления:

    Однако такой способ срабатывает не всегда. Если в файле /bitrix/php_interface/dbconn.php есть строка define('BX_CRONTAB_SUPPORT', true); и в cron есть задание на ежеминутный запуск скрипта /var/www/bitrix/modules/main/tools/cron_events.php, попробуйте следующее решение.

    Отключим выполнение агентов на хитах, для этого в панели администратора Битрикс переходим в Настройки — Инструменты — Командная PHP-строка, вводим следующую команду и нажимаем Выполнить:

    COption::SetOptionString("main", "agents_use_crontab", "N"); 
    echo COption::GetOptionString("main", "agents_use_crontab", "N"); 
    COption::SetOptionString("main", "check_agents", "N"); 
    echo COption::GetOptionString("main", "check_agents", "Y");

    Результат выполнения PHP-команды должен быть «NN».

    Далее в файле /bitrix/php_interface/dbconn.php закомментируем следующие строки (добавьте перед строками знак #):

    define("BX_CRONTAB_SUPPORT", true);
    define("BX_CRONTAB", true);

    После чего в этот же файл dbconn.php добавьте строки:

    if(!(defined("CHK_EVENT") && CHK_EVENT===true))
    define("BX_CRONTAB_SUPPORT", true);

    Далее необходимо из учетной записи владельца сайта (если вы работаете в консоли сервера из-под учетной записи root, что не рекомендуется, после создания файла измените владельца файла с помощью команды chown) создать новый файл cron_events.php в директории /bitrix/php_interface/ и добавить в него следующий код:

    <?php
    $_SERVER["DOCUMENT_ROOT"] = realpath(dirname(__FILE__)."/../..");
    $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"];
    define("NO_KEEP_STATISTIC", true);
    define("NOT_CHECK_PERMISSIONS",true);
    define('BX_NO_ACCELERATOR_RESET', true);
    define('CHK_EVENT', true);
    define('BX_WITH_ON_AFTER_EPILOG', true);
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
    @set_time_limit(0);
    @ignore_user_abort(true);
    CAgent::CheckAgents();
    define("BX_CRONTAB_SUPPORT", true);
    define("BX_CRONTAB", true);
    CEvent::CheckEvents();
    if(CModule::IncludeModule('sender'))
    {
        BitrixSenderMailingManager::checkPeriod(false);
        BitrixSenderMailingManager::checkSend();
    }
    require($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/tools/backup.php");
    CMain::FinalActions();
    ?>

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

    # crontab -ubitrix -e

    Откроется файл с заданиями crontab пользователя сайта. Вставьте следующую строку:

    */1 * * * * /usr/bin/php -f /home/bitrix/www/bitrix/php_interface/cron_events.php

    В данной строке значение */1 * * * * означает выполнение скрипта раз в минуту, вы можете скорректировать частоту выполнения в зависимости от ваших требований к проекту.

    Путь /usr/bin/php — путь для PHP, оставьте его таким же, если у вас на сервере нет альтернативных версий PHP. Если вы используете панель ISPmanager, возможно, ваш сайт работает на альтернативной версии PHP. Проверить версию можно в панели ISPmanager, а узнать корректный путь для PHP — с помощью команды whereis php в консоли сервера. Например, для альтернативной версии PHP 8.1 путь может быть таким: /opt/php81/bin/php. Замените путь к скрипту /home/bitrix/www/bitrix/php_interface/cron_events.php на свой в случае необходимости.

    Если в cron есть запись для выполнения скрипта /var/www/bitrix/modules/main/tools/cron_events.php — ее лучше закомментировать.

    Ошибка работы с сокетами при проверке системы

    При проверке системы в панели администратора Битрикс может возникнуть ошибка «Работа с сокетами. Ошибка! Не работает».

    Также из-за ошибки работы с сокетами другие тесты проводятся некорректно, выдавая ошибку «Замечание. Не удалось проверить из-за ошибки в работе с сокетами».

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

    Если А-записи указаны корректно, возможно в файле /etc/hosts на сервере указан неверный IP для вашего домена. Проверьте файл и укажите правильное значение:

    1.2.3.4 example.com

    Замените 1.2.3.4 на IP адрес вашего сервера, а example.com на доменное имя вашего сайта.

    Бывает, что на сервере может возникнуть проблема с корневыми сертификатами. Можно попробовать обновить их. В CentOS 7 ведите в консоли сервера:

    # yum install ca-certificates -y
    # update-ca-trust

    Ошибка! Не работает «Отправка почты» и «Отправка почтового сообщения больше 64Кб» при проверке системы

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

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

    Также можно выполнить проверку с помощью следующего кода PHP (вставьте его в командную строку PHP в панели администратора Битрикс):

    $mail="test@testmail.ru"; // укажите ваш почтовый ящик, на который нужно отправить тестовое письмо
    $subject ="test" ; // укажите любую тему письма
    $text= "test message"; // укажите любой текст письма
    if( mail($mail, $subject, $text) )
    {
    echo 'Письмо отправлено!'; }
    else{
    echo 'Ошибка! Не отправлено';
    }

    Если письмо не пришло, но вы получили уведомление «Письмо отправлено», значит, письма уходят и проблема в настройках CMS либо в модуле отправки почты. В данном случае можно обратиться в техподдержку Битрикс для выявления проблем в настройках CMS или к разработчику модуля отправки почты.

    Не исключено, что письмо просто попало в спам. Можно попробовать отправить на другой почтовый ящик (с другим почтовым доменом). Если письмо пришло — значит, адрес отправителя в черном списке почтового домена, до которого письмо не дошло. Если письмо не дошло — возможно, ваш почтовый домен или IP-адрес попали в глобальные черные списки.

    Если письмо не пришло, а вы получили уведомление «Отправка не удалась» — необходимо более детальное изучение проблемы. В таком случае потребуется вмешательство системного администратора.

    «Служебные скрипты в корне сайта. Ошибка! Файл существует» при проверке системы

    Такая ошибка говорит о наличии в корне сайта служебных скриптов, например, restore.php. Данные скрипты, как правило, добавляют временно для проведения каких-либо работ (например, restore.php — для восстановления сайта из резервной копии). Так или иначе, после выполнения работ такие скрипты необходимо удалить с сервера, так как они представляют угрозу безопасности сайту и данным.

    Ошибка «Загрузка файла» и «Загрузка файла больше 4Мб» при проверке системы

    Проверка системы Битрикс загружает файл размером более 4Мб. В большинстве случаев такая ошибка говорит об ограничениях в параметре upload_max_filesize для PHP.

    Необходимо в файле конфигурации PHP установить данное значение выше 4Мб и перезапустить веб-сервер. В зависимости от окружения файл конфигурации PHP может находится в разных местах. Обычно данное значение устанавливается в файле /etc/php.ini.

    Если вы используете панель ISPmanager — поправить конфигурацию можно прямо в ней: выберите нужный сайт, нажмите на кнопку PHP в верхней панели, найдите параметр upload_max_filesize и укажите нужное значение. Если вы используете окружение BitrixVM, необходимо вносить изменения в специальные файлы конфигурации, чтобы после перезагрузки сервера они не вернулись в исходное состояние. Подробнее можете узнать по ссылке.

    Понравилась статья? Поделить с друзьями:
  • Шифр виженера как найти длину ключа
  • Как найти процессор на видеокарте
  • Как найти достойный фильм
  • Как найти хорошего юриста на работу
  • Как найти площадь четырехугольника через периметр