Меню

При выполнении скрипта возникла ошибка что это такое

A script error is an error that occurs when the instructions from a script can’t be executed correctly for some reason.

Most computer users will encounter script errors most often in the browser when it can’t execute JavaScript or VBScript (or other scripting language) instructions from a web page, but they can happen in desktop applications, too.

Markus Spiske / Unsplash


Script Error Examples

Here are some example script error messages:

  • Errors on this webpage might cause it to work incorrectly.
  • A Runtime Error has occurred. Do you wish to debug?
  • Internet Explorer Script Error. An error has occurred in the script on line 1. Do you wish to continue running scripts on this page?
  • A script on this page is causing Internet Explorer to run slowly. If it continues to run, your computer may become unresponsive. Do you want to abort the script?
  • An error has occurred in the script on this page.

Why You’re Getting Script Errors

A common reason for scripting errors is that an error has occurred behind the scenes, either on the web server for errors in a web browser or on the programming end of a software program.

Incorrect code implementation or some other bad configuration on the software side isn’t your problem to fix. The best thing to do in that situation is to wait for an update from the developer.

However, scripting errors can also be due to something happening on your end, like with your own software program or operating system that’s unable to load the script correctly. For example, there might be a setting in your web browser that’s blocking scripts, or your security software might be treating a harmless script as if it’s a threat that needs to be deleted.

Script errors are most commonly seen in Internet Explorer or in an application that uses IE to access the internet or run local scripts, so most of these troubleshooting steps are with regard to IE.

While Microsoft Edge has replaced IE, some of the same problems can crop up. The fixes are also the same or very similar.

So, the quickest way to stop getting script errors is to simply switch browsers! Use something like Edge, Chrome, Firefox, or Opera. However, doing that doesn’t actually solve the script error.

Follow these steps in order, checking after each one to see if you still get the error:

Turn Off Scripting Errors in IE

The average user doesn’t actually need to see script errors, since they only serve as an annoyance. This is especially true if the error doesn’t prevent you from using the website or program normally.

You can safely turn off script errors in Internet Explorer, as well as programs that use IE on the backend, like this:

  1. Open the Run dialog box by pressing the Windows Key and then the key.

  2. Enter the inetcpl.cpl command to launch Internet Properties.

  3. Open the tab called Advanced.

  4. Scroll down until you find the Browsing section, and then look for these three settings (what you see will depend on the OS you’re using):

    • Make sure both Disable script debugging (Internet Explorer) and Disable script debugging (Other) have a check next to them.
    • Just below those options, double-check that Display a notification about every script error is not checked (so that you won’t see notifications about script errors.)

    These are the default settings for Windows 11 and Windows 10.

  5. Press OK to save the changes.

Make Sure IE Isn’t Blocking Important Scripting Features

Turning off scripting errors will stop you from seeing them, but doesn’t necessarily mean that the scripts themselves will work properly just because their related errors are no longer seen.

Make sure you haven’t disabled ActiveX scripting and that Internet Explorer isn’t blocking Java or ActiveX. Certain security settings in IE will prevent ActiveX and Java from running properly, which can affect the usability of the web page that’s running the script.

The quickest way to get these features working again (if they aren’t already) is to reset the security settings in Internet Explorer.

Delete Temporary Internet Files

Temporary files are cached on your computer by Internet Explorer so that you can revisit websites quicker, but a cache that’s too large or one that’s storing corrupted data can result in script errors. You should periodically delete these cache files in Internet Explorer.

Allow for Pop-ups in Your Browser

A pop-up blocker is extremely useful most of the time, but might actually be causing script errors if the script isn’t given enough time to run because the browser is preventing pop-ups.

All web browsers let you control the pop-up blocker settings. If you disable the blocker, then pop-ups will be allowed to run again.

Update Your Software

Outdated software might be what’s causing the specific script error that you’re seeing. This might be because the website or program showing the error, has a minimum requirement that your computer doesn’t meet, or because a script error was corrected through an update that you never received.

You should always keep Windows up to date.

Update your third-party programs if they’re getting script errors. A free software updater tool is one easy way to do this.

Check Your Security Software

It’s possible that your antivirus program or firewall application is blocking scripts or ActiveX controls from running normally. Temporarily disable both to see if you still get the script error.

You should never leave your computer open to attacks, but in this case, the security software might be to blame, so temporarily disabling them just for a few minutes won’t do any harm.

The procedure is different for every program, but you should be able to right-click the software running on the Windows taskbar, next to the clock, to turn off the AV shields or disable the firewall. If not, try opening the program—there’s most definitely an option there to disable the application.

Something else to look for with your antivirus scanner is whether it’s configured to check for viruses in folders that your web browser uses to keep temporary files. If so, the scanner might incorrectly identify scripts as malware, and quarantine or delete them before they can run. Add a folder exclusion if your app allows it.

Internet Explorer uses this folder by default:

C:Users[username]AppDataLocalMicrosoftWindowsINetCache

Google Chrome caches data here:

C:Users[username]AppDataLocalGoogleChromeUser DataDefaultCache

Reset All of Internet Explorer’s Settings

There could be a number of settings or add-ons causing scripting errors in Internet Explorer. The easiest way to return all of those settings to their defaults is to reset Internet Explorer.

Resetting IE will disable all the toolbars and add-ons, as well as reset every privacy, security, pop-up, tabbed browsing, default web browser, and advanced option.

An alternative method is to see if just a single add-on is causing the script error, which you can do through Tools > Manage add-ons. Disable add-ons one at a time and test for the script error after each one.

Otherwise, here’s how to completely reset Internet Explorer:

  1. Open the Run dialog box with the WIN + R hotkey.

  2. Enter inetcpl.cpl to open Internet Properties.

  3. From the Advanced tab, choose Reset at the bottom, and then again on the Reset Internet Explorer Settings screen.

    The only option for Windows 11 users from this screen is Restore advanced settings.

  4. Select Close when all the settings have been reset.

  5. Restart your computer.

Disable Smooth Scrolling

This is at the bottom because it’s the least likely cause of a script error. However, if you’re getting an error when viewing videos in Internet Explorer, or the video just doesn’t display correctly, the Smooth Scrolling option in IE could be causing issues with scripts that are trying to run on the page.

Here’s how to turn off Smooth Scrolling in Internet Explorer:

  1. Use the Run dialog box (Windows Key + R) to enter the inetcpl.cpl command.

  2. Navigate to the Advanced tab.

  3. Under the Browsing section, toward the bottom, remove the check mark next to Use smooth scrolling.

  4. Press OK to save and exit.

Thanks for letting us know!

Get the Latest Tech News Delivered Every Day

Subscribe

A script error is an error that occurs when the instructions from a script can’t be executed correctly for some reason.

Most computer users will encounter script errors most often in the browser when it can’t execute JavaScript or VBScript (or other scripting language) instructions from a web page, but they can happen in desktop applications, too.

Markus Spiske / Unsplash


Script Error Examples

Here are some example script error messages:

  • Errors on this webpage might cause it to work incorrectly.
  • A Runtime Error has occurred. Do you wish to debug?
  • Internet Explorer Script Error. An error has occurred in the script on line 1. Do you wish to continue running scripts on this page?
  • A script on this page is causing Internet Explorer to run slowly. If it continues to run, your computer may become unresponsive. Do you want to abort the script?
  • An error has occurred in the script on this page.

Why You’re Getting Script Errors

A common reason for scripting errors is that an error has occurred behind the scenes, either on the web server for errors in a web browser or on the programming end of a software program.

Incorrect code implementation or some other bad configuration on the software side isn’t your problem to fix. The best thing to do in that situation is to wait for an update from the developer.

However, scripting errors can also be due to something happening on your end, like with your own software program or operating system that’s unable to load the script correctly. For example, there might be a setting in your web browser that’s blocking scripts, or your security software might be treating a harmless script as if it’s a threat that needs to be deleted.

Script errors are most commonly seen in Internet Explorer or in an application that uses IE to access the internet or run local scripts, so most of these troubleshooting steps are with regard to IE.

While Microsoft Edge has replaced IE, some of the same problems can crop up. The fixes are also the same or very similar.

So, the quickest way to stop getting script errors is to simply switch browsers! Use something like Edge, Chrome, Firefox, or Opera. However, doing that doesn’t actually solve the script error.

Follow these steps in order, checking after each one to see if you still get the error:

Turn Off Scripting Errors in IE

The average user doesn’t actually need to see script errors, since they only serve as an annoyance. This is especially true if the error doesn’t prevent you from using the website or program normally.

You can safely turn off script errors in Internet Explorer, as well as programs that use IE on the backend, like this:

  1. Open the Run dialog box by pressing the Windows Key and then the key.

  2. Enter the inetcpl.cpl command to launch Internet Properties.

  3. Open the tab called Advanced.

  4. Scroll down until you find the Browsing section, and then look for these three settings (what you see will depend on the OS you’re using):

    • Make sure both Disable script debugging (Internet Explorer) and Disable script debugging (Other) have a check next to them.
    • Just below those options, double-check that Display a notification about every script error is not checked (so that you won’t see notifications about script errors.)

    These are the default settings for Windows 11 and Windows 10.

  5. Press OK to save the changes.

