Всем привет!
Частенько сталкиваюсь с тем, что при переходе на некоторые страницы сайта вываливается WSOD (white screen of death). Такое бывает когда захожу например на системные страницы "admin/config/system/cron", "admin/reports/status", а сейчас и не могу разлогиниться, "/user/logout" тоже не срабатывает. Раза с 10 страница может загрузиться в итоге.
Есть ли какой-нибудь способ, вывести сообщения какой модуль отрабатывает в момент перехода на wsod страницу в виде:
"Start $module";
$module. '_' . "$hook finished";
"$module finished";
Хочу точно знать в каком модуле, на какой функции всё стопиться. Логи пишутся на сервер в файл и не всегда могу выкачать их, а так хоть на странице буду видеть.
Нашел примерно то что нужно:
https://stackoverflow.com/questions/12171838/drupal-7-user-edit-white-sc...
Но не понимаю, написан отдельный модуль или человек в каждый модуль прописывает invoke_all?
Комментарии
А чем вам не нравится вариант посмотреть логи сервера и/или включить вывод ошибок PHP?
Полный backtrace по-умолчанию, конечно, там не показывает, но для решения большинства проблем достаточно.
Модулями 500-е ошибки залогировать не получится, это всё равно, что попросить человека описать свои ощущения после выстрела в голову.
И да, показывать стэктрэйс на WSOD крайне несекьюрно.
все правильно, друпал скрывает мого ошибок белым экраном, что бы показывал
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
в вверх index.php
Всё же сделал как на стековерфлоу поделился человек:
<?phpfunction module_invoke_all($hook) {
$args = func_get_args();
// Remove $hook from the arguments.
unset($args[0]);
$return = array();
foreach (module_implements($hook) as $module) {
print "Starting loading $module <br />";
$function = $module . '_' . $hook;
if (function_exists($function)) {
$result = call_user_func_array($function, $args);
if (isset($result) && is_array($result)) {
$return = array_merge_recursive($return, $result);
}
elseif (isset($result)) {
$return[] = $result;
}
}
print "Finished loading $module <br />";
}
return $return;
}?>
Эта функция оказывается лежит в ядре, include/module.inc.
Проблема оказалась в модуле nodejs, пока отключил и все страницы стали нормально открываться.
Осталось разобраться в чем конфликт.
Всем спасибо за помощь!