Программирование на PHP. Использование FirePHP для отладки web приложений

Владимир | | PHP, Web разработка.

Скриншот к FirePHP
На днях я последовал совету Александра и попробовал FirePHP. Впечатление сложилось очень хорошее, и я решил поделиться им с вами 🙂 .

Прежде всего, пару слов о том, что представляет собой этот инструмент. В его состав входят два компонента: серверная библиотека (написана на php) и плагин к FireFox. Принцип работы достаточно простой. Вы подключаете библиотеку к вашему скрипту и после этого используете ее функции для отправки произвольных данных браузеру.

Данные передаются в специальных заголовках (X-FirePHP-Data) и не отображаются на странице. Информация из этих заголовков будет добавляться в консоль с помощью плагина FirePHP Development. На картинке в начале статьи показан скриншот консоли с сообщениями.

Примечание. Здесь речь идет о консоли плагина Firebug, который также должен быть установлен.

Чтобы протестировать плагин я написал два php скрипта. Первый (testFirePHP.php) представляет собой обычную страницу, а второй (ajaxscript.php) выполняет обработку ajax запроса от первого скрипта.

Рассмотрим их подробнее.

testFirePHP.php

<?php
require('lib/FirePHPCore/fb.php');

ob_start();
fb("Привет");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>FirePHP test</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(
	function() {
		$('#ajaxRes').innerHtml = "";
		$('#sendAjax').click(
			function() {
				$('#ajaxRes').load('ajaxscript.php');
			}
		);
	}
);
</script>
</head>
<body>
<h3>Тест FirePHP</h3>
<p><a href="#" id="sendAjax">Отправить Ajax запрос</a></p>
<div id="ajaxRes"></div>
<?php
$my_array = array('par1'=>'val1', 'par2'=>'val2', 'par3'=>'val3');
fb($my_array, 'мой массив', FirePHP::INFO);
fb($my_array, 'мой массив', FirePHP::DUMP);
?>
</body>
</html>
<?php
ob_end_flush();
?>

Хочу отметить, что при использовании FirePHP есть нюанс, на который обязательно нужно обратить внимание. FirePHP отправляет данные в заголовках (headers), а они должны быть отправлены раньше основного содержимого страницы. С другой стороны, ошибки могут возникнуть в коде, размещенном внутри страницы. Чтобы обойти это ограничение нужно по мере обработки страницы сохранить все выходные данные в буфере, сформировать и отправить заголовки, а после них – содержимое буфера.

Реализовать все эти действия можно с помощью всего двух функций: ob_start (начинает запись в буфер) и ob_end_flush (отправляет все данные из буфера).

Теперь возвращаемся к примеру. В строке 2 мы подключили библиотеку FirePHP. Она состоит из двух файлов: fb.php и FirePHP.class.php. Сама библиотека находится во втором файле, первый – представляет собой надстройку и позволяет немного сократить код.

Чтобы отправить что-нибудь в консоль достаточно вызвать функцию fb и передать ей текст сообщения (строка 5). Этой функции можно передавать не только текст, но и переменные, а также указывать статус сообщения.

Например, в строке 32 мы отправили массив $my_array, указали его название (второй параметр) и задали статус (INFO) в третьем параметре. Статус влияет на то, как сообщения будут отображаться в консоли.

Кроме простых сообщений можно отправить дамп переменной (строка 33). Чтобы его увидеть, переключитесь на вкладку «Net», разверните запрос и выберите вкладку «Server».

Примечание. На этой вкладке кириллица в именах массивов отображается не правильно. Но в самом содержимом массива ее можно использовать.

Теперь посмотрим, как FirePHP работает с Ajax.

Для этого мы создали ссылку (строка 28), нажатие на которую будет отправлять запрос. И блок для вставки полученных данных (строка 29).

Отправку запроса выполняет JavaScript код (строки 13-24). Код получился небольшим благодаря использованию библиотеки jQuery. В строке 17 мы добавляем обработчик клика по ссылке, а в строке 19 – отправляем запрос.

Примечание. С недавних пор компания Google разместила популярные JS библиотеки на своих серверах. В строке 12 мы как раз загружаем сжатую версию jQuery с их сервера.

Теперь рассмотрим сам файл ajaxscript.php

<?php
require('lib/FirePHPCore/fb.php');
ob_start();
echo "Ответ на AJAX запрос";
fb("Предупреждение от AJAX", FirePHP::WARN);
fb("Ошибка", FirePHP::ERROR);
fb("Запись в лог", FirePHP::LOG);
$test_array = array('par1'=>'val1', 'par2'=>'val2');
fb($test_array, 'test array', FirePHP::DUMP);
ob_end_flush();
?>

Я его сделал предельно простым. В строках 2, 3 мы подключили библиотеку и запустили буферизацию. После этого (строки 5-9) отправили несколько сообщений с различными статусами. Эти сообщения появятся в консоли.

Самой странице скрипт отправляет строку «Ответ на AJAX запрос» (строка 4). Еще раз напомню, что эта строка будет отправлена в самом конце скрипта, при выполнении функции ob_end_flush (строка 10).

На скриншоте в начале статьи вы можете увидеть сообщения консоли после выполнения этого скрипта.

