Как подружить PHP с консолью Google Chrome

    Внимание

    Статья содержит информацию об устаревшей версии PHP Console.

    О новой версии PHP Console 3.0 читайте тут.


    PHP Console 1.0





    Речь пойдёт об одном чудном расширении для Google Chrome, которое позволяет проксировать вывод ошибок и дебаг сообщений из PHP в консоль Google Chrome, а также отображать их в виде всплывающих popup-уведомлений.

    Расширение PHP Console было написано как плагин для достаточно качественного и функционального обработчика ошибок — Lagger. Если функциональность Lagger-а для вас избыточно, то можете использовать компактный класс PhpConsole. Список того, что это расширенее умеет:

      ✓ Отсутствует иконка в тулбаре, все настройки производятся из контекстного меню
      ✓ Проксирует вывод сообщений ошибок/отладки в консоль Google Chrome
      ✓ Выводит сообщения об ошибках/отладке в виде временных PopUp-уведомлений
         ✓ Первое уведомление отображается в течении 3-х секунд
         ✓ Время отображения всех остальных уведомлений настраивается
         ✓ Уведомление не исчезает, если по нему кликнуть или навести курсор мыши
         ✓ Все уведомления могут быть закрыты при клике на иконку (x) закрытия попапа
      ✓ Отображает backtrace вызова ошибки/exception в консоли (клик по Object)
      ✓ Отображает backtrace вызова ошибки/exception в уведомлении (клик по ссылке #путь_файла)
      ✓ Выводит JavaScript ошибки в виде временных PopUp-уведомлений
         ✓  Не переопределяет пользовательский обработчик JavaScript ошибок
         ✓  URL ошибок кликабелен и открывает исходный код скрипта/страницы
         ✓  Игнорирует повторяющиеся ошибки
         ✓  Игнорирует внутренние ошибки Google Chrome расширений
      ✓ Отлавливает сообщения от скриптов из любых источников
         ✓  Веб страница
         ✓  AJAX
         ✓  IFrame
      ✓ Доступны дополнительные действия для логирования сообщений (при использовании Lagger)
         ✓ Сохранение в лог-файл
         ✓ Отправка на Email
         ✓ Отправка в FirePHP
         ✓ Отправка по SMS

    Чем оно лучше того же FirePHP:
    1. Нормально обрабатывает фатальные ошибки
    2. Отлавливает сообщения в AJAX-скриптах и IFrame-ах
    3. Имеет очень удобную функцию отображения сообщений во всплывающих уведомлениях
    4. Отображает backtrace вызова
    5. Отлавливает JavaScript ошибки
    6. Поддерживает более функциональную и гибко конфигурироуемую библиотеку Lagger
    По всем вопросам возникшим с использованием PHP Console и Lagger можете смело обращаться к автору, т.е. ко мне.

    Ваши замечания и предложения очень даже приветствуются :)
    Удачного пользования!

    P.S. Знаю, что на хабре крайне негативно относятся ко всякого рода «велосипедам», поэтому прошу не судить строго — пишите коменты, спрашивайте, буду рад обсудить и объяснить любой момент.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 42
    • +4
      а вот как бы развить данное расширение, чтоб его могли не только PHP-шники использовать? цены бы ему не было!
      • +2
        А тут в расширении даже ничего менять не надо, просто реализуйте этот класс на нужном языке, ну и конечно соответствующий обработчик ошибок тоже нужно будет реализовать.
        • 0
          а почему через куки вместо заголовков?
          у браузеров насколько я помню их ограниченное количество на сайт
          • +1
            Если реализовывать через заголовки, то не будут отлавливаться сообщения от AJAX и IFrames запросов т.к. для Chrome-расширений пока ещё не реализован класс функций webRequest. Как webRequest реализуют — сразу перепишу, чтобы через кастомные заголовки работало. Обещали в 9-ой ветке добавить, ждёмс…

            Насчёт того, что куки ограничены по размеру, я знаю, но расширение написано так, чтобы моментально чистить обработанные куки с сообщениями.
            • 0
              Выложил новую версию PHP Console и Lagger, теперь ограничение на кол-во отправляемых в 1 запросе сообщений увеличено с 70 до ~1000. Подробности тут.
            • 0
              Всё на куках, значит… А эти куки гарантированно удаляются? Т.е. не получится ли ситуации, когда этих кук в хроме будет храниться мильон?
              • 0
                См. ответ. И да, куки удаляются гарантировано. Они и выставляются только тогда, когда на клиентской стороне активировано PHP Console расширение.
          • –1
            Отлично!

            Только вот всегда интересовало, а многие пользуются хромовским отладчиком?
            Просто я сколько не пытался — не получается его использовать так же хорошо, как и FireBug
            Поэтому приходится постоянно держать ФФ открытым для отладки.

            Может тот, кто научился хорошо использовать отладчик хрома, напишет мини обзор, который позволит таким, как я перейти окончательно на хром. Спасибо!
            • +11
              Я пользуюсь вполне успешно, дело привычки — теперь мне файрбаг неудобным кажется
              • +3
                Я раньше тоже тормозился переходить с FF на Chrome из-за того, что под него нет FireBug, но в последних версиях Chrome родные Web Developer Tools стали вполне себе полноценным инструментом. Теперь только им и пользуюсь. Насчёт как там и что см. вот и <a href=«www.chromium.org/devtools/google-chrome-developer-tools-tutorial>вот.
                • +1
                  Исключительно дело привычки. Сам юзал ФайрБаг. Но из-за тормознутого компа на работе (что-то с железом)
                  начинал по мелочам (поправить высоту блоку и подобной белиберде). Со временем начал забывать про лисичку, и открываю ее исключительно для отладки верстки и js.

                  В 6+ версии хромовский тулс стал лучше Бага.
                • 0
                  Такое же под Firefox бы
                  • 0
                    FirePHP похоже — серверная часть возможно отличается (не успел посмотреть что за Lagger такой)
                    • 0
                      Серверная часть на самом деле очень сильно отличается. Кстати в Lagger есть плагин для работы с FirePHP.
                      • +1
                        Про FirePHP я знаю, это абсолютно другое
                    • +1
                      Спасибо вам за расширение, буду пользоваться
                      • 0
                        о, продолжаешь дело лаггера?)
                        • 0
                          А куда деваться :) Когда из существующих библиотек ничего не устраивает приходится писать своё.
                        • 0
                          Ну на вопрос «как подружить» вы ведь не ответили =)
                          • 0
                            См. в описании расширения простой пример есть:

                            <blockquote>// Autoload Lagger classes and initialize basics
                            define('LAGGER_BASE_DIR', '../library/');
                            function autoloadLaggerClasses($class) {
                            	if(strpos($class, 'Lagger_') === 0) {
                            		require_once (LAGGER_BASE_DIR . str_replace('_', '/', $class) . '.php');
                            	}
                            }
                            spl_autoload_register('autoloadLaggerClasses');
                            
                            $laggerES = new Lagger_Eventspace();
                            $debug = new Lagger_Handler_Debug($laggerES);
                            $errors = new Lagger_Handler_Errors($laggerES);
                            $exceptions = new Lagger_Handler_Exceptions($laggerES);
                            
                            // display all debug messages in console
                            $debug->addAction(new Lagger_Action_ChromeConsole('debug'), null);
                            
                            //display all errors in console and as notifications with 1 lifetime
                            $errorsChromeConsole = new Lagger_Action_ChromeConsole('error', 1);
                            $errors->addAction($errorsChromeConsole, null);
                            $exceptions->addAction($errorsChromeConsole, null);
                            
                            // test
                            $debug->handle('debug message', 'some,test,tags');
                            echo $unkownVar;
                            unkownFunction();</blockquote>
                            • 0
                              Благодарю ) Но, как по мне, такие моменты неплохо бы освещать в статье =)
                          • 0
                            Ох е… Чем же вас XDebug не «удовлетворяет»? В смысле какие проблемы, которые не решаются с помощью отладчика/профилировщика/трейсера XDebug, призвано решить данное приложение?
                            • +1
                              1. У XDebug есть плагины для логирования ошибок в различного рода IDE, но нормальных расширений для браузеров нет и быть не может в связи со сложностью его протокола, а т.к. насколько мне извество большинство веб-разработчиков не особо увлекаются использованием встроенных в IDE браузеров, то на практике использование XDebug для логирования ошибок становится не таким уж приятным занятием.

                              2. Т.к. в XDebug отсутствует различного рода логирование в файл или Email, то вам так или иначе придётся использовать некую дополнительную библиотеку, которая будет отвечать за своевременное уведомление вам о том, что на production-сервере что-то случилось.

                              3. XDebug это всё-таки стороннее расширение для PHP, которое не всегда есть возможность установить и тем более настроить.
                            • 0
                              1. У XDebug есть плагины для логирования ошибок в различного рода IDE, но нормальных расширений для браузеров нет и быть не может в связи со сложностью его протокола, а т.к. насколько мне извество большинство веб-разработчиков не особо увлекаются использованием встроенных в IDE браузеров, то на практике использование XDebug для логирования ошибок становится не таким уж приятным занятием.

                              2. Т.к. в XDebug отсутствует различного рода логирование в файл или Email, то вам так или иначе придётся использовать некую дополнительную библиотеку, которая будет отвечать за своевременное уведомление вам о том, что на production-сервере что-то случилось.

                              3. XDebug это всё-таки стороннее расширение для PHP, которое не всегда есть возможность установить и тем более настроить.
                              • 0
                                Bad Request

                                Your browser sent a request that this server could not understand.
                                Size of a request header field exceeds server limit.


                                пешально, я его поломал… слишком много E_NOTICE =)
                                • +1
                                  Первое, что могу посоветова — используйте Lagger_Skipper для игнорирования обработаки повторяющихся ошибок.

                                  Второй совет — ждите патча, в течении дня выложу.
                                • 0
                                  Как обещал — сделал патч. Нужно обновить Lagger и PHP Console.

                                  Если прежде допустимым колличеством сообщений было порядка 70, то теперь около 900-1000, и в случае превышения лимита браузер не падает, а выдаёт попап-уведомление с соответствующим сообщением. Это реализовано таким образом, что сообщения группируются по кукам с ограничением 4к на каждую куку. Раньше под каждое сообщение отводилась отдельная кука.

                                  Надеюсь вам хватит лимита в 1000 сообщений :)
                                  • 0
                                    Имеется ввиду лимит на то, что за один запрос скрипт может отправить на клиент до 1000 сообщений. Суммарное колличество сообщений обрабатываемых расширением ограничивается разве что размером оперативки.
                                • 0
                                  У Котерова есть модуль, который отлавливает ошибки, включая фатальные, и тоже умеет отправлять на мыло: dklab.ru/lib/Debug_ErrorHook/
                                  Не знаю, кто из вас сделал своё раньше, подумалось, что возможна была бы и кооперация.
                                  • 0
                                    Да не было никакой кооперации :)

                                    Первая версия Lagger-а появилась в далёком 2005 году, тогда ещё была написана на PHP4 и представляла из себя один единственный класс для обработки ошибок и логирования в файл и отправки на Email, потом класс был переписан под PHP5, потом расширен на полноценную библиотеку, которая была представлена на конференции Highload++ в Москве, в 2008, после чего было ещё пару глобальных рефакторинга.

                                    А про Debug_ErrorHook я даже не слышал ниразу. Сейчас посмотрел его исходники, так Lagger с ним как в функциональном так и в архитектурном плане даже близко ничего не имеет.
                                    • 0
                                      Не, я имел в виду, что кооперация была бы не плоха, ибо зачем делать два раза. Тем более если в одном из похожих проектов есть полезные фичи типа того же FirePHP/хромовой консоли.

                                      Но если в 2005, но понятно, значит просто девелоперы слишком часто варятся в собственном соку :) Про «представлена на конференции» — я и не знал, что такое бывает с PHP-библиотеками.
                                      • 0
                                        Одни и те же библиотеки народ часто реализует и это хорошо на самом деле т.к. есть из чего выбирать. А насчёт конференции, так меня туда пригласили только потому что у знакомого докладчика тема сопутствующая была — Мониторинг и Логирование, в итоге я его как бы дополнял.

                                        Думаю если разработчику Debug_ErrorHook захочется сделать вывод под PHP Console, то у него это очень просто получится т.к. там протокол взаимодействия элементарнейший. Я лично только рад буду, если мои разработки пригодятся кому-то.
                                        • 0
                                          Кстати, ещё у Котерова есть занятная библиотека PHP_Exceptionizer, которая любые ошибки, в т.ч. Notice (как настроено), преобразует в Exception'ы. dklab.ru/lib/PHP_Exceptionizer/ — может, пригодится. Я обычно использую её при разработке, а на почту получаю ошибки с рабочего сервера.
                                • 0
                                  Тот же Firebug.
                                  Уже и в ёпере есть своя консоль.
                                  Ждём такую же для ишака…
                                  • 0
                                    Чем оно лучше того же FirePHP:
                                    Нормально обрабатывает фатальные ошибки
                                    Отлавливает сообщения в AJAX-скриптах и IFrame-ах
                                    Имеет очень удобную функцию отображения сообщений во всплывающих уведомлениях
                                    Отображает backtrace вызова
                                    Отлавливает JavaScript ошибки
                                    Поддерживает более функциональную и гибко конфигурироуемую библиотеку Lagger

                                    гы..)
                                  • 0
                                    Очень хочу попробовать это расширение. Дайте, пожалуйста, ссылку на инструкцию по установке. Как связать php console и lagger?
                                    • 0
                                      Если вас интересует именно старая версия, то вот тут описано как её установить groups.google.com/forum/?hl=ru#!forum/php-console-deprecated-version

                                      Новая версия chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef
                                      • 0
                                        Я впервые узнал о lagger из этой статьи и с трудом представляю что это такое и нужно ли мне это. Насколько я понял, чтобы всё начало работать нужно сделать следующее:

                                        1. Install new version of PHP Console Google Chrome extension (https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef)
                                        2. Install new server library from github.com/barbushin/php-console. For example, using
                                        git clone https://github.com/barbushin/php-console.git php-console
                                        3. Add to project's code:
                                        $connector = PhpConsole\Connector::getInstance();
                                        $connector->setPassword('yohoho123', true);
                                        //...
                                        PhpConsole\Handler::getInstance()->debug($var, 'some.tags');
                                        


                                        И это всё? Или я что-то упустил?
                                        • 0
                                          И это всё :) Но только Lagger уже не совместим с новой PHP Console. Можете просто использовать их параллельно, конфликтовать они не будут.
                                    • 0
                                      Недавно появился модуль для Drupal, который добавляет эту библиотеку: drupal.org/project/pc

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.