Make Sure IE Isn’t Blocking Important Scripting Features

Turning off scripting errors will stop you from seeing them, but doesn’t necessarily mean that the scripts themselves will work properly just because their related errors are no longer seen.

Make sure you haven’t disabled ActiveX scripting and that Internet Explorer isn’t blocking Java or ActiveX. Certain security settings in IE will prevent ActiveX and Java from running properly, which can affect the usability of the web page that’s running the script.

The quickest way to get these features working again (if they aren’t already) is to reset the security settings in Internet Explorer.

Delete Temporary Internet Files

Temporary files are cached on your computer by Internet Explorer so that you can revisit websites quicker, but a cache that’s too large or one that’s storing corrupted data can result in script errors. You should periodically delete these cache files in Internet Explorer.

Allow for Pop-ups in Your Browser

A pop-up blocker is extremely useful most of the time, but might actually be causing script errors if the script isn’t given enough time to run because the browser is preventing pop-ups.

All web browsers let you control the pop-up blocker settings. If you disable the blocker, then pop-ups will be allowed to run again.

Update Your Software

Outdated software might be what’s causing the specific script error that you’re seeing. This might be because the website or program showing the error, has a minimum requirement that your computer doesn’t meet, or because a script error was corrected through an update that you never received.

You should always keep Windows up to date.

Update your third-party programs if they’re getting script errors. A free software updater tool is one easy way to do this.

Check Your Security Software

It’s possible that your antivirus program or firewall application is blocking scripts or ActiveX controls from running normally. Temporarily disable both to see if you still get the script error.

You should never leave your computer open to attacks, but in this case, the security software might be to blame, so temporarily disabling them just for a few minutes won’t do any harm.

The procedure is different for every program, but you should be able to right-click the software running on the Windows taskbar, next to the clock, to turn off the AV shields or disable the firewall. If not, try opening the program—there’s most definitely an option there to disable the application.

Something else to look for with your antivirus scanner is whether it’s configured to check for viruses in folders that your web browser uses to keep temporary files. If so, the scanner might incorrectly identify scripts as malware, and quarantine or delete them before they can run. Add a folder exclusion if your app allows it.

Internet Explorer uses this folder by default:

C:Users[username]AppDataLocalMicrosoftWindowsINetCache

Google Chrome caches data here:

C:Users[username]AppDataLocalGoogleChromeUser DataDefaultCache

Reset All of Internet Explorer’s Settings

There could be a number of settings or add-ons causing scripting errors in Internet Explorer. The easiest way to return all of those settings to their defaults is to reset Internet Explorer.

Resetting IE will disable all the toolbars and add-ons, as well as reset every privacy, security, pop-up, tabbed browsing, default web browser, and advanced option.

An alternative method is to see if just a single add-on is causing the script error, which you can do through Tools > Manage add-ons. Disable add-ons one at a time and test for the script error after each one.

Otherwise, here’s how to completely reset Internet Explorer:

  1. Open the Run dialog box with the WIN + R hotkey.

  2. Enter inetcpl.cpl to open Internet Properties.

  3. From the Advanced tab, choose Reset at the bottom, and then again on the Reset Internet Explorer Settings screen.

    The only option for Windows 11 users from this screen is Restore advanced settings.

  4. Select Close when all the settings have been reset.

  5. Restart your computer.

Disable Smooth Scrolling

This is at the bottom because it’s the least likely cause of a script error. However, if you’re getting an error when viewing videos in Internet Explorer, or the video just doesn’t display correctly, the Smooth Scrolling option in IE could be causing issues with scripts that are trying to run on the page.

Here’s how to turn off Smooth Scrolling in Internet Explorer:

  1. Use the Run dialog box (Windows Key + R) to enter the inetcpl.cpl command.

  2. Navigate to the Advanced tab.

  3. Under the Browsing section, toward the bottom, remove the check mark next to Use smooth scrolling.

  4. Press OK to save and exit.

Thanks for letting us know!

Get the Latest Tech News Delivered Every Day

Subscribe

На чтение 4 мин. Просмотров 1.2k. Опубликовано 15.12.2019

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

Это уведомление, я назову это именно так — уведомление, т.к. мы еще не знаем в чем же дело, битрикс нас просто информирует о том, что при выполнении скрипта возникла ошибка, не более того.

Итак рассмотрим по порядку:

Содержание

  1. Почему может появиться это уведомление?
  2. Что делать, если появляется сообщение «при выполнении скрипта возникла ошибка»?
  3. Как в битрикс включить вывод ошибок?
  4. Методы выявление ошибки
  5. Основные причины появления белого экрана

Почему может появиться это уведомление?

  • Если уведомление появляется при разработке в публичной части сайта, то это однозначно ошибка в скрипте, вызвана, к примеру, ошибкой в синтаксисе в файле шаблона или в init.php, использованием функции, которая отсутствует и т.п.
  • Если уведомление появляется в админке сайта, то это может быть вызвано ошибками, к примеру, в init.php или ошибками в ядре битрикса, которые обусловлены не той версией php. Это могло произойти, если битрикс у вас давно не обновлялся и при этом вы изменили версию php на, к примеру, php 7.1.

Теперь рассмотрим пути решения этой проблемы.

Что делать, если появляется сообщение «при выполнении скрипта возникла ошибка»?

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

Как в битрикс включить вывод ошибок?

Для старого ядра включить вывод ошибок можно в файле dbconn.php:

Чтобы в битрикс включить вывод ошибок для нового ядра D7 необходимо в файле .settings.php поставить значение debug => true:

Сейчас, наверное, уже сложно встретить сайты только на старом ядре, поэтому включать вывод ошибок в битрикс можно только в файле .settings.php

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

Порой на сайте разработанном на 1с Битрикс вместо контента появляется белый экран. Были случаи появления чистого экрана после авторизации в админке.

Методы выявление ошибки

1. В файле .htaccess включаем вывод ошибок:

2. В файле /bitrix/php_interface/dbconn.php :

3. Смотреть лог ошибок (error log) веб-сервера (апач, файл error_log ).

4. В файле /bitrix/.settings.php установить

5. Проверить содержимое переменной $_SERVER[«DOCUMENT_ROOT»] . Там должен быть установлен корректный путь, иначе не подключаются файлы системы.

6. Запустить скрипт проверки системы на соответствия требованиям для стабильной работы 1с Битрикс bitrix_server_test.php

Основные причины появления белого экрана

  1. Кривое редактирование /bitrix/php_interface/init.php : ошибки, лишний пробел после ?>
  2. Такая же проблема с белым экраном возникла после переноса на другой сервер.
  3. Проверить настройку PHP — short_open_tag , которая должна быть в On.
  4. Не хватает оперативной памяти( memory_limit по умолчанию 128). Проблема решается следующим образом. Заходим в /bitrix/php_interface/dbconn.php . Редактируем ini_set(«memory_limit», «512M»);

Если вы сталкивались с этой проблемой пишите в комментариях, как её решили.

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

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

Рабочий стол->Контент->Структура сайта->Файлы и папки->bitrix

Здесь представлен многомерный массив данных, ключ-значение. Это основные настройки вашего сайта на битриксе.

Что бы включить отображение ошибок находим строку ‘debug’ которая находится внутри ‘exception_handling’->’value’ и ставим ей значение true вместо false.

Что бы настроить какие именно ошибки мы хотим отображать в ключе ‘exception_errors_types’ указываем код ошибок, например 29687, но он мало понятен, поэтому лучше использовать в значение данного ключа константы через пробел:

E_DEPRECATED,

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

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

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

Этот материал, посвящённый обработке ошибок в JavaScript, разбит на три части. Сначала мы сделаем общий обзор системы обработки ошибок в JavaScript и поговорим об объектах ошибок. После этого мы поищем ответ на вопрос о том, что делать с ошибками, возникающими в серверном коде (в частности, при использовании связки Node.js + Express.js). Далее — обсудим обработку ошибок в React.js. Фреймворки, которые будут здесь рассматриваться, выбраны по причине их огромной популярности. Однако рассматриваемые здесь принципы работы с ошибками универсальны, поэтому вы, даже если не пользуетесь Express и React, без труда сможете применить то, что узнали, к тем инструментам, с которыми работаете.

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

1. Ошибки в JavaScript и универсальные способы работы с ними

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

throw new Error('something went wrong')

В ходе выполнения этой команды будет создан экземпляр объекта Error и будет сгенерировано (или, как говорят, «выброшено») исключение с этим объектом. Инструкция throw может генерировать исключения, содержащие произвольные выражения. При этом выполнение скрипта остановится в том случае, если не были предприняты меры по обработке ошибки.

Начинающие JS-программисты обычно не используют инструкцию throw. Они, как правило, сталкиваются с исключениями, выдаваемыми либо средой выполнения языка, либо сторонними библиотеками. Когда это происходит — в консоль попадает нечто вроде ReferenceError: fs is not defined и выполнение программы останавливается.

