Больнее всего от каких-то часто используемых/общих методов:
PHP Fatal error: Call to a member function smthd() on null in /var/www/some/factory/generic.php on line 13 PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 30148784 bytes) in /var/www/bitrix/modules/main/lib/text/string.php on line 24 |
К сожалению PHP 5.x (в PHP 7.x есть
Из всех "не улавливаемых" ошибок наиболее любопытен
Так родился небольшой PHP-extension
Собирается как и любое другое расширения (детально описано в README)
Пример использования:
fatal_error_handler(function($code, $message, $file, $line) { echo "Args: \n"; var_dump(func_get_args()); echo "Trace: \n"; debug_print_backtrace(); }); function test_error() { fatal(); } test_error(); |
Args: array(4) { [0]=> int(1) [1]=> string(34) "Call to undefined function fatal()" [2]=> string(26) "/home/buglloc/tmp/test.php" [3]=> int(10) } Trace: #0 {closure}(1, Call to undefined function fatal(), /home/buglloc/tmp/test.php, 10) called at [/home/buglloc/tmp/test.php:10] #1 test_error() called at [/home/buglloc/tmp/test.php:13] |
<?php require_once __DIR__ . '/handler.php'; $handler = new ErrorHandler; $handler->register(); function foo() { fatal(); } function bar() { foo(); } // warning strpos(); // fatal bar(); |
E_WARNING: strpos() expects at least 2 parameters, 0 given in /home/buglloc/work/projects/php-fatal-handler/demo/test.php:16 #1 /home/buglloc/work/projects/php-fatal-handler/demo/test.php(16): strpos() #2 {main} E_ERROR: Call to undefined function fatal() in /home/buglloc/work/projects/php-fatal-handler/demo/test.php:9 #1 /home/buglloc/work/projects/php-fatal-handler/demo/test.php(13): foo() #2 /home/buglloc/work/projects/php-fatal-handler/demo/test.php(19): bar() #3 {main} Ooops |
Расширение должно работать со всей линейкой поддерживаемых версий PHP от 5.3 до 5.6, в том числе и с ZTS. За счет минимального оверхеда можно использовать в продакшене не боясь за производительность.
Если будут какие-то вопросы, предложения, замечания можете адресовать их в
Всем благ;)
в php 7 все прекрасно отлавливается.
PHP 7 не так давно вышел и на многих проектах по тем или иным причинам еще долгое время будет пятая версия, имхо. А между тем, что-то же делать нужно?