PHP → Отладка PHP средствами Firebug

Отладка PHP-скриптов определенно недостаточно освещена в интернете. Потому многие, очень многие довольствуются print_r-ками. Очевидный недостаток такого способа - нельзя отладить AJAX, SOAP-сервисы, генераторы картинок и вообще скрипты, не отдающие непосредственно HTML-документов.
Javascript-разработчики используют для отладки Firebug. Как я им всегда завидовал. Лепота - выделенная консоль, net-монитор, отладчик, и все это в любимом браузере.
Так вот, нашел такое расширение Firebug - FirePHP. Оно позволяет выводить информацию в консоль Firebug непосредственно из PHP. Делается это довольно простым вызовом:
require('FirePHP.class.php');
$firephp = FirePHP::getInstance(true);
$firephp -> fb("hello world! i'm warning you!",FirePHP::WARN);
Кроме того в Firebug можно передавать произвольные структуры данных и исключения. В последнем случае получим не только сам объект исключения, но и содержимое стека. Возможностей масса, почитайте документацию.
Преимущество такой отладки в том, что данные передаются не в теле страницы, а в заголовках. Это значит, что во-первых, страница не засирается всяческими var_dump-ами, а во вторых, можно без проблем отлаживать AJAX-вызовы.
Для использования FirePHP нужно: подключить к проекту один файл и включить буферизацию вывода. Всего-то.
Насчет буферизации: на самом деле FirePHP хочет, чтобы до него никто ничего не писал в поток вывода. Логично, ведь он отправляет заголовки. Поскольку, вероятно, вы и так используете буферизацию, чтобы отправлять свои собственные заголовки, то это не проблема. Я имею ввиду, не обязательно использовать именно
ob_start(), как в руководстве.Не советую рассовывать вызовы
fb() прямо в код. Подумайте, что будет с ними на продакшн-сервере. Правильнее внедрить FirePHP в систему отладки - например, уже есть расширения для Zend Framework и Symfony. И я в свой отладчик интегрировал. Улет.
crossposted

комментарии (69)
Кроссбраузерный аналог не подскажите?
Ну и еще полезно знать про $e->getTrace() если код написан в стиле try/catch.
А вообще, что в чужой CMSке отлаживать-то?
fb($array, "TestArray", FirePHP::LOG);
// с русским языком у меня это чудо не дружит чего-то =\
FirePHP 0.1.0.1
Firebug 1.2.0b3
Меня лично вполне устраивает Xdebug в связке с Eclipse PDT. Хотя по сути это все таки немного другие задачи решает, так что FirePHP тоже может пригодиться.
Можно использовать хоть с фреймворками, хоть просто с голым пхп. Да еще хоть через классы, хоть через процедуры. Дампы - просто красота. Очень универсально.
Автору — спасибо! я даже не задумывался о возможности существования такого инструмента.
ЗЫ: после прочтения данной заметки почти всю ночь прикручивал FirePHP куда в голову стукнет, потом сидел и радовался)))
Некоторые вещи от безысходности приходится делать вообще без средств отладки… но это уже к вебу не относится…
на самом деле, не такие большие деньги, ибо VS сама по себе во многом удобнее эклипсы.
Удаленная отладка без авторизации значит, что каждый может дебажить вас, думаю врятли это хорошая идея. К тому-же код напичканный fb вызовами на продакшене это полохо.
В чистом виде я бы его не использовал уж очень сыроват.
FirePHP думаю отлично подойдет ленивым фрилансерам с кривыми проектами IMHO xD
никто не заставляет использовать его без авторизации. все на усмотрение разработчика.
про авторизацию, кстати, на официальном сайте сказано, типа, неплохо бы ее использовать.
если уж говорить про дыры, то дырами является все что используется без головы.
По сути мы делаем те же принтр, только в более читабельной форме.
Спасибо автору за статью.
А ее самому уже не получится расширить?
Как раз делает тоже самое.
http://incubator.apache.org/log4php/
Расширение для фреймворка Code Igniter - здесь.
А касаемо ptint_r и var_dump - есть еще dBug.php (http://dbug.ospinto.com/).
Бесплатно, с открытым кодом, наглядно.
Для тех, кому FirePHP по каким-либо причинам не пришелся (может из-за огнеЛиса).
Drupal devel модуль использует Krumo.
traceback, ob