PHP-аналог функции console.log ()
Мне очень нравится JS-дебаггер «console.log», обрабатываемый плагином Firebug, который (дебаггер) выводит на консоль отладочную информацию в процессе выполнения скрипта. А теперь, когда в аудитории остались только прогаммисты :), я расскажу про свой аналог отладчика для PHP: дебаггер console_log ().
Мысль о таком отладчике меня посещала давно, но всегда казалось проще воспользоваться банальным echo или print_r () для получения информации о том, что происходит в процессе работы программы. Но в таком подходе есть свои минусы:
- можно забыть и оставить отладочный оператор вывода в готовом скрипте. Особенно трудно это обнаружить, если в скрипте по идее задуман вывод на экран — попробуй потом найди среди выводов отладочные;
- в некоторых скриптах вывод на экран в принципе не естественнен. Например, скриптом я обрабатываю хитрый AJAX запрос со страницы сайта, и мне надо отладить скрипт. Тогда мне надо:
- либо мой JS настроить на получение и вывод отладочной информации;
- либо в консоли того же Firebug на вкладке «Сеть» искать нужную информацию;
- либо использовать file_put_contents () для вывода в файл (параллельно размышляя, как мне лучше вывести в файл ассоциированный массив);
- либо имитировать AJAX запрос, что особенно весело, если данные передаются методом POST.
- а ещё бывает, что надо производить отладку хитрого AJAX запроса, проблема с которым возникает у какого-то удалённого пользователя...
Так я давеча и кодил, как вдруг меня осенило, и за каких-нибудь пару минут я написал вот такой простой аналог console.log () для PHP — функцию вывода отладочной информации console_log ():
function console_log() { static $f = false; if (!func_num_args()) return; # Аргументы не переданы if (!$f) $f = fopen('!console.log',"w"); foreach (func_get_args() as $arg) { if (is_bool($arg)) $s = $arg?'TRUE':'FALSE'; elseif (is_array($arg) or is_object($arg)) $s = print_r($arg, TRUE); else $s = $arg; fwrite($f,$s.' '); # вывод аргументов разделяется пробелом } }
Это не какой-нибудь там опенсорс-продукт в универсальной оболочке, а просто сырой кусок кода, который вы можете изменять так, как вам угодно. Пример использования:
# скрипт выполняется, переменные создаются $a = array('name'=>'PHP дебаггер console_log()', 'txt'=>'Пример использования'); $b = isset($a); # т.е. TRUE $c = time(); # а теперь узнаем, как у нас дела console_log('$a',$a,'$b',$b,'А это $c',$c);
После чего находим в папке с только что отработавшим скриптом файл «!console.log», где видим:
$a Array ( [name] => PHP дебаггер console_log() [txt] => Пример использования ) $b TRUE А это $c 1360580401
Что вообще, по-моему, хорошо, ведь:
- объекты (object) и массивы выводятся в удобочитаемом виде;
- логические переменные выводятся как TRUE или FALSE, а не как это делает echo — пустая строка или «1»;
- всё остальное выводится как есть;
- можно использовать console_log () несколько раз за вызов скрипта, при этом весь отладочный вывод будет так же в одном файле, ведь файл «!console.log» открывается на запись только при первом вызове console_log () и остаётся открытым до окончания работы скрипта.
Что вы можете тут изменить:
- всё, что захотите;
- например, имя файла, куда будет вестись лог отладки. Можете вот так изменить 4-ю строку:
if (!$f) $f = fopen('./logs/'.time().'-'.rand().'.txt',"w+");
Чтобы при каждом запуске в папке «logs» создавался файл с уникальным именем типа «1360581561-11821.txt» и отладочной информацией внутри; - изменить 9-ю строку так:
fwrite($f,$s."\n");
Чтобы каждый выводимый аргумент начинался с новой строки или как-то ещё отделялся от предыдущего.
А напоследок я расскажу, как обещал, об ускорении индексации. В одной тут статейке тему затронул, но статья в целом была посвящена одному сервису, не хотел тему размывать. А решил написать отдельную статью об этом, но напоролся на довольно подробный мануал: http://netbu.ru/making-the-site/vedenie-bloga/kak-uvelichit-skorost-indeksacii.html — где описаны все способы, о которых я хотел рассказать.
Остались не освещёнными только те способы, о которых я рассказывать не хотел. Не, я не скрытный... Ну, намекну тут хоть, раз тему поднял. Можно ссылки в Сапе покупать под это дело: ненадолго, но не скупиться — выбирать сайты поживей, посолидней, и цена будет соответствующая. А у кого не получится, кто просто деньги спустит — я не виноват, ведь не хотел же рассказывать. И ещё, если у вас есть много плохо индексируемых сайтов, с которыми лень проводить весь набор мероприятий, то заведите хоть один хорошо индексируемый, да по нему прогоняйте ссылки на страницы плохо индексируемых сайтов для попадания их в индекс.
2 ответа к “PHP-аналог функции console.log ()”
Я ещё один хороший способ ускорения индексации знаю, проверенный временем — почаще писать на главную! А то если блог забрасываешь, то роботы потом долго его индексировать не хотят или страницы падают из индекса...
Это точно. Дмитрий Байдук тоже об этом писал (то, что я перепечатывать не захотел, а просто ссылку дал)