Как включить вывод ошибок PHP
Хостинг-провайдеры нередко отключают или блокируют вывод всех ошибок и предупреждений. Такие ограничения вводятся не просто так. Дело в том, что на рабочих серверах крайне не рекомендуется держать ошибки в открытом доступе. Информация о неисправностях может стать «наживкой» для злоумышленников.
При этом в процессе разработки сайтов и скриптов, очень важно отслеживать возникающие предупреждения. Знать о сбоях и неисправностях также важно и системным администраторам — это позволяет предотвратить проблемы на сайте или сервере.
Самый оптимальный вариант — не просто скрыть показ ошибок, но и настроить запись о них в логах. Это позволит отслеживать предупреждения и не подвергать сервер угрозе.
В статье мы расскажем, как включить и отключить через .htaccess вывод ошибок php, а также двумя другими способами — через скрипт PHP и через файл php.ini.
Обратите внимание: в некоторых случаях изменение настроек вывода возможно только через обращение в техническую поддержку хостинга.
Через .htaccess
Перейдите в каталог сайта и откройте файл .htaccess.
Вариант 1. Чтобы включить вывод, добавьте следующие строки:
php_flag display_startup_errors on php_flag display_errors on php_flag html_errors on
Чтобы отключить ошибки PHP htaccess, введите команду:
php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off
Также выключить .htaccess display errors можно командой:
php_flag display_startup_errors off php_flag display_errors off php_flag html_errors off php_value docref_root 0 php_value docref_ext 0
Через логи PHP
Если вам нужно проверить или выключить ошибки только в определенных файлах, это можно сделать с помощью вызова PHP-функций.
Вариант 1. Чтобы включить вывод, используйте команду error_reporting. В зависимости от типа ошибок, которые вы хотите увидеть, подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
error_reporting(E_ALL)
А для всех типов, исключая тип Notice, так:
error_reporting(E_ALL & ~E_NOTICE)
Чтобы отключить вывод, введите команду:
error_reporting(0)
Чтобы отключить логирование повторяющихся ошибок, введите:
# disable repeated error logging php_flag ignore_repeated_errors on php_flag ignore_repeated_source on
Вариант 2. Чтобы проверить конкретный кусок кода, подойдет команда ниже. В зависимости от типа ошибок, которые вы хотите увидеть, в скобках подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
ini_set('display_errors', 'On') error_reporting(E_ALL)
После этого в консоли введите:
ini_set('display_errors', 'Off')
Вариант 3. Ещё один из вариантов подключения через скрипт:
php_flag display_startup_errors on php_flag display_errors on
Для отключения укажите:
php_flag display_startup_errors off php_flag display_errors off
Вариант 4. Чтобы настроить вывод с логированием через конфигурацию веб-сервера, введите:
- для Apache —
ErrorLog «/var/log/apache2/my-website-error.log»
, - для Nginx —
error_log /var/log/nginx/my-website-error.log
.
Подробнее о других аргументах читайте в документации на официальном сайте php.net.
Через файл php.
iniНастроить отслеживание также можно через файл php.ini. Этот вариант подойдет, когда отображение или скрытие ошибок нужно настроить для всего сайта или кода. Обратите внимание: возможность настройки через файл php.ini есть не у всех, поскольку некоторые хостинг-провайдеры частично или полностью закрывают доступ к файлу.
Вариант 1. Если у вас есть доступ, включить вывод можно командой:
display_errors = on
После этого нужно перезагрузить сервер:
sudo apachectl -k graceful
Вариант 2. Чтобы включить вывод, используйте команду error_reporting. В зависимости от типа ошибок, которые вы хотите увидеть, после знака = подставьте нужное значение. Например, команда для вывода всех ошибок будет выглядеть так:
error_reporting = E_ALL display_errors On
После ввода перезагрузите сервер:
sudo apachectl -k graceful
Чтобы скрыть отображение, во второй строке команды укажите Оff вместо On:
display_errors Off
Теперь вы знаете, как настроить не только через PHP и php. ini, но и через htaccess отображение ошибок.
Помогла ли вам статья?
Да
4
раза уже
помогла
Вывод ошибок в .settings.php | Для разработчиков
Если у вас на сайте произошла ошибка, но она не отображается и выводиться надпись о том, что ошибки нужно включить в файле .settings.php, то значит они у вас отключены в этом файле.
Включить их просто, для этого надо собственно открыть этот файл по FTP или через функционал Битрикс по следующему пути в админке битрикс
Рабочий стол->Контент->Структура сайта->Файлы и папки->bitrix
Здесь представлен многомерный массив данных, ключ-значение. Это основные настройки вашего сайта на битриксе.
Что бы включить отображение ошибок находим строку ‘debug’ которая находится внутри ‘exception_handling’->’value’ и ставим ей значение true вместо false.
Что бы настроить какие именно ошибки мы хотим отображать в ключе ‘exception_errors_types’ указываем код ошибок, например 29687, но он мало понятен, поэтому лучше использовать в значение данного ключа константы через пробел:
‘handled_errors_types’ => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_DEPRECATED,
Здесь мы перечислили все ошибки, предупредения и тд. Если нужно вывести только ошибки, то остальные константы можно просто убрать, поскольку уведомление
Загрузка
9656 просмотров
04.05.2019
Теги: 1с-битрикс
Комментариев пока нет
Оставить комментарий
Статьи
- 1С-Битрикс (17)
- Apache (2)
- CSS (1)
- HTML (1)
- Java (2)
- JavaScript (1)
- JQuery (2)
- MS-DOS (2)
- PHP (5)
- SEO (5)
- Windows (1)
- Безопасность (2)
- Браузер (2)
- Заработок / Работа (2)
- Новые технологии (2)
- Операторы связи (6)
- Платежные системы (1)
- Программы (2)
- Фриланс (3)
Сервисы
Найти среднюю оценку
Прибавить или вычесть процент
Калькулятор процентов
Калькулятор соотношения сторон пропорции ширины и высоты
Калькулятор стоимости кафеля (плитки)
Калькулятор стоимости длины
Калькулятор цен по весу
Калькулятор сравнения (разницы) цен
Калькулятор стоимости товара
Тетрис на Двоих
Проверка домена (whois)
Последние публикации
24.
В проверке сайте можно наблюдать такую ошибку
Работа …
17.июл.2021 Как передать Roistat в заказ 1С-Битрикс
Передать ID Roistat можно в сам заказ в Битриксе после его о…
21.июн.2021 Сбой на файле, ошибка распаковки пакета
При очередном обновлении 1С-Битрикс выскочила ошибка [UUGZA0…
03.июн.2020 Не выводиться заглушка в композитном кеше
Столкнулся с тем, что при указании заглушки в динамической о…
01.апр.2020 Установка SSL сертификата LetsEncrypt на BitrixVM
Установка SSL сертификата LetsEncrypt на виртуальную машину …
07.мар.2020 Битрикс настройка SSL, ошибка работы с сокетами
Заходим в меню битрикса выбираем 8. Manage pool web servers …
14.ноя.2019 Не выгружаются заказы в 1С
Не выгружаться заказы в 1С из сайта на битрисе могут по разн. ..
07.ноя.2019 Видео youtube на фон сайта
Как-то на сайт мне нужно было вывести видео на весь экран, к…
05.ноя.2019 Свойство с большим списком (датой)
Если в инфоблоке необходимо использовать свойство типа списо…
05.ноя.2019 Основные настройки BitrixVM
Приведу основные пути и файлы конфигурации в виртуальной маш…
ошибок и исключений PHP | PHP на Pantheon
Подробная информация об основных ошибках PHP на вашем сайте Pantheon Drupal или WordPress.
Обсудить на нашем форуме Обсудить в SlackРедактировать эту страницу на GitHub | Сообщить о проблеме с этим документом
В этом разделе содержится информация о том, как интерпретировать и устранять ошибки PHP.
Существует три основных типа ошибок PHP:
- Уведомление : возможности для улучшения. Обычно это вызвано неустановленными переменными или отсутствующими ключами массива.
- Предупреждение : возможно возникновение ошибок, если их не устранить.
- Ошибка : фатальная, выполнение прекращено. Часто известный как «белый экран смерти».
Дополнительную информацию см. в разделе Обработка ошибок и ведение журнала.
Каждая из ошибок PHP обрабатывается по-разному в зависимости от среды сайта. В Dev и Test ошибки отображаются непосредственно пользователю в браузере. В Live ошибки PHP не отображаются для пользователей, но все равно регистрируются. Уведомления и предупреждения регистрируются в журналах базы данных, если db_log
включен для Drupal. Константы PHP WP_DEBUG
и WP_DEBUG_LOG
можно включить, чтобы WordPress сохранял ошибки в wp-content/debug.log
. Ошибки PHP также регистрируются в контейнере приложения по адресу logs/php-error.log
.
Вот разбивка того, какие ошибки отображаются и где:
Окружающая среда | Серьезность 350014 Browser | Watchdog | logs/php-error. log | |
Dev | notice | ✓ | ✓ | |
Предупреждение | ✓ | ✓ | ||
Ошибка | ||||
.0045 ✓ | ✓ | |||
Test | notice | ✓ | ||
warning | ✓ | |||
Ошибка | ✓ | ✓ | ||
Live | ||||
0003 | notice | ✓ | ||
warning | ✓ | |||
error | ✓ |
Дополнительную информацию см. в лог-файлах на Pantheon.
Ошибка — это проблема, которую необходимо устранить независимо от серьезности. Любая ошибка PHP резко снижает скорость выполнения PHP. Даже если вы не видите ошибку в своем браузере и явно отключили ведение журнала, каждая ошибка PHP будет замедлять работу вашего сайта.
Если ведение журнала базы данных включено, ваш сайт будет работать еще медленнее, требуя записи в базу данных для каждой ошибки. Однако отключение ведения журнала не решает проблему, а только скрывает симптом.
Лучше всего исправлять все уведомления, предупреждения и ошибки по мере их обнаружения. Если они находятся в расширении (плагин WordPress или модуль Drupal), установите патч и отправьте его в очередь задач проекта.
Обратитесь к этой ветке stackoverflow для получения более подробной информации, включая эталонные тесты, которые сравнивают различия между подавлением уведомлений и фактическим устранением основной причины.
Исключение PHP — это механизм для определения ошибок и способов их обработки. Обратитесь к документации PHP по исключениям для получения дополнительной информации.
Исключения PHP — это ошибки, и в зависимости от серьезности они могут привести к сбою вашего сайта. Поскольку исключения создаются в коде, а не самим PHP, они не регистрируются в файле журнала ошибок PHP и не отображаются на панели управления Pantheon. По умолчанию Drupal регистрирует исключения в Watchdog.
Обычно запрос к Drupal или WordPress начинается с чтения index.php
в корневом каталоге, который затем загружает сайт.
Однако, когда файл PHP запрашивается напрямую (например, https://example.com/path/to/phpfile.php
), файл index.php
и процесс начальной загрузки пропускаются. Вместо этого файл PHP выполняется сам по себе, и любая функция, включенная, но не определенная в файле, вызовет фатальную ошибку Call to undefined function
.
Например, следующая ошибка PHP сообщает о phpfile.php
файл в строке xx
для вызова some_function()
, который еще не определен: Вызов неопределенной функции [some_function()] в [path/to/phpfile. php:xx]
Устранение неполадок, связанных с ошибками неопределенных функций
Используйте следующие методы отладки для исследования сообщений об ошибках неопределенных функций:
- Найдите вызывающую ошибку функцию в другом месте кодовой базы, чтобы убедиться, что она определена где-то в проекте.
- Проверьте отчетный файл PHP при полной загрузке. Вместо прямого доступа к указанному файлу PHP (например,
https://example.com/path/to/phpfile.php
) перейдите на страницу, содержащую этот файл (например,https://example. com/some-page/
), чтобы увидеть, возникает ли та же ошибка при полной загрузке сайта. - Просмотрите
nginx-access.log
на наличие запросов к указанному файлу PHP.
Если вы видите, что прямые запросы к файлам PHP вызывают фатальные ошибки неопределенных функций (часто вызванные трафиком ботов), используйте pantheon.yml
файл конфигурации для установки защищенных веб-путей. Обратитесь к файлам конфигурации Pantheon YAML для получения дополнительной информации. Это останавливает доступ к файлу в Интернете, сохраняя при этом файл доступным для PHP во время начальной загрузки. При прямом доступе защищенные пути и файлы возвращают ответ сервера 403 Access Denied.
Мы также рекомендуем отправить карту сайта и указать ботам сканировать только указанные пути, указанные в файле robots.txt
. Дополнительные сведения см. в разделе Боты и индексирование в Pantheon.
При импорте сайта или включении некоторых новых модулей на вашем сайте разработки могут появиться уведомления PHP, о которых раньше никогда не сообщалось. Эти уведомления теперь очевидны из-за строгого уровня отчетов об ошибках в среде разработки.
Пример уведомления может выглядеть следующим образом:
Примечание: Неопределенный индекс: описание в theme_imagefield_image_imagecache_lightbox2() (строка 163 файла /srv/bindings/xxxxxxxxx/code/sites/all/modules/contrib/lightbox2/lightbox2. formatter.inc )..
Почему PHP сообщает об этом?
Объявление переменной не требуется PHP, но это рекомендуемая практика, которая может помочь избежать уязвимостей или ошибок в системе безопасности, если кто-то забудет предоставить значение переменной, которая будет использоваться позже. PHP выдает E\_NOTICE
, ошибку очень низкого уровня, как напоминание.
Никто не собирается выкручивать вам руки по поводу устранения этих уведомлений, но Pantheon считает, что их появление в среде разработки поможет разработчикам решить потенциальные проблемы в будущем до того, как они возникнут, следуя рекомендациям.
Функция require\_once()
просто проверяет, был ли уже включен файл. Если нет, то он будет включен при проверке.
Когда появляется эта ошибка, это просто означает, что рассматриваемый файл находится не там, где должен быть. Например, ошибка будет выглядеть примерно так:
Неустранимая ошибка: require_once(): Не удалось открыть требуемый '/srv/bindings/xxxxx/code/sites/all/modules/redis/redis. autoload.inc' (include_path= '.:/usr/share/pear:/usr/share/php') в /srv/bindings/xxxxxx/code/includes/bootstrap.inc в строке 2394
Найдите правильный путь к файлу и обновите require\_once()
, чтобы исправить эту ошибку.
Дополнительные сведения см. в разделе Отладка прерывистых уведомлений PHP 7, если вы сталкиваетесь с прерывистыми уведомлениями, поведение которых отличается от описанного на этой странице. Это не обычное поведение, и вы должны попытаться решить эту проблему немедленно.
- Медленный журнал PHP
Улучшение сообщений об ошибках PHP в IIS 7
- Статья
- 5 минут на чтение
от Тали Смит
Ошибки PHP часто не предоставляют достаточно подробностей, чтобы помочь диагностировать ошибки, возникающие в рамках.
Информационные службы Интернета (IIS) улучшают обработку ошибок PHP, перехватывая распространенные состояния ошибок и обеспечивая перенаправление для общих кодов состояния HTTP.
По умолчанию службы IIS настроены на отправку подробных сообщений об ошибках локальным клиентам и общие сообщения об ошибках удаленным клиентам. Это сделано для обеспечения эффективного локального устранения неполадок и защиты производственных приложений от раскрытия конфиденциальных сведений удаленным клиентам при возникновении ошибок.
IIS создает очень подробные сообщения об ошибках для большинства ошибок. Они содержат, как минимум, информацию о запросе и ошибке, в том числе о том, какой модуль сгенерировал ошибку и на каком этапе обработки запроса. Для ошибок, вызванных IIS и его встроенными модулями, ошибки также содержат вероятные решения. Это значительно упрощает процесс устранения большинства ошибок.
В этой статье, основанной на практических занятиях в учебном комплекте PHP для Windows, описывается, как IIS обеспечивает обработку основных ошибок и как IIS диагностирует ошибки на уровне приложения, активируя сообщения об ошибках PHP.
Базовая обработка ошибок
IIS улучшает обработку ошибок PHP, перехватывая распространенные состояния ошибок и обеспечивая перенаправление для общих кодов состояния HTTP.
Обратите внимание, что IIS также поддерживает сообщения об ошибках, генерируемые платформами приложений, которые часто предлагают информацию о приложении, помогающую диагностировать ошибки приложения. Например, Microsoft® ASP.NET использует это преимущество для предоставления подробной трассировки стека исключений и другой информации.
Если вы запросите страницу http://localhost:84/notfound.php
из Windows® Internet Explorer®, вы получите стандартную ошибку «Не найдено» — неописательную страницу ошибки 404.
Рис. 1. Неописательное сообщение об ошибке 404
Стандартное сообщение об ошибке IIS «Не найдено» содержит полезную информацию, помогающую диагностировать состояние ошибки; он правильно идентифицирует ошибку и предлагает решения для наиболее распространенных ошибок, предоставляя такую информацию, как источник (модуль, уведомление) ошибки и справочную информацию, такую как URL-адрес, сопоставленный физический путь и используемый метод аутентификации. Например:
- Информация ответа: HTTP 404 не найден.
- Подробная информация об ошибке: модуль (веб-ядро IIS), уведомление (MapRequestHandler), обработчик (StaticFileHandler) и код ошибки (0x80070002 — файл не найден).
- Информация о запросе: запрошенный URL-адрес и физический путь
C:\inetpub\troubleshootingPhp\notfound.txt
. - Раздел «Наиболее вероятные причины» правильно предлагает наиболее вероятную причину ошибки: «Указанный каталог или файл не существует на веб-сервере».
- В разделе «Что вы можете попробовать» предлагается соответствующее решение: «Создайте содержимое на веб-сервере».
Рисунок 2: Подробное сообщение об ошибке 404
Вы также можете получить подробные сведения об ошибках IIS для некоторых ошибок PHP, настроив IIS для выполнения дополнительной проверки запросов PHP.
Чтобы настроить IIS для обеспечения дополнительной проверки запросов PHP, выполните следующие действия:
Переключитесь на IIS Manager . Если он закрыт, щелкните Пуск , а затем выберите Диспетчер информационных служб Интернета (IIS) .
В дереве слева щелкните узел сервера.
В разделе IIS дважды щелкните Сопоставления обработчиков , чтобы изменить сопоставление обработчика PHP.
Щелкните правой кнопкой мыши запись PHP через FastCGI и выберите Изменить .
Нажмите Ограничения запроса .
Установите флажок Вызывать обработчик, только если запрос сопоставлен с .
Оставьте выбранной кнопку выбора Файл .
Нажмите OK дважды.
Нажмите Да в диалоговом окне Редактировать сопоставление модулей .
Для проверки снова активируйте условие «Не найдено», чтобы убедиться, что ошибка PHP 404 теперь обрабатывается IIS, предоставляя более подробную информацию. Использование Internet Explorer , запрос
http://localhost:84/notfound.php
(эта страница не существует).Вы получаете подробное сообщение об ошибке IIS, указывающее, что страница Notfound.php не найдена на сервере.
Подробная информация об ошибке IIS 401.3 Unauthorized также предоставляет информацию; это указывает на то, что у запроса нет разрешения на просмотр страницы из-за конфигурации списка управления доступом (ACL), и предоставляет подробное объяснение того, как решить эту проблему.
Рис. 3. Ошибка «Отказано в доступе»
Включить сообщения об ошибках PHP для диагностики ошибок на уровне приложений
Настройка IIS для проверки запросов приводит к тому, что IIS пытается открыть файл сценария PHP, соответствующий URL-адресу запроса, и генерирует подробные сообщения об ошибках для любых условий, которые исключают это. Обычно это:
- Файл не найден
- Доступ запрещен из-за неправильных разрешений
- Доступ запрещен из-за недостаточной аутентификации
- Для большинства других ошибок, особенно тех, которые возникают на уровне приложения, подробные сообщения об ошибках IIS не содержат достаточной информации для эффективной диагностики ошибки.
Крупнейшими примерами таких ошибок являются ошибки синтаксического анализа и интерпретации сценариев. Несмотря на то, что для этих ошибок можно принудительно выводить подробные сообщения об ошибках IIS, обычно это не дает никакого значения при диагностике основной причины ошибки. В этих случаях вы должны полагаться на информацию, предоставленную PHP, для диагностики этих ошибок.
По умолчанию PHP не настроен на отображение этих ошибок в ответе, чтобы предотвратить раскрытие конфиденциальной информации.
Обратите внимание, что для локальной отладки можно включить отображение ошибок PHP, чтобы диагностировать ошибки PHP во время отладки. Рассмотрите возможность отключения отображения ошибок PHP для рабочих приложений.
Если вы запрашиваете страницу с ошибкой сценария, вы получаете подробное сообщение об ошибке IIS. Это происходит потому, что по умолчанию PHP не генерирует ответ с подробной информацией об ошибке, поэтому IIS вставляет свою общую подробную ошибку «500 Server Error». Хотя эта ошибка правильно предполагает, что PHP вернул код ошибки 500, она не предоставляет специфичной для приложения информации о том, что вызвало ошибку.
Вы можете настроить PHP для отображения ошибок в ответах.
С помощью проводника Windows® перейдите к
C:\PHP
.Откройте файл Php.ini в каталоге установки PHP.
Найдите и установите директиву display_errors = On :
<< ; Распечатать ошибки (как часть вывода). Для производственных веб-сайтов, ; вам настоятельно рекомендуется отключить эту функцию и использовать ведение журнала ошибок. ; вместо этого (см. ниже). Включение display_errors на рабочем веб-сайте ; может раскрывать конечным пользователям информацию о безопасности, такую как пути к файлам на вашем веб-сайте. ; сервер, схема вашей базы данных или другая информация. ; ; возможные значения для display_errors: ; ; Off — не отображать никаких ошибок; stderr - Отображать ошибки в STDERR (влияет только на двоичные файлы CGI/CLI!) ; On или stdout — отображать ошибки в STDOUT (по умолчанию) ; ; Чтобы вывести ошибки в STDERR с помощью CGI/CLI: ; display_errors = "stderr" ; ; По умолчанию ; display_errors = Вкл. >>
Сохраните и закройте файл.
Сброс IIS. Щелкните Пуск , а затем выберите Командная строка , щелкните правой кнопкой мыши и выберите Запустить от имени администратора , чтобы открыть окно командной строки.
Тип iisreset.exe
Нажмите Введите .
Если сейчас запросить страницу с ошибкой скрипта, вы получите ошибку синтаксического анализа PHP:
<< Ошибка синтаксического анализа: ошибка синтаксического анализа в C:\inetpub\troubleshootingPhp\error.php в строке 3 >>
Если вы видите только страницу внутренней ошибки сервера Internet Explorer HTTP 500 по умолчанию, вы должны отключить понятные сообщения об ошибках. В Internet Explorer Перейдите на вкладку Инструменты , Свойства обозревателя , Дополнительно и снимите флажок Показать понятные сообщения об ошибках HTTP .