Подтвердить что ты не робот

Самый быстрый способ определить, где выйдет PHP скрипт

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

Есть ли программа/программа/команда/IDE, которая может, при завершении PHP script, указать местоположение выхода script?

Примечание. Я не могу отметить свой собственный пост как "принятый ответ", поэтому посмотрим внизу, чтобы увидеть мое решение. Если вы придумаете лучшее решение, я помету ваше сообщение как ответ.

4b9b3361

Ответ 1

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

function shutdown() {
    global $dbg_stack_a;
    print_r($dbg_stack_a);
}
register_shutdown_function('shutdown');

И затем я сделал глобальную условную точку останова (глобальная = точка останова оценивается в каждой строке), используя тот факт, что она может запускать код через eval() со следующим "условием":

eval('
global $dbg_stack_a, $dbg_stack_b, $dbg_stack_c;
$dbg_stack_a = $dbg_stack_b;
$dbg_stack_b = $dbg_stack_c;
$dbg_stack_c = debug_backtrace();
return false;
')

Наверное, не быстро, но трюк! Используя это, я смог определить точное местоположение файла и строки, в котором был поднят die(). (Этот пример работает в NuSphere.)

Ответ 2

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

function shutdown_find_exit()
{
    var_dump($GLOBALS['dbg_stack']);
}
register_shutdown_function('shutdown_find_exit');
function write_dbg_stack()
{
    $GLOBALS['dbg_stack'] = debug_backtrace();
}
register_tick_function('write_dbg_stack');
declare(ticks=1);

Ответ 3

grep -n die filename

Ответ 4

Не забудьте также включить grep для выхода.

Ответ 5

Добавьте это в начало файла:

function shutdown()
{
    print_r(debug_backtrace());
}


register_shutdown_function('shutdown');

См. register_ shutdown_function()

Ответ 6

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

Ответ 7

xdebug имеет приятную функцию трассировки, которая позволит вам увидеть всю трассировку вашего приложения php-приложения, и он должен дать вам понять, где находится ваш выход.

но для быстрого и грязного решения grep/find, как указано выше, будет делать правильно.

Ответ 8

Также проверьте error___logs для ошибок "memory_limit" в Apache error_log.

Предел памяти >= 10M Предупреждение: (Установите этот параметр в файле php.ini 10M или больше)

По моему опыту, сценарии внезапно заканчиваются без предупреждения или уведомления, когда это происходит.

Ответ 9

Убедитесь, что ошибки отображаются в среде разработки (а не в производстве).