▍Объект Error

У экземпляров объекта Error есть несколько свойств, которыми мы можем пользоваться. Первое интересующее нас свойство — message. Именно сюда попадает та строка, которую можно передать конструктору ошибки в качестве аргумента. Например, ниже показано создание экземпляра объекта Error и вывод в консоль переданной конструктором строки через обращение к его свойству message.

const myError = new Error('please improve your code')
console.log(myError.message) // please improve your code

Второе свойство объекта, очень важное, представляет собой трассировку стека ошибки. Это — свойство stack. Обратившись к нему можно просмотреть стек вызовов (историю ошибки), который показывает последовательность операций, приведшую к неправильной работе программы. В частности, это позволяет понять — в каком именно файле содержится сбойный код, и увидеть, какая последовательность вызовов функций привела к ошибке. Вот пример того, что можно увидеть, обратившись к свойству stack.

Error: please improve your code
 at Object.<anonymous> (/Users/gisderdube/Documents/_projects/hacking.nosync/error-handling/src/general.js:1:79)
 at Module._compile (internal/modules/cjs/loader.js:689:30)
 at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
 at Module.load (internal/modules/cjs/loader.js:599:32)
 at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
 at Function.Module._load (internal/modules/cjs/loader.js:530:3)
 at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
 at startup (internal/bootstrap/node.js:266:19)
 at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)

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

▍Генерирование и обработка ошибок

Создание экземпляра объекта Error, то есть, выполнение команды вида new Error(), ни к каким особым последствиям не приводит. Интересные вещи начинают происходить после применения оператора throw, который генерирует ошибку. Как уже было сказано, если такую ошибку не обработать, выполнение скрипта остановится. При этом нет никакой разницы — был ли оператор throw использован самим программистом, произошла ли ошибка в некоей библиотеке или в среде выполнения языка (в браузере или в Node.js). Поговорим о различных сценариях обработки ошибок.

▍Конструкция try…catch

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

Этот блок можно использовать для обработки любых ошибок, происходящих в синхронном коде. Рассмотрим пример.

const a = 5

try {
    console.log(b) // переменная b не объявлена - возникает ошибка
} catch (err) {
    console.error(err) // в консоль попадает сообщение об ошибке и стек ошибки
}

console.log(a) // выполнение скрипта не останавливается, данная команда выполняется

Если бы в этом примере мы не заключили бы сбойную команду console.log(b) в блок try...catch, то выполнение скрипта было бы остановлено.

▍Блок finally

Иногда случается так, что некий код нужно выполнить независимо от того, произошла ошибка или нет. Для этого можно, в конструкции try...catch, использовать третий, необязательный, блок — finally. Часто его использование эквивалентно некоему коду, который идёт сразу после try...catch, но в некоторых ситуациях он может пригодиться. Вот пример его использования.

const a = 5

try {
    console.log(b) // переменная b не объявлена - возникает ошибка
} catch (err) {
    console.error(err) // в консоль попадает сообщение об ошибке и стек ошибки
} finally {
    console.log(a) // этот код будет выполнен в любом случае
}

▍Асинхронные механизмы — коллбэки

Программируя на JavaScript всегда стоит обращать внимание на участки кода, выполняющиеся асинхронно. Если у вас имеется асинхронная функция и в ней возникает ошибка, скрипт продолжит выполняться. Когда асинхронные механизмы в JS реализуются с использованием коллбэков (кстати, делать так не рекомендуется), соответствующий коллбэк (функция обратного вызова) обычно получает два параметра. Это нечто вроде параметра err, который может содержать ошибку, и result — с результатами выполнения асинхронной операции. Выглядит это примерно так:

myAsyncFunc(someInput, (err, result) => {
    if(err) return console.error(err) // порядок работы с объектом ошибки мы рассмотрим позже
    console.log(result)
})

Если в коллбэк попадает ошибка, она видна там в виде параметра err. В противном случае в этот параметр попадёт значение undefined или null. Если оказалось, что в err что-то есть, важно отреагировать на это, либо так как в нашем примере, воспользовавшись командой return, либо воспользовавшись конструкцией if...else и поместив в блок else команды для работы с результатом выполнения асинхронной операции. Речь идёт о том, чтобы, в том случае, если произошла ошибка, исключить возможность работы с результатом, параметром result, который в таком случае может иметь значение undefined. Работа с таким значением, если предполагается, например, что оно содержит объект, сама может вызвать ошибку. Скажем, это произойдёт при попытке использовать конструкцию result.data или подобную ей.

▍Асинхронные механизмы — промисы

Для выполнения асинхронных операций в JavaScript лучше использовать не коллбэки а промисы. Тут, в дополнение к улучшенной читабельности кода, имеются и более совершенные механизмы обработки ошибок. А именно, возиться с объектом ошибки, который может попасть в функцию обратного вызова, при использовании промисов не нужно. Здесь для этой цели предусмотрен специальный блок catch. Он перехватывает все ошибки, произошедшие в промисах, которые находятся до него, или все ошибки, которые произошли в коде после предыдущего блока catch. Обратите внимание на то, что если в промисе произошла ошибка, для обработки которой нет блока catch, это не остановит выполнение скрипта, но сообщение об ошибке будет не особенно удобочитаемым.

(node:7741) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: something went wrong
(node:7741) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. */

В результате можно порекомендовать всегда, при работе с промисами, использовать блок catch. Взглянем на пример.

Promise.resolve(1)
    .then(res => {
        console.log(res) // 1

        throw new Error('something went wrong')

        return Promise.resolve(2)
    })
    .then(res => {
        console.log(res) // этот блок выполнен не будет
    })
    .catch(err => {
        console.error(err) // о том, что делать с этой ошибкой, поговорим позже
        return Promise.resolve(3)
    })
    .then(res => {
        console.log(res) // 3
    })
    .catch(err => {
        // этот блок тут на тот случай, если в предыдущем блоке возникнет какая-нибудь ошибка
        console.error(err)
    })

▍Асинхронные механизмы и try…catch

После того, как в JavaScript появилась конструкция async/await, мы вернулись к классическому способу обработки ошибок — к try...catch...finally. Обрабатывать ошибки при таком подходе оказывается очень легко и удобно. Рассмотрим пример.

;(async function() {
    try {
        await someFuncThatThrowsAnError()
    } catch (err) {
        console.error(err) // об этом поговорим позже
    }

    console.log('Easy!') // будет выполнено
})()

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

2. Генерирование и обработка ошибок в серверном коде

Теперь, когда у нас есть инструменты для работы с ошибками, посмотрим на то, что мы можем с ними делать в реальных ситуациях. Генерирование и правильная обработка ошибок — это важнейший аспект серверного программирования. Существуют разные подходы к работе с ошибками. Здесь будет продемонстрирован подход с использованием собственного конструктора для экземпляров объекта Error и кодов ошибок, которые удобно передавать во фронтенд или любым механизмам, использующим серверные API. Как структурирован бэкенд конкретного проекта — особого значения не имеет, так как при любом подходе можно использовать одни и те же идеи, касающиеся работы с ошибками.

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

  1. Универсальная обработка ошибок — некий базовый механизм, подходящий для обработки любых ошибок, в ходе работы которого просто выдаётся сообщение наподобие Something went wrong, please try again or contact us, предлагающее пользователю попробовать выполнить операцию, давшую сбой, ещё раз или связаться с владельцем сервера. Эта система не отличается особой интеллектуальностью, но она, по крайней мере, способна сообщить пользователю о том, что что-то пошло не так. Подобное сообщение гораздо лучше, чем «бесконечная загрузка» или нечто подобное.
  2. Обработка конкретных ошибок — механизм, позволяющий сообщить пользователю подробные сведения о причинах неправильного поведения системы и дать ему конкретные советы по борьбе с неполадкой. Например, это может касаться отсутствия неких важных данных в запросе, который пользователь отправляет на сервер, или в том, что в базе данных уже существует некая запись, которую он пытается добавить ещё раз, и так далее.

▍Разработка собственного конструктора объектов ошибок

Здесь мы воспользуемся стандартным классом Error и расширим его. Пользоваться механизмами наследования в JavaScript — дело рискованное, но в данном случае эти механизмы оказываются весьма полезными. Зачем нам наследование? Дело в том, что нам, для того, чтобы код удобно было бы отлаживать, нужны сведения о трассировке стека ошибки. Расширяя стандартный класс Error, мы, без дополнительных усилий, получаем возможности по трассировке стека. Мы добавляем в наш собственный объект ошибки два свойства. Первое — это свойство code, доступ к которому можно будет получить с помощью конструкции вида err.code. Второе — свойство status. В него будет записываться код состояния HTTP, который планируется передавать клиентской части приложения.

Вот как выглядит класс CustomError, код которого оформлен в виде модуля.

class CustomError extends Error {
    constructor(code = 'GENERIC', status = 500, ...params) {
        super(...params)

        if (Error.captureStackTrace) {
            Error.captureStackTrace(this, CustomError)
        }

        this.code = code
        this.status = status
    }
}

