PHP Console 3.0 — важнейшее обновление за 3 года



    Прошло 3 года с момента выхода первой версии, о которой вы могли читать в статье Как подружить PHP с консолью Google Chrome. За это время расширение набрало 43`000 активных пользователей, и, что не менее важно, в ноябре 2013 обновилось до версии 3.0. Несколько месяцев разработки, и получилась полностью переписанная, в несколько раз более функциональная версия.

    Новый функционал PHP Console 3.0

    • Отладка PHP ошибок и исключений (было в v1.1)
    • Дамп переменных любого типа
    • Выполнение PHP кода удалённо
    • Защита соединения по паролю
    • Группировка данных отладки по URL запроса
    • Открытие файла-строки ошибки в вашей IDE по клику на кнопку в уведомлении
    • Копирование данных ошибки/дампа в буфер обмена(для тестеров)
    • Новый клиент-сервер протокол без ограничений на размер данных
    • Новая PHP библиотека на GitHub
    • Новый плагин для Yii
    • Новый плагин для Laravel
    • Новый плагин для Silex
    • Новый модуль для Drupal (спасибо @Chi-teck)
    • И многое другое...

    В статье:

    • Скриншоты
    • Видео
    • Список функций Google Chrome расширения
    • Список функций PHP библиотеки
    • Голосование за портирование на другие языки


    Скриншоты (кликабельно)



    Вывод PHP ошибок и исключений


    image

    Дамп переменных любого типа


    image

    Выполнение PHP кода удалённо


    image

    Уведомления о JavaScript ошибках


    image

    Авторизация


    image

    Опции


    image

    Видео (см. в HD)


    Видео презентация с демонстрацией 90% функционала расширения. Также вы можете опробовать как это всё работает установив расширение и перейдя на страницу примеров тестового сервера (там кстати пример с PHP code remote execution настроен на песочницу с PHP 5.5, кому интересно, можете поэкспериментировать с новыми возможностями 5.5, только сервак не вешайте плз :)



    Функционал Google Chrome расширения PHP Console


    • Никаких иконок в тулбаре, только в адресной строке(когда активно на сервере)
    • Настройка в попапе по клику на иконку в адресной строке
    • Ошибки PHP, исключения и дамп переменных в JavaScript консоли(Ctrl+Shift+J)
      • Группировка по URL запроса
      • Обработка данных с переадресованных страниц
      • Вывод backtrace ошибок и исключений
    • Ошибки PHP, исключения и дамп переменных в попап уведомлениях
      • Авто-закрытие по времени(см. опции)
      • Открытие файла-строки ошибки в вашей IDE по клику на кнопку в уведомлении(см. опции)
      • Копирование данных ошибки/дампа в буфер обмена(см. опции)
    • Игнорирование вывода ошибок по типу
    • Игнорирование вывода дампа переменных по тэгу
    • Обработка данных с любых источников: Web-страница, AJAX, IFrame
    • Обрезает длинные пути к файлам
    • JavaScript ошибки в попап уведомлениях(см. опции)
      • Игнорирует повторяющиеся ошибки
      • Игнорирует ошибки Google Chrome расширений
      • Не переопределяет пользовательские обработчики ошибок
    • Авторизация по паролю
    • Выполнение PHP кода удалённо


    Функционал PHP библиотеки


    • Connector
      • Работает с разными кодировками сервера
      • Оптимизированная инициализация(может быть испольован на серверах под нагрузками)
      • Поддерживает режим соединения только по HTTPS
      • Защита соединения только по списку разрешённых IP масок

    • Handler
      • Обработка PHP ошибок(+фатальные и лимит памяти) и исключений
      • Игнорирование одинаковых ошибок
      • Вызов определённых ранее обработчиков ошибок и исключений

    • Dumper
      • Дамп переменных любого типа
      • Дамп protected & private свойств и имени классов объектов
      • Ограничение дампов по уровню вложенности, количеству элементов, размеру элемента и дампа
      • Текстовое представление callback-ов и Closure
      • Автоопределение строки: файла и backtrace вызова дампа(опционально)

    • Auth
      • Защита соединения по паролю
      • Авторизационные токены хешируются SHA-256, с привязкой к IP клиента

    • EvalProvider
      • Удалённое выполнение PHP кода только в защищённом паролем режиме
      • Каждый запрос подписывается SHA-256 хешем от строки кода и авторизационного токена
      • Результат содержит: «output», «return» и «time» данные
      • Обработка PHP ошибок и исключений в выполняемом коде
      • Добавление переменных для быстрого доступа из кода выполняемого в терминале
      • Защита доступа к файловой системе посроедством PHP опции “open_basedir”

    • Helper — регистрирует глобальный класс PC для более короткого вызова дампа переменных
    • PsrLogger — реализация интерфейса PSR-3 логгера
    • OldVersionAdapter — для миграции с PhpConsole v1.* на v3.* без изменения кода


    Ваше мнение


    Код серверной части хоть и покрыт ~200 тестами, но так или иначе возможны какие-то недочёты и баги. Буду очень благодарен, если вы оставите отзыв о расширении, и, если обнаружите какой-то баг или недостающий функционал, то сообщите об этом.

    Так же буду очень благодарен всем кто откликнется помочь в портировании PHP Console на другие языки.
    Актуально ли портирование расширения на другие языки

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

    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 50
    • +3
      Хотеть для Питона!
      • 0
        Какие проблемы можно решать с помощью этого плагина?
        Я подумал и понял, что не вижу ситуаций, в которых смог бы его применить.
        • 0
          например в симфони довольно обширный debug-log, очень удобно смотреть его в консоли, а не вычленять из лог-файла.
          Можно конечно взять демон который будет следить за изменениями, но все же в одном окне гораздо удобнее.
          На сколько я знаю в руби есть гораздо более мощное расширение — дополняет chrome-web-tools. Как webprofiler в симфони, только по f12)
          • 0
            То, что расширение дополняет web-tools не делает его более мощным и удобным. У меня изначально тоже был вариант реализации вывода данных и реализация терминала в виде дополнительных табов в Dev tools, но на практике использования это окозалось совсем неудобным, и не столь гибким в реализации.
            • +1
              смысл не только в логах. У вас есть например request-context, подробная информация о шаблонах, запросы в bd. Вот скрин, думаю понятно что это удобно)
              image
              • 0
                Всё то же самое есть, c привязкой к контексту, только выводится немного в другом виде:

                • 0
                  Я не хочу спорить, у вас отличное расширение, но мне хотя бы по скринам больше нравится расширение ruby.
                  • 0
                    В частно случае использование для отладки SQL решение для Ruby смотрится и работает конечно намного лучше. Но теперь представьте, если вы логируете не только SQL, а какие-то объекты. И ещё представьте, что у вас там между какими-то запросами проскакивает ошибка. В решении для Ruby вы не увидите между какими запросами проскочила эта ошибка, так же вы не увидите промежуточную информацию по дампу прочих переменных.

                    Мне когда пришлось выбирать между красотой и универсальностью отображения, то я выбрал универсальность. Решил не обременять пользователя кликами по разным табам. Мне кажется одной JS консоли может быть достаточно для просмотра всех данных отладки, тем более когда в случае с PHP Console они группируются по URL запроса.
                • 0
                  Может, есть что-то конкретно с таким видом для sf2?
              • –2
                Зачм смотреть лог с development-окружения, где есть отладчик?
                Логи смотрю с боевых, и этот плагин там работать не будет.
                • +1
                  потому что доступ до отладчика не так прост как до chrome-dev-tools
                  • 0
                    Вы понимаете разницу между логгерами и отладчиками?
              • 0
                Отладка PHP скриптов. В частности очень удобно отлаживать AJAX запросы. Вообще тут достаточно много разных функций, для разных целей. Мне кажется при всём приведённом в статье материале у человека занимающегося веб-разработкой не должно возникнуть вопроса подобно вашему.

                А человеку не имеющему отношения к веб-деву PHP Console конечно же не может быть ничем полезна…
                • 0
                  Я про отладку и говорю. Чем мне может помочь этот плагин, если у меня есть хороший отладчик в PhpStorm?
                  Какие дополнительные возможности отладки он мне даст?

                  И меня немного заинтересовало ваше сообщение про AJAX: чем отличается AJAX-запрос от не AJAX при отладке? Я никогда никакой разницы не замечал.
                  • 0
                    Акцент на AJAX я сделал потому, что 90% библиотек по обработке ошибок в PHP с выводом ошибок в браузер практически бесполезны при выводе ошибок в AJAX запросах.

                    И я не совсем понял, вы сравниваете PHP Console cо связкой PhpStorm + xdebug на удалённой отладке?
                    • 0
                      А зачем нужны какие-то дополнительные библиотеки по обработке ошибок в PHP? Ошибку и так сразу видно, вне зависимости от того, AJAX запрос или не AJAX.

                      И я не совсем понял, вы сравниваете PHP Console cо связкой PhpStorm + xdebug на удалённой отладке?
                      Для начала давайте определммся, говорим мы о среде разработки или о боевой среде.
                      • 0
                        Я могу ответить на 100 ваших вопросах т.к. очень хорошо разбираюсь в том как работают удалённые отладчики в том же PhpStorm, и зачем была написана PHP Console и в каких целях используется. Вы можете тезисно изложить свою позицию?

                        Например: я считаю, что бессмысленно использовать PHP Console, когда есть xdebug+PhpStorm.
                        • 0
                          Например: я считаю, что бессмысленно использовать PHP Console, когда есть xdebug+PhpStorm.
                          Да, я так и написал выше, что не вижу ситуаций, когда он мне будет полезен.
                        • 0
                          Ошибку и так сразу видно, вне зависимости от того, AJAX запрос или не AJAX.

                          А каким образом? Без специальных инструментов в браузере ответ серевера не виден.
                          • 0
                            А вы разрабатываете без инструментов разработки?
                            Firebug или DevTools — must have.
                            • +1
                              Ну вот расскажите, каким образом в хроме убедится в том, что при выполнении ajax запроса на сервере не возникло php ошибок. Я пока знаю только один способ:

                              1. Открыть в devtools вкладку network
                              2. Выделить нужный запрос
                              3. Перейти на вкладку response.

                              Сколько это будет кликов? Что делать если на странице таких AJAX запросов куча?

                              А в данном случае не придётся ничего кликать. Серверные ошибки отображаются во всплывающем окне.
                              • 0
                                Достаточно посмотреть на ответы. Если нет ответов 500 — нет ошибок.
                                • 0
                                  Если нет ответов 500 — нет ошибок.

                                  А почему вы решиши что php ошибка всегда приводит к 500-ому ответу сервера?
                                  • 0
                                    Потому что установка обработчика ошибок с выкидыванием исключения — это best practice.
                                    • 0
                                      А причем тут best practice? Вы не работаете с чужим кодом?
                                      • 0
                                        Работаю, с тем, который написан по best practices.
                                        На собеседовании или при взятии работы на фрилансе у вас всегда есть возможность узнать, хороший код или нет. И если нет, правильнее будет не согласиться: кроме зарплаты есть и другие критерии.
                                        • 0
                                          OnYourLips предлагает вставлять обработчик, который будет пробрасывать 500-ю, и если при выполнении на сайте действия при котором отправляется ajax запрос происходит что-то странное, то лезть в консоль Network, искать там запрос с 500-ой, и если найдёте, то смотреть дамп ошибки в Response запроса.

                                          Всё ведь просто :)
                  • 0
                    А у меня вот сейчас нету звука на компе, чтобы смотреть видео, в котором объясняют как его прицепить. Не мог бы кто-нибудь, пожалуйста, дать ссылку на подробное описание установки?
                    • +2
                      В видео нет никакого закадрового текста, только мелодичный саундтрэк. Установка очень простая:

                      1. Устанавливаете Google Chrome расширение PHP Console.
                      2. Копируете PHP библиотеку себе на сервер, и подключаете её к своему проекту как это делается в /examples.
                      • 0
                        О, ясно и понятно! Спасибо.
                    • 0
                      Remote Execution не получается запустить. В том числе на вашем сервере. Проверил на разных системах.
                      Окно с консолью появляется, но на Ctrl + Enter никак не реагирует.
                    • 0
                      Мне, как и OnYourLips, не совсем понятно что дает это расширение по сравнению со связкой xdebug + netbeans кроме как то, что расширение доступно из консоли chrome?
                      • 0
                        Ребята, вы оба правы. Xdebug + PhpStorm/NetBeans — действительно много лучше и удобней, чем какое-то там расширение в Хроме. Надеюсь кто-нибудь из вас напишет статью для широкой публики с описанием всех фич, которые даёт эта связка. После этого сможем по существу поговорить в каких именно фичах и в каких случаях то или иное решение является лучшим выбором.

                        Не обижайтесь только, но пока вы задаёте больше абстрактно-обобщённых вопросов, чем приводите конкретные случаи использования конкретного функционала.
                        • 0
                          А почему бы вам не написать, какие заджачи может решать этот интрумент?
                          Пока что вы перечислили функции, а не задачи. Мы с PaulIsh подумали и не смогли отыскать применение этим функциям.
                          • 0
                            Ну просто кроме вас двоих меня пока никто не спрашивал где и как можно этим расширением пользоваться :) Если бы спрашивало чуть больше людей, то обязательно описал бы. Сейчас у меня на это просто времени нет, люди пишут про мелкие баги в Ubuntu, приходится со всеми сейчас диалог вести.

                            Самый просто пример использования: включаете обработчик ошибок, включаете логирование всех SQL запросов, в случае ошибки наблюдаете что где упало и при каких запросах.

                            Если у вас в команде есть тестеры, то тоже может быть полезно: включаете обработчик ошибок и отображение Copy to clipboard button. Тестеры проходят сценарии по сайту, всплывает попап с ошибкой, кликают на Copy to clipboard, заводят тикет с описанием действий при которых произошла ошибка и прикрепляют дамп ошибки с трейсом и т.п.
                          • 0
                            Поймите меня правильно. Я ни в коем случае не против вашего расширения для Chrome. Более того, я считаю что отладчик это очень важный инструмент и рад, что появляются новые приложения призванные улучшить отладку под Web.

                            Просто вы, представляя свое расширение, не сравниваете его с существующими инструментами для PHP отладки. В результате мне (возможно в силу того, что я только с год работаю над проектами PHP+ExtJs, а до этого всю жизнь только Pascal) не совсем ясно какие преимущества/недостатки имеет ваш инструмент по сравнению со стандартными инструментами для отладки PHP.

                            Возможно, если бы вы сделали развернутое сравнение, то это бы привлекло большее количество разработчиков к представляемому расширению.
                            • +2
                              Это обзорная статья посвещённая одному конкретному продукту, а не вопросу: Как лучше дебажиться в PHP. Вы с тем же успехом можете обзор любого другого приложения или устройства на хабре критикаовать мол «А что вы с другими продуктами не сравниваете? А что вы мне тут про функционал новой версии PostgreSQL рассказываете без сравнения с MySQL? А зачем мне переходить на вашу PostgreSQL, если MySQL полностью удовлетворяет моим потребностям?» :)

                              Если бы я начал проводить расширенное сравнение, давать свою оценку чужим продуктам и способам их использования, то это могло бы привести к очередному бессмысленному холивару. А так каждый сам принимает своё решение.
                              • 0
                                Лично я использую vim+xdebug для отладки, но на продакшене вывод ошибок в браузер отключен и есть только системный лог. Можно, конечно поискать ошибки и там, но намного удобнее получить уведомление о проблеме прямо здесь и сейчас находясь на данной странице, потому что в логах сайта очень-очень много разных записей и все они нужны. А получить быстро сообщение об ошибке мне нужно, чтобы максимально быстро отреагировать и починить баг. Иначе мне нужно сделать копию продакшена (а это долго) и дебажить уже на копии. Поэтому я выбираю PHP Console.
                        • 0
                          Хороший инструмент для отладки.
                          Под Firefox есть похожая связка Firebug + FirePHP.
                          • 0
                            Спасибо за отличный инструмент. Пробовал привязать открытие файлов в ubuntu 13/vim, но пока не удалось — просто открывает vim без файла. Как настою — опишу как это сделать.

                            Использую модуль для Drupal, который добавляет эту библиотеку (http://drupal.org/project/pc) и заметил, что не могу запустить дебагер, так как постоянно идут запросы из браузера от расширения Сhrome. Приходится разлогиниваться, чтобы дебажить.

                            Вопрос: это ожидаемое поведение? Можно ли сделать возможность включать/выключать без необходимости логиниться каждый раз? Или это баг в drupal-модуле?
                            • 0
                              Кстати, а почему JS-код Chrome extension обфусцирован? Скрыть его все равно не получится, хранится он локально и на скорость работы это не повлияет. Если уж экономить, то стоит предыдущие версии удалить из папки экстеншена. Просто перед добавлением в проект я бы хотел быть уверен, что код не сливает данные на сторону, а обфускация мешает это сделать. Код, кстати, красивый — тут ничего не скажешь.
                              • 0
                                1. Код не обфусцирован, а сжат при помощи Google Closure с опцией Advanced Optimization.
                                2. Сжатие кода в данном случае очень даже влияет на скорость его работы и на размер потребляемой оперативки.
                                3. Т.к. код не обфусцирован, то при большом желании вы можете его проанализировать на предмет скрытой отправки данных.
                                4. Анализировать код расширения на безопасность бессмысленно т.к. разработчик может просто на 1 день выпустить обновление с «вредоносным кодом», и на следующий день закрыть его новым «безопасным» обновлением.
                                5. При загрузке расширения на WebStore его код пропукается через гугловый анализатор, который отслеживает всякого рода вредности и при необходимости блокирует расширение.
                                6. Предыдущие версии расширения у вас на жёстком диске хранит сам Chrome, и в память загружается только последняя версия(ту что я последней загрузил на WebStore).
                                7. Ну и в конце концов, в расширении стоит ссылка на мой профиль на LinkedIn. Если бы я планировал делать что-то нехорошее с пользовательскими данными, как вы думаете, стал бы я так светиться? :)

                                Но так или иначе, спасибо за вопрос! :)
                                • 0
                                  Код я смотрел — там все переменные заменены буквами и трудно читать, но изучить действительно можно. Про п.4 я знаю, но всё же привычка делать код-ревью заставляет изучать. Спасибо за подробнейший ответ — я думаю, что даже тем, кто вопрос не задал и не задумывался о безопасности будет полезно это знать.
                              • 0
                                В данный момент общаюсь с разработчиком этого модуля, по его словам в последней версии всё исправлено. Обновите код модуля и код php-console библиотеки.
                                • +1
                                  Да, всё исправлено. Обновил и модуль, и библиотеку — всё работает! Спасибо.

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