<< Новое в PHP 7: оператор объединения со значением NULL Шпаргалка по валидаторам в Yii2 >>

Как в PHP узнать строку, на которой прервалось исполнение

При работе со старым кодом иногда очень сложно найти место, на котором прервалось исполнение. Конструкции типу dieexit и т.д. - очень плохая практика, но много легаси кода (и не только - я ничего плохого не говорю о Wordpress, так что молчу) ими злоупотребляют. Одна из самых больших проблем подобных конструкций - то, что их сложно найти и отладить. (Используйте exception!)

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

<?php

function shutdown_find_exit()
{
    file_put_contents(
        __DIR__ . '/tmp/' . uniqid('', true) . '.dump',
        var_export($GLOBALS['dbg_stack'], true)
    );
}

register_shutdown_function('shutdown_find_exit');

function write_dbg_stack()
{
    $GLOBALS['dbg_stack'] = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
}

register_tick_function('write_dbg_stack');
declare(ticks=1);

Этот код стоит поместить в самом начале фронт-контроллера (или скрипта). На каждом тике он записывает backtrace, и в случае прерывания исполнения все записывает в файл tmp/uniq_name (если нужно - поменяйте название), который позже можно проанализировать.



17.05.2019 98 Gor Abrahamyan -> web developer : views