Отладка PHP с FirePHP в Firebug

Я часто ругаюсь на print_r() и чуть более продвинутый pr() потому что выводимая информация перемешивается с тем, что должен видеть пользователь. Также раздражает просмотр объектов с огромными массивами информации. Мне не очень нравится Javascript с его дурацким синтаксисом, но, наверное, единственное, что меня в нём греет - это Firebug, которые делает отладку не столь ужасной. Приятно, когда можно сделать console.log(everything, you, want); и потом просматривать информацию в нормальном раскрывающемся дереве, а не в огромной простыне.

Для этого я даже когда-то написал JsDebugHelper, но что-то меня в нём смущало (наверное, eval :) ) и в итоге я им пользовался всего пару раз. Сегодня я нашёл более удобный способ скрестить Firebug с PHP - FirePHP.

FirePHP состоит из 2 частей - Extension к Firefox и PHP-класс FirePHP. Скачайте их с сайта FirePHP - firephp.org. Достаньте из FirePHPLibrary-FirePHPCore-x.x.x.tar.gz в папке \FirePHPCore\lib\FirePHPCore\ файл FirePHP.class.php и разархивируйте его в папку vendors вашего проекта на CakePHP.

Добавьте в config/bootstrap.php

PHP:
  1. App::import('Vendor', 'FirePHP', array('file'=>'FirePHP.class.php'));
  2. function fb() {
  3.     if (Configure::read('debug')>=1) {
  4.         $instance = FirePHP::getInstance(true);
  5.         $args = func_get_args();
  6.         return call_user_func_array(array($instance,'fb'),$args);
  7.     }
  8. }

Теперь вы можете писать

PHP:
  1. fb('Hello World'); // Defaults to FirePHP::LOG
  2.  
  3. fb('Log message'  ,FirePHP::LOG);
  4. fb('Info message' ,FirePHP::INFO);
  5. fb('Warn message' ,FirePHP::WARN);
  6. fb('Error message',FirePHP::ERROR);
  7.  
  8. fb('Message with label','Label',FirePHP::LOG);
  9.  
  10. fb(
  11.     array(
  12.         'key1'=>'val1',
  13.         'key2'=>array(
  14.             array('v1', 'v2'),
  15.             'v3'
  16.         )
  17.     ),
  18.     'TestArray',
  19.     FirePHP::LOG
  20. );
  21.  
  22. function test($Arg1) {
  23.     throw new Exception('Test Exception');
  24. }
  25. try {
  26.     test(array('Hello'=>'World'));
  27. } catch(Exception $e) {
  28.     fb($e);
  29. }
  30.  
  31. fb(
  32.     array(
  33.         '2 SQL queries took 0.06 seconds',
  34.         array(
  35.             array('SQL Statement','Time','Result'),
  36.             array('SELECTFROM Foo','0.02',array('row1','row2')),
  37.             array('SELECTFROM Bar','0.04',array('row1','row2'))
  38.         )
  39.     ),
  40.     FirePHP::TABLE
  41. );

И получите такую красивую картинку
FirePHP

Очень важная вкусность - всё передаётся не в response text, а в headers. Плюс в том, что можно отлаживать AJAX-запросы и изображения, не мусорится вывод. Недостаток - все fb() должны вызываться до того как что-то будет выведено на экран. Но недостаток не так критичен, ведь тру-программисты не выводят текст в моделях и контроллерах :). В крайнем случае, можно использовать кеширование вывода (ob_start,...).

Эх, если бы все ошибки CakePHP можно было бы автоматически выводить в Firebug в 2 строки: dump и trace (как Exception в примере). Было бы очень удобно.


Понравилось?

  1. Подпишись через RSS
  2. Расскажи о http://php.southpark.com.ua друзьям.
    Все способы хороши: ICQ, E-mail, свой блог, комментарий в чужом блоге или сообщение на форуме
  3. Добавь статью на news2.ru, Хабрахабр или в закладки

Огромное спасибо!

И не стесняйтесь комментировать - у меня стоит плагин, который убирает rel="nofollow" у людей, которые написали больше 5 комментариев.

RSS feed | Trackback URI

10 комментариев »

Comment by Сергей Subscribed to comments via email
2008-07-11 21:43:03

Спасибо за ссылочку. Кстати, Xdebug и его замена var_dump() мне нравятся больше, чем pr() :-)

 
Comment by webdev
2008-07-11 22:30:44

Да Firebug + FirePHP просто мечта веб-разработчика, времени экономит очень много

 
Comment by Mixa Subscribed to comments via email
2008-07-16 14:48:38

Сорри за флуд, но нигде не могу обнаружить ваши контакты, а пару вопросов от чайника по Cake задать хочеться... Если Вы не против, как с Вами можно связаться? Спасибо!

2008-07-17 11:29:17

Если по-русски, то вопросы лучше задавать в http://cake-php.ru/forum/.
По-английски - в CakePHP Google Group.

Я не очень люблю давать ответы на вопросы :)

 
 
Comment by Mixa Subscribed to comments via email
2008-07-17 11:50:37

Ок, спасибо большое!

 
Comment by Савелий
2008-08-04 12:21:05

Всегда пользовался var_dump() и print_r().
Но данная статья позволила перейти на новый уровень знаний.

 
Comment by sanek
2008-08-09 18:52:42

Вы расскажите пожалуйста, как с этим firephp работать вообщее!
Есть файл php. Мне нужно его редактировать + одновременно видеть визуальные изменения. С Html страницами в firebug все понятно, а с php... Как его открыть firephp? Если открываю в firefox - мне предлагается его либо сохранить, либо в другой программе открыть!
Как подключить FirePHPLibrary, которую скачал? Инструкцию на офф. сайте так и не могу перевести.
ps: спрашиваю, потому что погуглив, узнал о firephp, а как установить и работать - засекречено!

 
Comment by Сергей Subscribed to comments via email
2008-08-16 16:24:46

Вообще-то редактирование bootstrap.php -- лишнее.

Можно, конечно, и в него добавить строку App::import('Vendor'....), но можно это сделать и в любом другом месте проекта, а после этого вызывать FirePHP::fb(...)

 
Comment by ring0
2008-09-05 00:53:00

Есть так же framework specific library на firephp.org

 
 
Имя (required)
E-mail (required - never shown publicly)
URL
Текст комментария
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.