Как видите, использование FirePHP требует минимум усилий с вашей стороны. Достаточно подключить библиотеку, установить плагин и запомнить название функции (fb).

Заключение.

На мой взгляд, основное преимущество этого инструмента проявляется во время разработки Ajax приложений, т.к. не нужно писать JavaScript код для вывода отладочной информации. Хотя и в обычном приложении удобнее выводить сообщения об ошибках в консоль, чем вставлять их в страницу.

Похоже, что скоро FireFox с соответствующими плагинами сможет составить конкуренцию современным IDE.

До встречи!

  • Спасибо, надо будет попробовать, и к CodeIgniter'у прикрутить можно.

  • Спасибо, надо будет попробовать, и к CodeIgniter'у прикрутить можно.

  • Спасибо за наводку, как раз искал что-нибудь подобное для отладки PHP. Попробую использовать.

  • Спасибо за наводку, как раз искал что-нибудь подобное для отладки PHP. Попробую использовать.

  • Век живи век учись …. 🙂 Не знал не знал ! Надо будет попробовать !

  • Век живи век учись …. 🙂 Не знал не знал ! Надо будет попробовать !

  • Советую попробывать использовать для отладки php-скриптов бесплатный ide xdebug. На серверной части скрипта ничего писать не надо — он работает с байткодом (правда расширение установить придется для php). Для отладки скриптов, работающих с ajax, я лично использую вкладку Net плагина Firebug для FF 😉 Никогда не возникало еще необходимости в других инструментах.

    • Я использую и xdebug, и Firebug.
      Firephp не замена этим инструментам и даже не аналог. Он просто предоставляет дополнительные возможности. Насколько они нужны для отладки зависит от конкретного приложения.
      У меня, честно говоря, тоже практически не возникали такие ситуации.

  • Советую попробывать использовать для отладки php-скриптов бесплатный ide xdebug. На серверной части скрипта ничего писать не надо — он работает с байткодом (правда расширение установить придется для php). Для отладки скриптов, работающих с ajax, я лично использую вкладку Net плагина Firebug для FF 😉 Никогда не возникало еще необходимости в других инструментах.

    • Я использую и xdebug, и Firebug.
      Firephp не замена этим инструментам и даже не аналог. Он просто предоставляет дополнительные возможности. Насколько они нужны для отладки зависит от конкретного приложения.
      У меня, честно говоря, тоже практически не возникали такие ситуации.

  • Pingback: Бортовой самописец » Blog Archive » Отладка PHP приложений с использованием FirePHP()

  • Ворпг

    firephp это смешное убожество для школьников по сравнению с нормальными отладчиками — zend или dbg. 2 часа жизни убил на копание с ним, ища в нем нормальные возможности, которых не оказалось. Купился я на переполох который быдлостуденты подняли своими криками о нем, ничего не скажешь.

    • firephp — это не отладчик, это php библиотка, которая позволяет отправлять сообщения в заголовках и плагин для FF, который эти сообщения показывает.
      Его удобно использовать для отладки AJAX приложений, но это не замена отладчика.

  • Ворпг

    firephp это смешное убожество для школьников по сравнению с нормальными отладчиками — zend или dbg. 2 часа жизни убил на копание с ним, ища в нем нормальные возможности, которых не оказалось. Купился я на переполох который быдлостуденты подняли своими криками о нем, ничего не скажешь.

    • firephp — это не отладчик, это php библиотка, которая позволяет отправлять сообщения в заголовках и плагин для FF, который эти сообщения показывает.
      Его удобно использовать для отладки AJAX приложений, но это не замена отладчика.

  • maloy

    такой вопрос в чем может быть проблема, и как её исправить?
    У меня проблемы с кодировкой! тоесть если я пишу fb(«Привет»); то в консоли у меня вылазят крокозябры)))
    может я канешно что то туплю под вечер????

  • maloy

    такой вопрос в чем может быть проблема, и как её исправить?
    У меня проблемы с кодировкой! тоесть если я пишу fb(«Привет»); то в консоли у меня вылазят крокозябры)))
    может я канешно что то туплю под вечер????

  • maloy, попробуйте писать русские символы в кодировке, соответствующей кодировке сайта. Продвинутые текстовые редакторы позволяют это сделать (например, Notepad++).
    А вообще можно писать fb(«Hello»); и не париться. Это же отладка, а не основной вывод.

  • maloy, попробуйте писать русские символы в кодировке, соответствующей кодировке сайта. Продвинутые текстовые редакторы позволяют это сделать (например, Notepad++).
    А вообще можно писать fb(«Hello»); и не париться. Это же отладка, а не основной вывод.

  • Какие есть функция для показа всех отработавших функций к данному моменту?

  • Какие есть функция для показа всех отработавших функций к данному моменту?

  • Поясните, пожалуйста, подробнее, что вы хотите увидеть?

  • Поясните, пожалуйста, подробнее, что вы хотите увидеть?

  • Zork

    а нука, уВАЖАЕМЫЙ, вспомника, когда ты было быдлом…

  • Prombox

    FirePHP и даже FirePHP Companion нормально делают вывод в UTF-8 кодировке русские символы, допустим, в значениях переменных, а вот если Windows-1251, то крякозябры.

    • Отсюда вывод — переходите на UTF-8 🙂