Налагоджувальні засоби
Системные функции
//
- phpinfo(int $flags = INFO_ALL): bool отправляет в выводной поток информацию о всех параметрах PHP или параметрах выбранного флага, которые содержат информацию о настройках компиляции PHP, о модулях, версии, сервере и среде выполнения, окружении, версии ОС, путях, основных и локальных значениях настроек конфигурации, HTTP-заголовках и лицензии PHP
- ini_set(string $option, string|int|float|bool|null $value): string|false устанавливает значение заданного параметра конфигурации, которое будет действовать до завершения скрипта, а после завершения вернется к исходному
- ini_set('log_errors', true) включает логирование ошибкок
- ini_set('error_log', '/home/reks/domains/reks.biz/logs/php-error-log' ) назначает файл для логирование ошибок
- ini_set('display_errors', 1) устанавливает вывод ошибок на экран вместе с остальным выводом, применяется только для разработки и отладки
- и другие... //www.php.net
- php_sapi_name(): string|false возвращает тип интерфейса (Server API, SAPI), который использует PHP
- 'cli' указывает на вызов в командной строке консоли
- неполный список других значений: apache, apache2handler, cgi, cgi-fcgi, cli-server, embed, fpm-fcgi, litespeed, phpdbg
//
//
- syslog(int $priority, string $message): true записывает строковое сообщение в системный журнал
- priority комбинация типа и уровня по убыванию:
- LOG_EMERG система непригодна
- LOG_ALERT необходимы незамедлительные меры
- LOG_CRIT критические условия
- LOG_ERR условия ошибки
- LOG_WARNING условия предупреждения
- LOG_NOTICE нормальные, но значительное условие
- LOG_INFO информационное сообщение
- LOG_DEBUG сообщение отладки
- priority комбинация типа и уровня по убыванию:
Функции обработки ошибок
//www.php.net/manual/ru/ref.errorfunc.php
//
- error_reporting(?int $error_level = null): int устанавливает "уровень" реакции PHP на ошибки;
- error_level является битовой маской, образованной произвольной битовой суммой из 15ти констант:
- E_ERROR фатальные ошибки выполнения, неустранимые средствами скрипта, прекратившие его выполнение
- E_WARNING предупреждения о не фатальных ошибках выполнения, после которых выполнение было продолжено
- E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE ошибки, предупреждения и уведомления, сгенерированные пользователем средствами функции trigger_error()
- E_ALL все поддерживаемые ошибки, предупреждения и замечания (полная битовая маска)
- и другие //www.php.net
- error_level является битовой маской, образованной произвольной битовой суммой из 15ти констант:
- error_log( string $message, int $type = 0, ?string $destination = null, ?string $extra_headers = null ): bool отправляет строку с сообщением об ошибке message в лог, в почту, в файл или обработчику
- type тип обработки сообщения:
- 0 (по умолчанию) отправляет сообщение в системный регистратор (как задано конфигурацией PHP)
- 1 отправляет сообщение электронной почтой на адрес destination
- специальные заголовки в сообщение можно добавить в extra_headers
- 3 записывает сообщение в файл destination
- не выполняет автоматический переносом строк
- 4 отправляет сообщение в обработчик логера SAPI
- type тип обработки сообщения:
Ошибка 500 (Internal Server Error)
При выполнении PHP ошибка сервера 500 может произойти и не оставить никаких следов в логах, несмотря на команды логирования, если произойдет на этапе синтаксической проверки до начала выполнения php-команд. Поиск источника такой ошибки может стать проблемой слепого поиска "черной кошки в темной комнате".
В такой ситуации следует создать другой отладочный скрипт и вызвать скрипт с ошибкой из него:
1 2 3 4 5 6 7 |
<?php ini_set('log_errors', true); ini_set('error_log', '/home/reks/domains/reks.biz/logs/php-error-log'); ini_set('display_errors', 1); error_reporting(E_ALL); include('myscript.php'); ?> |
Функции !!!
//
- set_time_limit(int $seconds): bool задает время в секундах, в течение которого скрипт должен завершить работу, если скрипт не успевает, вызывается фатальная ошибка; по умолчанию даётся 30 секунд, либо время, записанное в настройке max_execution_time в php.ini (если такая настройка установлена).
debug_backtrace
debug_backtrace(int $options = DEBUG_BACKTRACE_PROVIDE_OBJECT, int $limit = 0): array выводит стек вызовов функций PHP в массив
- DEBUG_BACKTRACE_PROVIDE_OBJECT Нужно ли заполнять данные для ключа object
- DEBUG_BACKTRACE_IGNORE_ARGS Нужно ли исключить аргументы всех функций/методов в ключе "args" для уменьшения расхода памяти
1 2 3 4 5 |
file_put_contents( '/home/reks/reks.biz/www/debug_backtrace', json_encode( debug_backtrace( ), JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT ), FILE_APPEND ); |
Пример:
1 2 3 4 5 6 7 8 |
<?php function super( $a) { demo( $a + 1 ); } function demo( $b ) { $c = debug_backtrace(); } super( 1 ); |
Результат вызова - сведения стека вызовов представленные индексированным массивом ассоциативных массивов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[ { "file": "/home/reks/reks.biz/www/demo.php", "line": 3, "function": "demo", "args": [ 2 ] }, { "file": "/home/reks/reks.biz/www/demo.php", "line": 9, "function": "super", "args": [ 1 ] } ] |
//