FirePHP для отладки PHP

Техническому менеджеру в наборе программных проектов, в одной из моих обязанностей входит создание кода отзыва. Одна из вещей, встречается гораздо чаще, чем хотелось бы при выполнении обзоров отладки совершенного кода PHP. Поднимите руку, если вы сделали это:

<?php
$total = $someService->getComplexTotal();
var_dump($total);
$someOtherService->processTotal($total); ?>

Но скорее всего, вы улыбнулись немного. Или «Да, как он узнал что я это делаю?» Или » Да, я использовал, чтобы сделать это.» Но у меня есть другие способы отладки сейчас. «Какой удивительный переход!»

Мы должны использовать метод отладки, который не выводит информацию не-программистам через веб-страницу. То есть, мы никогда не должны видеть переменные или обращение SQL echo’d на экране.

Самый безопасный метод отладки требуется в настройке IDE, использовать такой инструмент, как Xdebug или Zend Debugger для выполнение кода. Это не всегда практично. Полностью настроить среду отладки, можно и с FirePHP.

FirePHP для безопасной отладки PHP

FirePHP это библиотека PHP используется для создания сообщений консоли в браузере кода PHP. Консоль сообщений, как правило, созданы на JavaScript, но FirePHP посылает подобные сообщения, такие как HTTP заголовки с ответом от сервера. Различные расширения браузера действуют в качестве прокси для методов, наличие консоли и конвертировать эти заголовки в сообщениях журнала консоли.

Почему это «безопасно», для вывода данной отладки? Ну, при использовании методов, таких как наличие в console.log(), необходимо приложить согласованные усилия для просмотра отладочных сообщений. У посетителей не было бы развитая консоль открытая в браузере, и, следовательно, не будет видеть ваши сообщения отладки. Если вы выводите var_dum(), нет никакого способа скрыть сообщение.

Хоть это и «безопасно», вы все равно не должны оставить вызов FirePHP включенным с критической информационной системой доступной в производстве.

к меню ↑

Настройка FirePHP

Скачать FirePHP можно на странице установки и получить команды для установки через PEAR. Если вы используете другие структуры, такие как Zend Framework, там уже есть FirePHP поэтому нет необходимости в дополнительной установке.

Если вы используете Firefox, установите FireBug для расширенного набора инструментов отладки веб-приложений, а затем установите расширение FirePHP.

Если вы используете Chrome, достаточно просто установить только одно расширение FirePHP4Chrome.

И, наконец, откройте консоль в вашем браузере. В Firefox, нажмите на значок FireBug для вызова консоли. Убедитесь, FirePHP включен, нажав на значок FirePHP в консоли смотрите отмечена ли галочка рядом с включением. В Chrome, нажмите на значок настроек, выберите инструмент, и нажмите кнопку «Инструменты разработчика» для вызова консоли. FirePHP4Chrome будет автоматически включаться, когда консоль открыта.

к меню ↑

Основные регистрации с FirePHP

Если вы когда-либо работали с разными уровнями протоколирования ошибки, вы, несомненно, видели дискуссии о различиях между тем, какие типы ошибок следует «warn» и «error». Следует ли вам использовать «info » и «log». Индивидуальная работа с приложением. Достаточно сказать, могут быть причины, чтобы отличать сообщения, которое вы хотите отправить в консоль по-другому, чем стандартное сообщение.

Протокол FirePHP поддерживает в настоящее время четыре типа сообщений: журнал, информация, предупреждения и ошибки. Чтобы показать вам, как можно использовать каждый из них. Это до вас, чтобы выбрать подходящее для вашей среды и контекст отладки/регистрации.

Следующий код демонстрирует, как включить библиотеку FirePHP и выполнить каждый тип входа.

<?php
require 'FirePHPCore/fb.php';
FB::log('Log message');
FB::info('Info message');
FB::warn('Warn message');
FB::error('Error message'); ?>

Приведенный выше код просто включает библиотеку для FirePHP и вызывает различные методы ведения журналов. Есть несколько способов, чтобы вызвать методы в библиотеку, поддерживая чистую глобальную функцию процедурных вызовов, вызов статического метода, и полностью создан вызов объекта. Я использую статические методы, потому что я вообще хочу использовать FirePHP только в одну линию для отправки отладочной информации, и хочу сделать это быстро!

Ниже вы увидите скриншоты с выходом для обоих Firefox и Chrome.

FirePHP
FirePHP

Выход для обоих браузеров Firefox и Chrome

Дисплей Firefox является немного красивее. Версия Chrome не имеет значок «Информация», потому что console.log() в Chrome не поддерживает пока значок. Вы также позже заметите, что выходные таблицы в Chrome в очень зачаточном состоянии. Это потому, что Chrome не поддерживает console.table(). В примерах мы будем использовать Firefox и снимки в остальной части этой статьи сделаны в Firefox.

Для того чтобы сделать регистрацию более полезной, можно добавить метку в журнал сообщений. Это определено в качестве второго параметра метода ведения журналов.

<?php
require 'FirePHPCore/fb.php';
$turtles = $zooService->fetchAllTurtles();
FB::info($turtles, "All Turtles");?>

На следующем снимке, конкретное сообщение журнала. Для экономии места, Firebug/FirePHP покажет сокращенно. Наведите курсор на строку, чтобы увидеть весь код.

FirePHPCore

Конкретное сообщение журнала
к меню ↑

Работа с FirePHP

FirePHP является большим для генерации одноразовых сообщений журнала, как я уже продемонстрировал. Хотя, есть более продвинутые особенности, которые FirePHP действительно делает хорошо. Расскажу быстро только о трёх, это сообщение группировки, таблицы и следы.

к меню ↑

Пример

Вот пример, чтобы убедить вас использовать FirePHP:

<?php
try {
    $key = "user.{$userId}";
    if (!SimpleCache::has($key)) {
        FB::info($key, 'Cache miss:');
        $userService = new UserService();
        $user = $userService->fetchById($userId);
        SimpleCache::set($key, $user);
    }
    $user = SimpleCache::get($key);
}
catch (Exception $e) {
    FB::error($e);
    Router::generate500();
}?>

Этот простой пример кода построен для извлечения объекта пользователя. Эта система использует некоторый тип кэширования и выдает исключения, когда пользователь не доступен. Впервые этот код выполняется, пользователь не кэшируются так как FirePHP отправляет информационное сообщение. Для пользователей ID 5, на следующем снимке показан результат.

FirePHP

Информационное сообщение FirePHP

Во второй раз код метода Info(), и сообщение не отправляется на консоль. Теперь давайте представим себе, что кэш становится недоступным. (Я мог бы создать код, который сможет работать, если не было кэша, но это было бы просто, забрать все самое интересное!) В случае, когда память для кэша больше не доступна, метод set() вызывает исключение. На экране появится хорошая ошибка 500, в соответствии с настоящим кодексом. Но, что бы сразу видеть исключение и трассировки стека, вот здесь и нужен метод error(). Можно интерпретировать исключение объекта и войти.

FirePHP

Кэш становится недоступным
к меню ↑

Заключение

Самый безопасный способ для отладки PHP кода является использование отладчика среды созданного в IDE. Тем не менее, для более быстрой отладки, а также регистрацию уровня приложений, FirePHP может играть важную роль.