DumPHPer — Advanced PHP var dumper или замена var_dump

    Наверно, всем когда-либо приходилось пользоваться встроенными функциями var_dump или print_r. Пользоваться ими крайне неудобно, для чтения дампа приходилось либо обрамлять вызовы этих функций тегом <pre> либо смотреть исходный код страницы. Более того print_r не даёт информации о типе переменных, а var_dump еще не так давно зависал при выводе рекурсивных массивов. Поэтому, я решил написать свой дампер, который бы повторял всё то, что умеют вышеописанные функции, а также добавлял дополнительную информацию об объектах и их свойствах и делал дамп удобным для чтения/изучения.


    Недавно подумал, а почему бы не поделиться поделиться кодом с общественностью. Человек я ленивый, поэтому долго не брался переписать код (старый код был «вонючим»), да и чтобы статью написать надо иметь время и желание. Времени для создания странички проекта на своем сайте, равно как и на создание самого сайта я еще не нашел, всё из-за той же Лени.

    Что уже работает

    — собственно дамп
    — цветовая подсветка типов
    — сворачивание/разворачивание массивов/объектов
    — определение рекурсии массивов/объектов
    — внутри одного вызова дампится только первое упоминание конкретного инстанса объекта, при повторном нахождении инстанса ставится ссылка на его первое упоминание, которая при нажатии его находит и раскрывает
    — состоит только из себя

    Что в планах

    — ввести просчет инстансов для массивов (с функционалом аналогичным для объектов), с возможностью отключения данной ресурсоемкой операции.

    Известные баги

    — в PHP 5.2 выводятся копии непубличных свойств объекта (пока нет идей как это исправить, ибо достаются они посредством преобразования в массив).

    Краткая демонстрация доступна по адресу widowmaker.kiev.ua/dumper.html

    Скачать исходник с гуглокода



    Вместо PS

    0. Нужна такая штука?
    1. Какую лицензию посоветуете?
    2. Как лучше зарефакторить код (код мне не нравится), но так чтобы не было сотни объектов?
    3. Перемещать в блог PHP?
    4. Идеи как исправить баг, пожелания и критика приветствуются.

    Update
    Я так понял минусуют из-за того, что не описано «зачем?». Отвечу: затем, что не всегда есть возможность поставить модуль для дебага (например нету ssh), а этот скриптик написан на php, и его можно просто залить по фтп.
    Поделиться публикацией

    Похожие публикации

    Комментарии 35

      +1
      Посмотрите в сторону xDebug…
        0
        Суть в том что не всегда его можно поставить… Что делать если доступа к ssh нету, xdebug не стоит, а отдебажить надо???
          +1
          Значит вы как-то неправильно ведете разработку, раз попали в такую ситуацию :)
            +1
            Я обновляю проекты через свн, но частенько меня просят зайти и поправить что-то, предоставляя доступ только к фтп. Не все еще знаю такие слова как svn, ssh,…
              0
              Дык слить по FTP к себе, воссоздать окружение и отлаживать, пока не надоест.

              Вам не кажется, что на живом сервере ваши красивые вардампы красоты не прибавят?
                +1
                в самой функии dump можно добавить:
                if ($_COOKIE['super_secure_key'] == 'linux' )
                  Dumphper::dump($var);
                0
                Ну это несерьезно как-то без ssh что-то делать. Хотя если сайт-визитку установить или бложик на вордпрессе, то, наверно, нормально.
              +1
              Я чо т не понял… если по SSH заливать, то XDebug сам на хостинге появляется ?? Или наличие SSH говорит о возможности дебага в принципе… чо за бред, короче? ))

              По делу — цветовая гамма — отстой (новогоднюю ёлку имитируешь там ?). Каждый раз кликать на "+" — аналогично…
              P.S. Не пиши здесь )))
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              Что вы хотели этим сказать?
              • НЛО прилетело и опубликовало эту надпись здесь
              +1
              где-то я уже видел такую штуку=) dBug =)
                0
                Спасибо, посмотрим на «конкурента» :)

                Судя по всему объекты он выводит не так подробно, но зато ресурсы выводит подробно, я над ресурсами не заморачивался, их уж больно много, а делать только основные — не комильфо.

                P.S. Если будет востребовано, то можно и ресурсы дописать, мне не надо было
                0
                Мне кажется, что не очень удобно показываются массивы с большой вложенностью, если нужно быстро увидеть данные во 2-3-й вложенности, то приходится делать ненужные клики.

                  0
                  в скрипте настраивается, количество развернутых по умолчанию уровней.
                  +2
                  Когда то пытался написать аналог print_r на чистом PHP. Уткнулся в отслеживание зацикливаний. Пришлось добавлять в каждый пройденный элемент флажок. Впоследствие забил и просто ограничил глубину рекурсии.
                  А вы как отслеживаете?
                    0
                    Основная идея — массив со списком парентов:
                    Для объектов всё просто — "===" с парентами…
                    С массивами тяжелее — добавляю в массив элемент со случайно сгенерированным ключем и проверяю появился ли он в паренте. После проверки ключ удаляется.
                      0
                      Я делал такой дампер с помощью serialize — не приходится задумываться над рекурсиями и зацикливаниями. Минус — ресурсы отпадают.
                    0
                    Под php4, я так понимаю, не работает?

                    А ведь нередко там, где невозможно поставить модуль для дебага и php может быть старый…

                    У меня, как раз, такая ситуация. Хотя dumphper (судя по демо) очень понравился.
                      0
                      Можно переделать и под php4, правда с объекты там будут выводится очень просто, но думаю проблем не составит
                        0
                        Отлично. Если для PHP 4 версия будет, напишите ответ (чтобы мне письмо на email пришло).
                        С удовольствием потестирую и попользуюсь.
                          0
                          под какую версию PHP 4 вам надо, на какой версии тестировать?
                            0
                            Сейчас у нас — 4.4.9.
                              0
                              кстати, объекты мне в php4-скриптах не надо смотреть, почему я и упомянул lite-версию.
                            0
                            Или так: если будете делать версию c поддержкой php4 (даже, если она будет lite, что
                            тоже хорошо), напишите тут RSS, на который я могу подписаться, чтобы о релизе узнать.
                          0
                            0
                            У Krumo есть серьезный недостаток(имхо) — его надо устанавливать, настраивать пути, мой скрипт просто подключить и пользоваться, он может лежать (и по хорошему должен) вне веб рута.
                            Да и объекты он выводит проще, я использую Reflection чтобы вытащить дополнительные данные о объекте и его свойствах, что часто бывает полезно.

                            Но спасибо за аналог, важно знать ху из ху :)
                            0
                            Все равно сложновато, сделайте чтобы небыло стилей, все стили прописывались внутри объектов, тогда лично я буду использовать (Просто нельзя в текущем проекте так просто вывести все те стили)
                              0
                              Вы пробовали подключать скрипт? Стили выводятся автоматически при первом дампе, стили выводятся самим скриптом внутри тега <style/>, и я не вижу причины, почему их нельзя так просто вывести.
                              0
                              Пожалуйста, перенесите в тематический блог.
                              0
                              Советую добавить в todo еще один пункт, а именно правильное определение длины UTF-8 строк в дампе строковой переменной, чего так не хватает в нативной функции.
                                0
                                Спасибо за идею, попробуем реализовать…
                                0
                                Задумка интересная, но как уже сказали выше — слишком цветасто и аляповато получается. На мой взгляд — это лишнее. Просто удобная табличка — этого уже хватает.
                                Подсветка по типам — ИМХО тоже лишнее. Всё равно отслеживать тип по цвету, скорее всего никто не будет.
                                Как вариант — оставить различие по цветам, например, для переменных и массивов (обьектов). В остальных случаях, мне кажется текстового указания типа (integer, string и пр.) вполне хватит для ориентации в пространстве дампа. :)
                                  0
                                  Извиняюсь, что подымаю старую тему, но, возможно, Вас заинтересует вот эта разработка
                                  dklab.ru/lib/Debug_HackerConsole/

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

                                  Самое читаемое