module.exports = CustomError

▍Маршрутизация

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

Для того чтобы справиться с этой проблемой, мы можем реализовать собственный обработчик маршрутов и определять логику маршрутов в виде обычных функций. Благодаря такому подходу, если функция маршрута (или любая другая функция) выбрасывает ошибку, она попадёт в обработчик маршрутов, который затем может передать её клиентской части приложения. При возникновении ошибки на сервере мы планируем передавать её во фронтенд в следующем формате, полагая, что для этого будет применяться JSON-API:

{
    error: 'SOME_ERROR_CODE',
    description: 'Something bad happened. Please try again or contact support.'
}

Если на данном этапе происходящие кажется вам непонятным — не беспокойтесь — просто продолжайте читать, пробуйте работать с тем, о чём идёт речь, и постепенно вы во всём разберётесь. На самом деле, если говорить о компьютерном обучении, здесь применяется подход «сверху-вниз», когда сначала обсуждаются общие идеи, а потом осуществляется переход к частностям.

Вот как выглядит код обработчика маршрутов.

const express = require('express')
const router = express.Router()
const CustomError = require('../CustomError')

router.use(async (req, res) => {
    try {
        const route = require(`.${req.path}`)[req.method]

        try {
            const result = route(req) // Передаём запрос функции route
            res.send(result) // Передаём клиенту то, что получено от функции route
        } catch (err) {
            /*
            Сюда мы попадаем в том случае, если в функции route произойдёт ошибка
            */
            if (err instanceof CustomError) {
                /* 
                Если ошибка уже обработана - трансформируем её в 
                возвращаемый объект
                */

                return res.status(err.status).send({
                    error: err.code,
                    description: err.message,
                })
            } else {
                console.error(err) // Для отладочных целей

                // Общая ошибка - вернём универсальный объект ошибки
                return res.status(500).send({
                    error: 'GENERIC',
                    description: 'Something went wrong. Please try again or contact support.',
                })
            }
        }
    } catch (err) {
        /* 
         Сюда мы попадём, если запрос окажется неудачным, то есть,
         либо не будет найдено файла, соответствующего пути, переданному
         в запросе, либо не будет экспортированной функции с заданным
         методом запроса
        */
        res.status(404).send({
            error: 'NOT_FOUND',
            description: 'The resource you tried to access does not exist.',
        })
    }
})

module.exports = router

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

Теперь взглянем на файл маршрутов.

const CustomError = require('../CustomError')

const GET = req => {
    // пример успешного выполнения запроса
    return { name: 'Rio de Janeiro' }
}

const POST = req => {
    // пример ошибки общего характера
    throw new Error('Some unexpected error, may also be thrown by a library or the runtime.')
}

const DELETE = req => {
    // пример ошибки, обрабатываемой особым образом
    throw new CustomError('CITY_NOT_FOUND', 404, 'The city you are trying to delete could not be found.')
}

const PATCH = req => {
    // пример перехвата ошибок и использования CustomError
    try {
        // тут случилось что-то нехорошее
        throw new Error('Some internal error')
    } catch (err) {
        console.error(err) // принимаем решение о том, что нам тут делать

        throw new CustomError(
            'CITY_NOT_EDITABLE',
            400,
            'The city you are trying to edit is not editable.'
        )
    }
}

module.exports = {
    GET,
    POST,
    DELETE,
    PATCH,
}

В этих примерах с самими запросами ничего не делается. Тут просто рассматриваются разные сценарии возникновения ошибок. Итак, например, запрос GET /city попадёт в функцию const GET = req =>..., запрос POST /city попадёт в функцию const POST = req =>... и так далее. Эта схема работает и при использовании параметров запросов. Например — для запроса вида GET /city?startsWith=R. В целом, здесь продемонстрировано, что при обработке ошибок, во фронтенд может попасть либо общая ошибка, содержащая лишь предложение попробовать снова или связаться с владельцем сервера, либо ошибка, сформированная с использованием конструктора CustomError, которая содержит подробные сведения о проблеме.
Данные общей ошибки придут в клиентскую часть приложения в таком виде:

{
    error: 'GENERIC',
    description: 'Something went wrong. Please try again or contact support.'
}

Конструктор CustomError используется так:

throw new CustomError('MY_CODE', 400, 'Error description')

Это даёт следующий JSON-код, передаваемый во фронтенд:

{
    error: 'MY_CODE',
    description: 'Error description'
}

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

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

3. Работа с ошибками на клиенте

Теперь пришла пора описать третью часть нашей системы обработки ошибок, касающуюся фронтенда. Тут нужно будет, во-первых, обрабатывать ошибки, возникающие в клиентской части приложения, а во-вторых, понадобится оповещать пользователя об ошибках, возникающих на сервере. Разберёмся сначала с показом сведений о серверных ошибках. Как уже было сказано, в этом примере будет использована библиотека React.

▍Сохранение сведений об ошибках в состоянии приложения

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

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

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

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

Здесь будет использоваться встроенная в React система управления состоянием приложения, но, при необходимости, вы можете воспользоваться и специализированными решениями для управления состоянием — такими, как MobX или Redux.

▍Глобальные ошибки

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

Сообщение о глобальной ошибке

Теперь взглянем на код, который хранится в файле Application.js.

import React, { Component } from 'react'

import GlobalError from './GlobalError'

class Application extends Component {
    constructor(props) {
        super(props)

        this.state = {
            error: '',
        }

        this._resetError = this._resetError.bind(this)
        this._setError = this._setError.bind(this)
    }

    render() {
        return (
            <div className="container">
                <GlobalError error={this.state.error} resetError={this._resetError} />
                <h1>Handling Errors</h1>
            </div>
        )
    }

    _resetError() {
        this.setState({ error: '' })
    }

    _setError(newError) {
        this.setState({ error: newError })
    }
}

export default Application

Как видно, в состоянии, в Application.js, имеется место для хранения данных ошибки. Кроме того, тут предусмотрены методы для сброса этих данных и для их изменения.

Ошибка и метод для сброса ошибки передаётся компоненту GlobalError, который отвечает за вывод сообщения об ошибке на экран и за сброс ошибки после нажатия на значок x в поле, где выводится сообщение. Вот код компонента GlobalError (файл GlobalError.js).

import React, { Component } from 'react'

class GlobalError extends Component {
    render() {
        if (!this.props.error) return null

        return (
            <div
                style={{
                    position: 'fixed',
                    top: 0,
                    left: '50%',
                    transform: 'translateX(-50%)',
                    padding: 10,
                    backgroundColor: '#ffcccc',
                    boxShadow: '0 3px 25px -10px rgba(0,0,0,0.5)',
                    display: 'flex',
                    alignItems: 'center',
                }}
            >
                {this.props.error}
                 
                <i
                    className="material-icons"
                    style={{ cursor: 'pointer' }}
                    onClick={this.props.resetError}
                >
                    close
                </font></i>
            </div>
        )
    }
}

export default GlobalError

Обратите внимание на строку if (!this.props.error) return null. Она указывает на то, что при отсутствии ошибки компонент ничего не выводит. Это предотвращает постоянный показ красного прямоугольника на странице. Конечно, вы, при желании, можете поменять внешний вид и поведение этого компонента. Например, вместо того, чтобы сбрасывать ошибку по нажатию на x, можно задать тайм-аут в пару секунд, по истечении которого состояние ошибки сбрасывается автоматически.

Теперь, когда всё готово для работы с глобальными ошибками, для задания глобальной ошибки достаточно воспользоваться _setError из Application.js. Например, это можно сделать в том случае, если сервер, после обращения к нему, вернул сообщение об общей ошибке (error: 'GENERIC'). Рассмотрим пример (файл GenericErrorReq.js).

import React, { Component } from 'react'
import axios from 'axios'

class GenericErrorReq extends Component {
    constructor(props) {
        super(props)

        this._callBackend = this._callBackend.bind(this)
    }

    render() {
        return (
            <div>
                <button onClick={this._callBackend}>Click me to call the backend</button>
            </div>
        )
    }

    _callBackend() {
        axios
            .post('/api/city')
            .then(result => {
                // сделать что-нибудь с результатом в том случае, если запрос оказался успешным
            })
            .catch(err => {
                if (err.response.data.error === 'GENERIC') {
                    this.props.setError(err.response.data.description)
                }
            })
    }
}

export default GenericErrorReq

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

▍Обработка специфических ошибок, возникающих при выполнении запросов

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

Сообщение о специфической ошибке

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

import React, { Component } from 'react'
import axios from 'axios'

import InlineError from './InlineError'

class SpecificErrorRequest extends Component {
    constructor(props) {
        super(props)

        this.state = {
            error: '',
        }

        this._callBackend = this._callBackend.bind(this)
    }

    render() {
        return (
            <div>
                <button onClick={this._callBackend}>Delete your city</button>
                <InlineError error={this.state.error} />
            </div>
        )
    }

