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 — где описаны все способы, о которых я хотел рассказать.

Остались не освещёнными только те способы, о которых я рассказывать не хотел. :) Не, я не скрытный... Ну, намекну тут хоть, раз тему поднял. Можно ссылки в Сапе покупать под это дело: ненадолго, но не скупиться — выбирать сайты поживей, посолидней, и цена будет соответствующая. А у кого не получится, кто просто деньги спустит — я не виноват, ведь не хотел же рассказывать. ;) И ещё, если у вас есть много плохо индексируемых сайтов, с которыми лень проводить весь набор мероприятий, то заведите хоть один хорошо индексируемый, да по нему прогоняйте ссылки на страницы плохо индексируемых сайтов для попадания их в индекс.

Запись опубликована в рубрике Web-мастеринг. Короткая ссылка для добавления в закладки: PHP-аналог функции console.log ().

2 ответа к “PHP-аналог функции console.log ()”

Надюша:

Я ещё один хороший способ ускорения индексации знаю, проверенный временем — почаще писать на главную! А то если блог забрасываешь, то роботы потом долго его индексировать не хотят или страницы падают из индекса...

Pavluha.Net:

Это точно. Дмитрий Байдук тоже об этом писал (то, что я перепечатывать не захотел, а просто ссылку дал)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *