Дебаг php-кода на примере диагностики системы авторизации NetCat
Поступила задача: понять, почему CMS NetCat иногда выбрасывает некоторых пользователей интранет-портала. Чтобы выяснить причину (а причина, забегая вперед, оказалась в том, что во внутренней сети у пользователей существует свой собственный DNS-сервер, или, может маршрутизатор, который по-разному прокладывает пути до сервера), нам пришлось научиться мониторить систему авторизации и "следить" за действиями пользователя.
Для этого мы внедрились в файл \netcat\system\essences\nc_user.class.php
.
Инициализация дебага собирает базовую информацию о пользователе:
- /* МЕГАДЕБАГ: детектим строчку, на которой выкидывает юзеров */
- global $DOCUMENT_ROOT;
- $phdebug_time = date("Y-m-d H:i:s");
- $phdebug_ip = $_SERVER['REMOTE_ADDR'];
- $phdebug_req = $_SERVER['REQUEST_URI'];
- $phdebug_agent = $_SERVER['HTTP_USER_AGENT'];
- $doDebug = false;
- if ($phdebug_ip == '192.168.5.42') $doDebug = true; // вписать сюда IP-адрес тестируемого компа
- $log_file = $DOCUMENT_ROOT."/_DEBUG_by_Finar/user_logoff_logs.txt";
- if ($doDebug) {
- file_put_contents($log_file, "$phdebug_time | $phdebug_ip | $phdebug_agent | $phdebug_req | \n", FILE_APPEND | LOCK_EX);
- }
- /* // МЕГАДЕБАГ. Далее до конца функции вызываются через строчки с if ($doDebug) */
Далее на каждой значимой сточке ставим ловушки:
if ($doDebug) file_put_contents($log_file, " was on line ". __LINE__ ." \n", FILE_APPEND | LOCK_EX);
Итог: в лог попадают данные о пользователе с заранее известном IP-адресе, а также процесс его "путешествия" по системе авторизации. Успешная авторизация при этом в логах выглядит вот так:
2015-07-21 12:39:13 | 192.168.5.42 | Mozilla/5.0 (Windows NT 6.2; WOW64; rv:39.0) Gecko/20100101 Firefox/39.0 | /news/load/ | was on line 268 was on line 309 was on line 322 was on line 350 was on line 352 GOT AUTH_USER_ID on line 354
Не успешная - сообщит от номере сроки php-файла, до которой добрался пользователь.