    _callBackend() {
        this.setState({
            error: '',
        })

        axios
            .delete('/api/city')
            .then(result => {
                // сделать что-нибудь с результатом в том случае, если запрос оказался успешным
            })
            .catch(err => {
                if (err.response.data.error === 'GENERIC') {
                    this.props.setError(err.response.data.description)
                } else {
                    this.setState({
                        error: err.response.data.description,
                    })
                }
            })
    }
}

export default SpecificErrorRequest

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

▍Ошибки, возникающие в клиентской части приложения

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

В поле ничего нет, мы сообщаем об этом пользователю

Вот код файла SpecificErrorFrontend.js, реализующий вышеописанный функционал.

import React, { Component } from 'react'
import axios from 'axios'

import InlineError from './InlineError'

class SpecificErrorRequest extends Component {
    constructor(props) {
        super(props)

        this.state = {
            error: '',
            city: '',
        }

        this._callBackend = this._callBackend.bind(this)
        this._changeCity = this._changeCity.bind(this)
    }

    render() {
        return (
            <div>
                <input
                    type="text"
                    value={this.state.city}
                    style={{ marginRight: 15 }}
                    onChange={this._changeCity}
                />
                <button onClick={this._callBackend}>Delete your city</button>
                <InlineError error={this.state.error} />
            </div>
        )
    }

    _changeCity(e) {
        this.setState({
            error: '',
            city: e.target.value,
        })
    }

    _validate() {
        if (!this.state.city.length) throw new Error('Please provide a city name.')
    }

    _callBackend() {
        this.setState({
            error: '',
        })

        try {
            this._validate()
        } catch (err) {
            return this.setState({ error: err.message })
        }

        axios
            .delete('/api/city')
            .then(result => {
                // сделать что-нибудь с результатом в том случае, если запрос оказался успешным
            })
            .catch(err => {
                if (err.response.data.error === 'GENERIC') {
                    this.props.setError(err.response.data.description)
                } else {
                    this.setState({
                        error: err.response.data.description,
                    })
                }
            })
    }
}

export default SpecificErrorRequest

▍Интернационализация сообщений об ошибках с использованием кодов ошибок

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

Итоги

Надеемся, теперь у вас сформировалось понимание того, как можно работать с ошибками в веб-приложениях. Нечто вроде console.error(err) следует использовать только в отладочных целях, в продакшн подобные вещи, забытые программистом, проникать не должны. Упрощает решение задачи логирования использование какой-нибудь подходящей библиотеки наподобие loglevel.

Уважаемые читатели! Как вы обрабатываете ошибки в своих проектах?

  • Описание ошибки

  • Решение проблемы

  • В Internet Explorer

  • В приложениях и играх

Технологии не стоят на месте. Вспомните, какими были сайты 15 лет назад. Лишь текст на цветном фоне. Ни анимации, ни плавных переходов, ни разнообразия функций. Сейчас же многие визуальные эффекты и функции реализованы с помощью скриптов. Так давайте рассмотрим, как исправить ошибку сценария в Windows?
Ошибка скрипта

Описание ошибки

Ошибка сценария – это сбой в работе скрипта, который выполняет ту или иную функцию на веб странице. И не удивляйтесь, если подобная проблема появилась во время игры, установленной на ПК, – они тоже реализуют свой функционал с помощью JavaScript и Visual Basic. К счастью, никаких фатальных последствий для личных данных и системы в целом ошибка скрипта не представляет. А лечится проблема несколькими простыми способами.

Решение проблемы

Универсальных способов не существует, поэтому для начала нужно знать, при использовании чего появляется сообщение о сбое. Не удивительно, что в нашем списке есть Internet Explorer – браузер лидирует во многих антирейтингах по стабильности и производительности, поэтому рекомендуется заменить его на более качественный аналог. Возможно, это и будет лучшим решением данной проблемы.

В Internet Explorer

Но если вы истинный фанат софта от Microsoft или просто прикипели за долгие годы к приложению, то выполните следующее:

  1. Откройте браузер и перейдите на страницу, на которой отображалось сообщение об ошибке.
  2. Обновите страницу с очисткой кэша, нажав Ctrl+F5.
  3. Проверьте наличие проблемы.

Если ошибка скрипта не появляется – поздравляю! Иначе – переходите к следующим пунктам:

  1. Перейдите в «Меню» – «Свойства браузера».
    Свойства в Internet Explorer
  2. Откройте вкладку «Дополнительно».
  3. Установите параметры работы скриптов в соответствии с данными на скриншоте.
    Отключение отладки сценариев в Internet Explorer
  4. Сохраняем параметры нажатием кнопки «ОК».
  5. Далее перейдите во вкладку «Безопасность» и нажмите кнопку «Выбрать уровень безопасности по умолчанию для всех зон».
    Выбор уровня безопасности для зон
  6. После этого откройте вкладку «Общие» и нажмите кнопку «Удалить» в подкатегории «Журнал браузера».
    Удаление данных в журнале
  7. Выберите все поля и нажмите кнопку «Удалить».
    Выбор категории удаляемых данных

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

В приложениях и играх

Для решения проблем с ошибкой сценария в приложениях и играх выполните несколько шагов:

  1. Откройте окно «Выполнить» нажав Win+R.
  2. В текстовое поле окна введите regedit и нажмите «ОК».
    Создание задачи
  3. В новом окне ищем HKEY_LOCAL_MACHINE, нажимаем ПКМ по полю и выбираем пункт «Разрешения».
  4. Ставим галочки напротив всех доступных полей в столбце «Разрешить».
    Изменение разрешений в реестре
  5. Далее нажимаем кнопку «Дополнительно».
  6. Кликаем на поле, где в столбце «Субъект» стоит значение «Все» и нажимаем кнопку «Изменить».
    Изменение разрешений в реестре
  7. В новом окне устанавливаем галочку возле поля «Полный доступ» и нажимаем «ОК».
    Изменение разрешений в реестре
  8. Перезагружаем компьютер.

Теперь осталось зарегистрировать внесенные изменения:

  1. Откройте окно «Выполнить» нажав Win+R.
  2. Введите команду cmd и нажмите «ОК».
    Вызов командной строки
  3. В командной строке наберите regsvr32 msxml.dll и нажмите Enter.
  4. Перезапустите устройство.

Выше представлены исчерпывающие методы, которые работают в 99% случаев. Теперь вы знаете, что такое ошибка скрипта и как ее исправить. Если известен какой-либо другой способ – поделитесь им в комментариях. Удачи!

 

Пользователь 560759

Заглянувший

Сообщений: 31
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 17.04.2016

#101

0

02.06.2016 15:23:01

тут я с вами не согласен, работал с очень многими CMS и даже в сложных ситуациях все было предельно ясно. А тут мистика какая то. И почему то поддержка битрикса всегда не приделах как вопрос касается сервера. ОК! предположим это произошло на их облаке! какие действия??? я сейчас восстановил все с бекапа. все норм, но бекап 3х недельной давности. На тот момент у меня еще было порядка 20 дней теста, и было проделано много работы. Сейчас после бекапа сайт просит лицензию. куда деваться я хз. Мало того что потеряно много проделанной работы, так я еще и начальству показать ничего не могу…  

 

Пользователь 208651

Посетитель

Сообщений: 82
Баллов: 6
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.08.2013

#102

0

02.06.2016 15:52:57

Подождите, каким образом работа БД из консоли касается битрикса?  

 

Пользователь 560759

Заглянувший

Сообщений: 31
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 17.04.2016

#103

0

02.06.2016 16:07:07

Цитата
Владислав Боев написал:
Подождите, каким образом работа БД из консоли касается битрикса?

если сервер не может соединится с базой из за отсутствия сокета, который мистически исчезает…. вы скажете что это делает сервер? если считает что сервер…. еще раз напишу, с другими CMS работает годами…. а тут особенности работы битрикс приводят к ерунде. Мне бы проблему решить а не разбираться что и как и из за чего…  

 

Пользователь 560759

Заглянувший

Сообщений: 31
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 17.04.2016

#104

0

07.06.2016 11:48:19

Блин да что такое то! Запустили новую вирт.машину, восттановили из последнего бекапа (потеряли 2х недельную работу из за сбоя с базой). В общем поработал портал 2 дня…. теперь в админку не могу попасть! При нажатии кнопки Администрирование из самого сайта который норм работает, открывается страница с верхними кнопками (Сайт, администрирование….) и все остальное серое (фон). Я не пойму 1С за что такие деньги просит? если нифига не работает.

Может кто помочь разобраться с этим приколом?  

 

Пользователь 208651

Посетитель

Сообщений: 82
Баллов: 6
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.08.2013

#105

0

07.06.2016 12:22:44

Василий, можно несколько глупых вопросов?
0. Пробовали не в корень админки попадать, а куда нить на страницу настроек модулей или в  статистику?
1. Какой браузер?
2. Опишите виртуальную машину, это образ виртуалки от битрикса или сами на xen или virtualbox и аналогах создаете с нуля?
3. Из бекапа вы что восстановили? Просто через скрипт сайт подняли?
4. У вас есть данные в бд? Я имею виду наполнение сайта?
5. Смотрели консоль браузера? Лог ошибок php, сервера, mysql?
6. И совсем глупый вопрос-вариант — проверяли на вирусы?

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

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

 

Пользователь 560759

Заглянувший

Сообщений: 31
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 17.04.2016

#106

0

07.06.2016 12:49:59

Цитата
Владислав Боев написал:
Василий, можно несколько глупых вопросов?
0. Пробовали не в корень админки попадать, а куда нить на страницу настроек модулей или в  статистику?
1. Какой браузер?
2. Опишите виртуальную машину, это образ виртуалки от битрикса или сами на xen или virtualbox и аналогах создаете с нуля?
3. Из бекапа вы что восстановили? Просто через скрипт сайт подняли?
4. У вас есть данные в бд? Я имею виду наполнение сайта?
5. Смотрели консоль браузера? Лог ошибок php, сервера, mysql?
6. И совсем глупый вопрос-вариант — проверяли на вирусы?

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

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

0. пробовал, реакция такая я же
1. пробовал хром, нема, чистил кэш, нема, фаерфокс, тоже самое.
2. штатный образ от 1с, на virtualbox
3. на новой машине запустили штатный образ, только вместо установки указали на восстановление и ткнули на бэкап, восстановился и работал
4. сайт работает, задачи, сообщения, вроде весь функционал. (при еще работающей админки, делала проверку сайта, показал на ошибки в базе что нет полей, нет таблиц, все по нулям… не обратил на это особого внимания т.к. как так то если сайт робит.)
5. в консоли все гуд, ошибок нет, пробовали ребутнуть, все стартует без ошибок.
6. кого? серв? или сам сайт? сайт уже нет возможности, а серв в норме он в инет не смотрит.

 

Пользователь 208651

Посетитель

Сообщений: 82
Баллов: 6
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 08.08.2013

#107

0

07.06.2016 13:08:26

Тогда еще один глупый вариант, пробовали вместо virtualbox wmware использовать? Я понимаю что они не должны отличаться, но тем не менее.
В принципе любые ошибки могут быть причиной. Попробуйте сравнить кодировки БД кодировки таблиц и настройки самого битрикса. Может попробовать исправить таблицы в которых есть проблемы?

 

Пользователь 560759

Заглянувший

Сообщений: 31
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 17.04.2016

#108

0

07.06.2016 15:55:37

Цитата
Владислав Боев написал:
Тогда еще один глупый вариант, пробовали вместо virtualbox wmware использовать? Я понимаю что они не должны отличаться, но тем не менее.
В принципе любые ошибки могут быть причиной. Попробуйте сравнить кодировки БД кодировки таблиц и настройки самого битрикса. Может попробовать исправить таблицы в которых есть проблемы?

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

 

Пользователь 127067

Заглянувший

Сообщений: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 29.05.2012

#109

0

16.01.2017 01:10:21

Добрый день!
Столкнулся с такой же проблемой при разворачивании резервной копии на новом сервере.
Предыдущая ВМ 4.3, новая — 7.0
Пароли совпадают, вернее отсутствуют, лог выдает вот такие ошибки:

[Error] Call to undefined function BitrixMainDBmysql_connect() (0)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#0: BitrixMainDBMysqlConnection->connectInternal()
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:103
#1: BitrixMainDBMysqlConnection->queryInternal(string, array, NULL)
/home/bitrix/www/bitrix/modules/main/lib/db/connection.php:329
#2: BitrixMainDBConnection->query(string)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:182
#3: BitrixMainConfigOption::load(string, NULL)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:53
#4: BitrixMainConfigOption::get(string, string, string)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:337
#5: BitrixMainHttpRequest->prepareCookie(array)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:63
#6: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:42
#7: BitrixMainHttpApplication->initializeContext(array)
/home/bitrix/www/bitrix/modules/main/lib/application.php:122
#8: BitrixMainApplication->initializeExtendedKernel(array)
/home/bitrix/www/bitrix/modules/main/include.php:23
#9: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14
#10: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog.php:10
#11: require_once(string)
/home/bitrix/www/bitrix/header.php:1
#12: require(string)
/home/bitrix/www/index.php:2

Подскажите куда копать?

 

Пользователь 888013

Заглянувший

Сообщений: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 19.01.2017

#110

0

19.01.2017 17:18:41

Олег Симуков, та же проблема поставил на 7.0 и все….. Белый екран и надпись. The script encountered an error and will be aborted. To view extended error messages, enable this feature in

.settings.php

. Прочитал все коментарии по теме, решения не нашел. Файлы .settings.php и dbconn.php по данным совпадают. Что делать ума не приложу  :( Может кто то решил проблему, подскажите актуально по сей день.

[Error] Call to undefined function BitrixMainDBmysql_connect() (0)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#0: BitrixMainDBMysqlConnection->connectInternal()
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:103
#1: BitrixMainDBMysqlConnection->queryInternal(string, array, NULL)
/home/bitrix/www/bitrix/modules/main/lib/db/connection.php:329
#2: BitrixMainDBConnection->query(string)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:182
#3: BitrixMainConfigOption::load(string, NULL)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:53
#4: BitrixMainConfigOption::get(string, string, string)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:337
#5: BitrixMainHttpRequest->prepareCookie(array)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:63
#6: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:42
#7: BitrixMainHttpApplication->initializeContext(array)
/home/bitrix/www/bitrix/modules/main/lib/application.php:122
#8: BitrixMainApplication->initializeExtendedKernel(array)
/home/bitrix/www/bitrix/modules/main/include.php:23
#9: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14
#10: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog.php:10
#11: require_once(string)
/home/bitrix/www/bitrix/header.php:1
#12: require(string)
/home/bitrix/www/index.php:2

 

Пользователь 127067

Заглянувший

Сообщений: 5
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 29.05.2012

#111

0

19.01.2017 22:15:06

Цитата
Боря Селезньов написал:
Олег Симуков , та же проблема поставил на 7.0 и все….. Белый екран и надпись. The script encountered an error and will be aborted. To view extended error messages, enable this feature in  .settings.php . Прочитал все коментарии по теме, решения не нашел. Файлы .settings.php и dbconn.php по данным совпадают. Что делать ума не приложу   Может кто то решил проблему, подскажите актуально по сей день.

[Error] Call to undefined function BitrixMainDBmysql_connect() (0)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#0: BitrixMainDBMysqlConnection->connectInternal()
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:103
#1: BitrixMainDBMysqlConnection->queryInternal(string, array, NULL)
/home/bitrix/www/bitrix/modules/main/lib/db/connection.php:329
#2: BitrixMainDBConnection->query(string)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:182
#3: BitrixMainConfigOption::load(string, NULL)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:53
#4: BitrixMainConfigOption::get(string, string, string)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:337
#5: BitrixMainHttpRequest->prepareCookie(array)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:63
#6: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:42
#7: BitrixMainHttpApplication->initializeContext(array)
/home/bitrix/www/bitrix/modules/main/lib/application.php:122
#8: BitrixMainApplication->initializeExtendedKernel(array)
/home/bitrix/www/bitrix/modules/main/include.php:23
#9: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14
#10: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog.php:10
#11: require_once(string)
/home/bitrix/www/bitrix/header.php:1
#12: require(string)
/home/bitrix/www/index.php:2

Мои хостеры помогли. Вот их ответ:

Здравствуйте!

Поле пароля в файлах CMS Bitrix .settings и dbconn.php не может быть пустым.

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

mysql

use mysql;

upd ate user se t password=PASSWORD(‘новый_пароль_базы_данных’) where User=’root’;

FLUSH PRIVILEGES;

service mysqld restart

Для уточнения данной информации обратитесь к официальной документации mysql.

После чего вы сможете указать данный пароль в конфигурационных файлах CMS .settings и dbconn.php.

 

Пользователь 888013

Заглянувший

Сообщений: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 19.01.2017

#112

0

20.01.2017 10:45:19

Олег Симуков, это конечно хорошо что они решили ответить, но у меня в файлах стоит пароль, и когда менял, базы релогал, и всеравно ошибка не пропала. Щас ещё раз попробую  пороздавать права пользователям. Роздам отпишусь

 

Пользователь 888013

Заглянувший

Сообщений: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 19.01.2017

#113

0

20.01.2017 11:19:08

Олег Симуков,увы ничего не помогло, поставил другой пароль на рут, поменял данные в 2 файлах, и тишина…… Я уже просто не знаю в чем проблема..

 

Пользователь 225735

Заглянувший

Сообщений: 21
Баллов: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 05.12.2013

#114

0

21.02.2017 10:55:28

Цитата
Боря Селезньов написал:
Олег Симуков , та же проблема поставил на 7.0 и все….. Белый екран и надпись. The script encountered an error and will be aborted. To view extended error messages, enable this feature in  .settings.php . Прочитал все коментарии по теме, решения не нашел. Файлы .settings.php и dbconn.php по данным совпадают. Что делать ума не приложу   Может кто то решил проблему, подскажите актуально по сей день.

[Error] Call to undefined function BitrixMainDBmysql_connect() (0)
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:45
#0: BitrixMainDBMysqlConnection->connectInternal()
/home/bitrix/www/bitrix/modules/main/lib/db/mysqlconnection.php:103
#1: BitrixMainDBMysqlConnection->queryInternal(string, array, NULL)
/home/bitrix/www/bitrix/modules/main/lib/db/connection.php:329
#2: BitrixMainDBConnection->query(string)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:182
#3: BitrixMainConfigOption::load(string, NULL)
/home/bitrix/www/bitrix/modules/main/lib/config/option.php:53
#4: BitrixMainConfigOption::get(string, string, string)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:337
#5: BitrixMainHttpRequest->prepareCookie(array)
/home/bitrix/www/bitrix/modules/main/lib/httprequest.php:63
#6: BitrixMainHttpRequest->__construct(object, array, array, array, array)
/home/bitrix/www/bitrix/modules/main/lib/httpapplication.php:42
#7: BitrixMainHttpApplication->initializeContext(array)
/home/bitrix/www/bitrix/modules/main/lib/application.php:122
#8: BitrixMainApplication->initializeExtendedKernel(array)
/home/bitrix/www/bitrix/modules/main/include.php:23
#9: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog_before.php:14
#10: require_once(string)
/home/bitrix/www/bitrix/modules/main/include/prolog.php:10
#11: require_once(string)
/home/bitrix/www/bitrix/header.php:1
#12: require(string)
/home/bitrix/www/index.php:2

На VMBitrix7.0.0-centos7.2-VMWare — аналогичная ошибка
На VMBitrix5.1.8-centos6.8-VMWare — ошибки нет

 

Пользователь 259341

Посетитель

Сообщений: 101
Баллов: 8
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 13.05.2014

#115

0

21.02.2017 14:14:53

в .settings.php попробуй прописать \Bitrix\Main\DB\MysqliConnection  

 

Пользователь 450989

Заглянувший

Сообщений: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 31.12.2015

#116

0

29.03.2017 15:17:39

 

Пользователь 99668

Заглянувший

Сообщений: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 23.08.2011

#117

1

08.05.2018 16:52:17

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

1) Переключить в .settings.php параметр debug=true, чтобы видеть детализацию ошибки (и смотрим мало ли чего еще может быть)

Код
array (
     'debug' => true,
     'handled_errors_types' => 4437,
     'exception_errors_types' => 4437,
     'ignore_silence' => false,
     'assertion_throws_exception' => true,
     'assertion_error_type' => 256,
     'log' => NULL,
   ),

2) ‘className’ => ‘\Bitrix\Main\DB\MysqliConnection’

Заменить Mysql на Mysqli

Код
…
array (
       'className' => '\Bitrix\Main\DB\MysqliConnection',
       'host' => 'localhost',
       'database' => '### у каждого своя ###',
       'login' => '### у каждого свой ###',
       'password' => '### у каждого свой',
       'options' => 2,
     ),
…

3) define(«BX_USE_MYSQLI», true);

Добавить параметр в файле bitrix/php_interface/dbconn.php

Код
…
   define("BX_DISABLE_INDEX_PAGE", true);
   define("BX_USE_MYSQLI", true);
?>

4) Возвращаем параметр в файле .settings.php в состояние debug=false в блоке

Код
array (
     'debug' => false,
     'handled_errors_types' => 4437,
     'exception_errors_types' => 4437,
     'ignore_silence' => false,
     'assertion_throws_exception' => true,
     'assertion_error_type' => 256,
     'log' => NULL,
   ),
 

Пользователь 2395123

Заглянувший

Сообщений: 1
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 16.08.2018

#118

0

16.08.2018 12:31:33

Виталий Кравченко, плюсую, получил ответ по этой проблеме из саппорта.Пишут —

Код
Выполните на сайте пару правок.
https://dev.1c-bitrix.ru/community/blogs/vad/the-new-kernel-and-the-mysqli-extension.php
 

Пользователь 1023385

Посетитель

Сообщений: 24
Баллов: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 19.03.2017

#119

0

08.03.2019 11:19:35

Поймал сегодня такой сюрприз!

Дело оказалось в системе автоматического архивирования Битрикс.
При невозможности передать архив в облако Битрикс (а такое просто через раз!) резервные файлы записываются в папку bitrixbackup сайта.
Они просто забили все доступное пространство BitrixVM!
MySQL отказался работать в таких условиях.

Свою проблему решил так:
Вошел в BitrixVM по SSH удалил большую часть архивов (переместил на локальный комп).
root вход в BitrixVM, перезапустил MySQL

Все заработало.

Битрикс!
Надо что-то делать с системой архивации. Это неправильно.
Из 100 случаев восстановления штатной системой резервного копирования сайтов Битрикс 80 не удачные. У меня такая личная статистика.
То архив битый, то старый, то просто не работает.

Хорошо что системами хостеров были сделаны автоматические бекапы.
У нормальных хостеров они не входят в дисковую квоту. И доступен десяток.
На облако Битрикс влазит только одна….. ((

А BitrixVM???!
Там нет возможности создавать резервные копии, всейVM. А ведь надо.
Штатная система резервного копирования сайтов Битрикс постоянно сбоит, да и не хочется заново одну и ту же VM настраивать, это занимает время.
Панель управления типа Brainy (включая аналоги) на BitrixVM не ставится.
Своего аналога у Битрикс нет.

Создал предложения на сайте идей:

https://idea.1c-bitrix.ru/34215/
https://idea.1c-bitrix.ru/33855/

Поддержите голосованием, кто согласен.

 

Пользователь 2946849

Заглянувший

Сообщений: 1
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 13.05.2019

#120

0

13.05.2019 14:40:12

Добрый день, при переходе на корпоративный портал выходило сообщение The script encountered an error and will be aborted. To view extended error messages, enable this feature in

.settings.php

. Сделали то же самое что и Михаил Турунов все заработало, спасибо за наводку

 

Пользователь 410548

Заглянувший

Сообщений: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 14.11.2015

#121

0

18.05.2019 01:06:21

Возникла ощибка

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

.settings.php

Что не так в настройках?
<?php

return array (
 ‘utf_mode’ =>
 array (
   ‘value’ => true,
   ‘readonly’ => true,
 ),
 ‘cache_flags’ =>
 array (
   ‘value’ =>
   array (
     ‘config_options’ => 3600,
     ‘site_domain’ => 3600,
   ),
   ‘readonly’ => false,
 ),
 ‘cookies’ =>
 array (
   ‘value’ =>
   array (
     ‘secure’ => false,
     ‘http_only’ => true,
   ),
   ‘readonly’ => false,
 ),
 ‘exception_handling’ =>
 array (
   ‘value’ =>
   array (
     ‘debug’ => false,
     ‘handled_errors_types’ => 4437,
     ‘exception_errors_types’ => 4437,
     ‘ignore_silence’ => false,
     ‘assertion_throws_exception’ => true,
     ‘assertion_error_type’ => 256,
     ‘log’ => NULL,
   ),
   ‘readonly’ => false,
 ),
 ‘connections’ =>
 array (
   ‘value’ =>
   array (
     ‘default’ =>
     array (
       ‘className’ => ‘\Bitrix\Main\DB\MysqliConnection’,
       ‘host’ => ‘мой’,
       ‘database’ => ‘мой’,
       ‘login’ => ‘мой’,
       ‘password’ => ‘мой’,
       ‘options’ => 2,
     ),
   ),
   ‘readonly’ => true,
 ),
 ‘crypto’ =>
 array (
   ‘value’ =>
   array (
     ‘crypto_key’ => ‘4321fe27fab04873c7de6713d6edb249’,
   ),
   ‘readonly’ => true,
 ),
);

 

Пользователь 410548

Заглянувший

Сообщений: 3
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 14.11.2015

#122

0

18.05.2019 01:11:42

Цитата
yakovluk.andrey написал:
Возникла ощибка

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

.settings.php

Что не так в настройках?
<?php

return array (
 ‘utf_mode’ =>
 array (
   ‘value’ => true,
   ‘readonly’ => true,
 ),
 ‘cache_flags’ =>
 array (
   ‘value’ =>
   array (
     ‘config_options’ => 3600,
     ‘site_domain’ => 3600,
   ),
   ‘readonly’ => false,
 ),
 ‘cookies’ =>
 array (
   ‘value’ =>
   array (
     ‘secure’ => false,
     ‘http_only’ => true,
   ),
   ‘readonly’ => false,
 ),
 ‘exception_handling’ =>
 array (
   ‘value’ =>
   array (
     ‘debug’ => false,
     ‘handled_errors_types’ => 4437,
     ‘exception_errors_types’ => 4437,
     ‘ignore_silence’ => false,
     ‘assertion_throws_exception’ => true,
     ‘assertion_error_type’ => 256,
     ‘log’ => NULL,
   ),
   ‘readonly’ => false,
 ),
 ‘connections’ =>
 array (
   ‘value’ =>
   array (
     ‘default’ =>
     array (
       ‘className’ => ‘\Bitrix\Main\DB\MysqliConnection’,
       ‘host’ => ‘мой’,
       ‘database’ => ‘мой’,
       ‘login’ => ‘мой’,
       ‘password’ => ‘мой’,
       ‘options’ => 2,
     ),
   ),
   ‘readonly’ => true,
 ),
 ‘crypto’ =>
 array (
   ‘value’ =>
   array (
     ‘crypto_key’ => ‘4321fe27fab04873c7de6713d6edb249’,
   ),
   ‘readonly’ => true,
 ),
);

2019-05-16 13:02:25 — Host: bengal.kiev.ua — UNCAUGHT_EXCEPTION — [ParseError]
syntax error, unexpected ‘»,’ (T_CONSTANT_ENCAPSED_STRING), expecting ‘)’ (0)
/home/мой/www/bitrix/php_interface/subscribe/templates/store­_news_02/template.php:19
#0: CPostingTemplate::AddPosting(array)
/home/мой/www/bitrix/modules/subscribe/classes/general/templ­ate.php:132
#1: CPostingTemplate::Execute()
/home/мой/www/bitrix/modules/main/classes/mysql/agent.php(163) : eval()’d code:1
#2: eval
/home/мой/www/bitrix/modules/main/classes/mysql/agent.php:163
#3: CAgent::ExecuteAgents(string)
/home/мой/www/bitrix/modules/main/classes/mysql/agent.php:40
#4: CAgent::CheckAgents()
/home/мой/www/bitrix/modules/main/include.php:264
#5: require_once(string)
/home/мой/www/bitrix/modules/main/include/prolog_before.php:14
#6: require_once(string)
/home/мой/www/bitrix/modules/main/include/prolog.php:10
#7: require_once(string)
/home/мой/www/bitrix/header.php:1
#8: require(string)
/home/мой/www/index.php:2

 

Евгений Жуков

Администратор

Сообщений: 9026
Баллов: 1746
Авторитет:

8

Рейтинг пользователя:

39

Регистрация: 05.08.2005

Epic fail — сказать «это так просто» и не суметь сделать

#123

0

20.05.2019 09:33:35

Цитата
yakovluk.andrey написал:
/home/мой/www/bitrix/php_interface/subscribe/templates/store­­_news_02/template.php:19

Судя по тексту, в предыдущей строке не хватает ;

Не надо сверлить зубы через задний проход дрелью от Сваровски

 

Пользователь 3408043

Заглянувший

Сообщений: 2
Авторитет:

0

Рейтинг пользователя:

0

Регистрация: 31.07.2019

#124

0

02.08.2019 13:03:31

мда. Не знаю как вообще так получилось, что вот 4 раза бэкап работал исправно, а на 5ый раз решил изменить логин и пароль в settings.php, а тех поддержка кое-что на меня клали. 0 отдача, ужасный сервис…

 

Пользователь 345793

Заглянувший

Сообщений: 1
Авторитет:

1

Рейтинг пользователя:

0

Регистрация: 12.02.2019

#125

0

25.09.2019 00:49:15

Очень давно не заходил в админку сайта. Зашёл, что начал обновлять. В итоге белый экран и надпись -«The script encountered an error and will be aborted. To view extended error messages, enable this feature in

.settings.php

.». Не открывается ни сайт, ни админка. Как быть и что делать? Я абсолютный новичёк, и ничего не понял из объяснений выше. Кудп и как сунуться? Насколько я понимаю на компе никаких файлов нет, они все где то…. но где и как туда влезть? Всем спасибо

Если на экране появилась ошибка:

При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php

Открываем файл .settings.php находим debug и заменяем false на true:

'exception_handling' =>
array (
'value' =>
array (
'debug' => false, // изменяем значение на true
'handled_errors_types' => 20853,
'exception_errors_types' => 20853,
'ignore_silence' => false,
'assertion_throws_exception' => true,
'assertion_error_type' => 256,
'log' =>
array (
'settings' =>
array (
'file' => NULL,
'log_size' => NULL,
),
),
),
'readonly' => false,
),

В результате чего на экране будет подробное описание ошибки:

[Error]
Class 'Assets' not found (0)
D:worklocalhost11wwwlocaltemplatesvoguis_indexheader.php:17
#0: include_once
D:worklocalhost11wwwbitrixmodulesmainincludeprolog_after.php:96
#1: require(string)
D:worklocalhost11wwwbitrixmodulesmainincludeprolog.php:11
#2: require_once(string)
D:worklocalhost11wwwbitrixheader.php:1
#3: require(string)
D:worklocalhost11wwwindex.php:2

Bitrix Framework имеет ряд специфичных настроек ядра, которые не имеют визуального интерфейса редактирования. Этот подход вызван тем, что изменение настроек или ошибка в них легко могут привести к неработоспособности системы (настройки подключения к базе данных, настройки кеширования и т.д.).

Настройки в новом ядре выполняются в файле /bitrix/.settings.php. В старом ядре аналогичные настройки выполнялись в файле /bitrix/php_interface/dbconn.php. Файл .settings.php структурно сильно отличается от прежнего dbconn.php.

В Битрикс параллельно используются 2 ядра — старое и новое, соответственно, оба файла настроек используются одновременно. Поэтому необходимо производить настройки обоих файлов.

Даже если используется код только старого ядра, то файл .settings.php должен быть создан. Возможна ситуация, когда при установке обновлений какой-то из встроенных механизмов системы будет переписан на новое ядро. Если этот файл корректно не настроен, то это может привести к неработоспособности системы.

Иногда бывают ситуации, что файл .settings.php отсутствует. Его можно создать в автоматическом режиме, если выполнить в командной строке:

BitrixMainConfigConfiguration::wnc();

Если на экране появилась ошибка

При выполнении скрипта возникла ошибка. Включить расширенный вывод ошибок можно в файле настроек .settings.php

то открываем файл .settings.php

'exception_handling' => 
  array (
    'value' => 
    array (
      'debug' => false, // изменяем значение на true
      'handled_errors_types' => 20853,
      'exception_errors_types' => 20853,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => 
      array (
        'settings' => 
        array (
          'file' => NULL,
          'log_size' => NULL,
        ),
      ),
    ),
    'readonly' => false,
  ),

находим debug и заменяем false на true. В результате чего на экране будет подробное описание ошибки:

[Error] 
Class 'Assets' not found (0)
D:worklocalhost11wwwlocaltemplatesvoguis_indexheader.php:17
#0: include_once
    D:worklocalhost11wwwbitrixmodulesmainincludeprolog_after.php:96
#1: require(string)
    D:worklocalhost11wwwbitrixmodulesmainincludeprolog.php:11
#2: require_once(string)
    D:worklocalhost11wwwbitrixheader.php:1
#3: require(string)
    D:worklocalhost11wwwindex.php:2

Поиск:
.settings.php • CMS • PHP • Web-разработка • Битрикс • Ошибка • .settings.php • dbconn.php • debug • Настройка • Ядро

Каталог оборудования

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Производители

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Функциональные группы

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

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

Как появляются сообщения об ошибках скрипта

Когда возникает ошибка скрипта, вы обычно видите сообщение вроде этого:

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

Причина появления сообщений об ошибках скрипта

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

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

Как исправить ошибку скрипта

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

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

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

Если это проблема с вашей стороны, то обновление веб-браузера, переключение на другой веб-браузер или изменение некоторых настроек в вашем браузере обычно решит проблему.

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

    • Чтобы принудительно перезагрузить веб-страницу в Windows: удерживайте Ctrl + F5 .
    • Для того, чтобы заставить веб — страницу для перезагрузки на MacOS: Удержание Ctrl + Shift + R .
  2. Microsoft Edge обновляется автоматически вместе с Windows. Если у вас возникли проблемы с Центром обновления Windows, существуют другие способы обновления Windows .

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

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

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

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

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

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

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

  8. Отключить аппаратное ускорение. Аппаратное ускорение — это функция, которая позволяет вашему веб-браузеру задействовать всю мощь вашей видеокарты. В некоторых случаях включение этой функции нарушит работу определенных сценариев. Отключение позволяет этим скриптам работать нормально. Вы можете отключить аппаратное ускорение в Chrome и отключить аппаратное ускорение в Firefox .

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

    Если это не сработает, вы также можете просто сбросить настройки браузера сразу. Вы можете быстро восстановить Chrome до его состояния по умолчанию, обновить Firefox , сбросить Microsoft Edge и сбросить Safari .

  10. Ждите вебмастера. Если вы по-прежнему сталкиваетесь с ошибками сценария после выполнения всех этих исправлений, скорее всего, существует проблема со сценарием на веб-сайте, который вы пытаетесь использовать. Это особенно вероятно, если вы видите ошибку сценария только при посещении определенного веб-сайта или веб-сайтов. Поскольку это вне вашего контроля, вам просто нужно подождать, пока веб-мастер веб-сайта решит проблему.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • При выполнении запроса произошла неизвестная ошибка теле2
  • При выполнении запроса произошла неизвестная ошибка мегафон