PHP - рекурсивный акроним словосочетания «PHP: Hypertext Preprocessor» Создать сайт
php
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход   РегистрацияРегистрация 

Готовое решение: Альтернатива функции var_dump

 
Начать новую тему   Ответить на тему    Список форумов PHP.RU -> Решения, алгоритмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Пт Мар 16, 2007 10:41    Заголовок сообщения: Готовое решение: Альтернатива функции var_dump Ответить с цитатой

зачастую в процессе отладки бывает необходимо сделать дамп какой-нибудь переменной, чтобы проверить чему же она всё-таки равна. в php есть стандартные функции для этого дела: var_dump и print_r, у которых есть три беды:
1. вставка их вывода в html режет всё их форматирование и в итоге разобрать где что очень сложно. эту проблему обычно решают обрамлением тегами <pre>, а чтобы не писать их каждый раз пишуть функцию-враппер.
2. в случае больших массивов бывает сложно найти нужное место, потому как следующий элемент массива будет находиться после всех детей предыдущего. то есть они выводят сразу всё, а не только то, что необходимо.
3. если вы вставили куда-то вывод переменной, потом отошли на годик другой, вернулись и обнаружили что забыли убрать дамп - бывает довольно сложно найти то место, куда он был вставлен.

в связи с этим я написал функцию дампа в html файл. посмотреть функцию в действии и сравнить с конкурентами можно здесь: http://dark-demon.jino-net.ru/dumptest/
там же можно скачать тестовый пакет.

чтобы также красиво всё отображалось и флип-флопилось, нужно подключить к выводимой страничке скрипт main.js и стиль main.css, либо интегрировать их в ваши скрипты и стили.
в общем, смотрите index.php - там всё предельно ясно.

вызывать функцию элементарно:
Код:
vardump($a);

или с указанием имени:
Код:
vardump($a,'$a');


с интересом выслушаю предложения и пожелания.

в последней версии добавлено:
- совместимость с IE
- отлов рекурсии
- линки на автораскрытие ветвей (висят на именах переменных)
- даблклик раскрывает все дочерние ветви, кроме скрытых
- скрытые ветви на интах, картинках и потоках с дополнительной информацией.


Последний раз редактировалось: dark-demon (Вс Апр 01, 2007 00:38), всего редактировалось 5 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Google
Помошник


Только для не зарегистрированных пользователей
vb
nobody


Зарегистрирован: 06.06.2006
Сообщения: 908
Откуда: Saint-Petersburg

СообщениеДобавлено: Пт Мар 16, 2007 11:03    Заголовок сообщения: Ответить с цитатой

dark-demon
неплохая идея но есть большой касяк:
Когда делаешь дамп часто делаешь параллельно - правку строчки F5, правку строчки F5 правку строчки F5.
Если тебе надо смотреть на значение где нибудь на 4-м уровне то замаешься каждый раз отщелкивать все. То есть нужно сохранять какие ветви были раскрыты, чтобы после рефреша они опять оказались раскрытыми.

Второй касяк - это Ctrl+F не будет работать. То есть поиск возможен только визуальный - это тоже не есть гуд. Поле чтоли добавить для поиска. Хотя это уже конечно придирка :). Но первый пункт на мой взгляд просто обязателен.

p.s. выделяй код тегами [ php ] <? ?> [/php], а вообще молодец :)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Пт Мар 16, 2007 11:21    Заголовок сообщения: Ответить с цитатой

1. надо подумать...
2. поиск работает, но только по открытым веткам. иногда это удобно. хотя, наверно, можно прикрутить кнопочку "развернуть всё дерево"...
_________________
 
\\(x\(x_\(x_x\(0_0)/x_x)/_x)/x)//
смерть человекам!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
vb
nobody


Зарегистрирован: 06.06.2006
Сообщения: 908
Откуда: Saint-Petersburg

СообщениеДобавлено: Пт Мар 16, 2007 11:35    Заголовок сообщения: Ответить с цитатой

dark-demon писал(а):
работает, но только по открытым веткам. иногда это удобно.

это итак понятно :). И удобно это всегда когда просматриваешь боьшие массивы данных с большим разбросом этих самых данных. Если приделывать кнопку то наверное она должны быть поверх всего всегда доступна. Иначе не очень то она и нужна.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Mavir



Зарегистрирован: 13.03.2006
Сообщения: 1452
Откуда: Минск

СообщениеДобавлено: Пт Мар 16, 2007 12:08    Заголовок сообщения: Ответить с цитатой

Для отладки использую класс dBug.
_________________
Не плачьте, из-за того, что это закончилось; улыбнитесь, потому что это случилось.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Psih
Телепат


Зарегистрирован: 28.12.2006
Сообщения: 2244
Откуда: Рига, Латвия

СообщениеДобавлено: Пт Мар 16, 2007 14:31    Заголовок сообщения: Ответить с цитатой

А я лично использую сфою функцию
PHP:
  1.  <?
  2.  function _debug($var = 'no value', $die = false)
  3.  {
  4.      if (in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '192.168.0.1')))
  5.      {
  6.          if ($var === true || $var === false){
  7.              echo $var === true ? 'true' : 'false';
  8.              if ($die)
  9.                  die();
  10.              return;
  11.          }
  12.          if (is_array($var) || is_object($var)){
  13.              echo '<pre>'.print_r($var, true).'</pre>';
  14.              if ($die)
  15.                  die();
  16.              return;
  17.          }
  18.          echo htmlspecialchars($var);
  19.          if ($die)
  20.                  die();
  21.          return;
  22.      }
  23.  }
  24.  ?>

Если данных много, я просто вывожу ту часть, где у меня возможный глюк :)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Вт Мар 20, 2007 23:46    Заголовок сообщения: Ответить с цитатой

Всё, финальный релиз ^_^ всех заинтересовавшихся прошу перечитать первый пост.
_________________
 
\\(x\(x_\(x_x\(0_0)/x_x)/_x)/x)//
смерть человекам!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Danilevsky



Зарегистрирован: 12.02.2006
Сообщения: 298
Откуда: Киев

СообщениеДобавлено: Чт Мар 22, 2007 07:57    Заголовок сообщения: Ответить с цитатой

Mavir писал(а):
Для отладки использую класс dBug.

определенно, очень удобный и полезный класс
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора Yahoo Messenger MSN Messenger
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Чт Мар 22, 2007 16:08    Заголовок сообщения: Ответить с цитатой

пара камней в его огород: NULL распознаёт как пустую строку, при выводе не заменяет сущности, простую переменную (не объект, массив или ресурс) выводит без какого-либо оформления.

Последний раз редактировалось: dark-demon (Чт Мар 29, 2007 15:47), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Hight
соАдмин


Зарегистрирован: 05.03.2006
Сообщения: 6157
Откуда: из злой параллельной вселенной

СообщениеДобавлено: Чт Мар 29, 2007 12:16    Заголовок сообщения: Ответить с цитатой

да, интересно... единственное, что не понравилось - это "заморочка" с шаблонами, из-за этого тяжело использовать данную разработку. всё-таки автор для себя писал. а лично я предпочитаю print_r ;)
_________________
Всё сложное - не нужно, всё нужное - просто.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Чт Мар 29, 2007 15:45    Заголовок сообщения: Ответить с цитатой

нет там никаких заморочек... просто положить все шаблоны в папку out в папке со скриптом...
сегодня выложу всё одним архивом...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Hight
соАдмин


Зарегистрирован: 05.03.2006
Сообщения: 6157
Откуда: из злой параллельной вселенной

СообщениеДобавлено: Чт Мар 29, 2007 15:58    Заголовок сообщения: Ответить с цитатой

dark-demon писал(а):
нет там никаких заморочек...

я не просто так в кавычки это слово взял.
dark-demon писал(а):
просто положить все шаблоны в папку out в папке со скриптом...

отладочная функция, зачем вообще шаблоны. хотя, на вкус на цвет, как говорится 8)
_________________
Всё сложное - не нужно, всё нужное - просто.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Psih
Телепат


Зарегистрирован: 28.12.2006
Сообщения: 2244
Откуда: Рига, Латвия

СообщениеДобавлено: Чт Мар 29, 2007 16:02    Заголовок сообщения: Ответить с цитатой

PHP:
  1.  <?php
  2.  echo '<pre>'.print_r($variable, true).'</pre>';
  3.  ?>

И ненадо никаких шаблонов. Удобно и легко читаеться. Прикручивать ещё какие-то шаблоны и классы для дебага... ужос на!
Представляю всю эту колбасню раскрашенную в небольшой ячейке таблицы которая в центре сайта где-нить :D
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Чт Мар 29, 2007 16:30    Заголовок сообщения: Ответить с цитатой

Цитата:
Прикручивать ещё какие-то шаблоны и классы для дебага... ужос на!

1. не только для дебага. сей "шаблонизатор" - продвинутая замена обычному инклуду.
2. один раз прикрутить, чтобы потом на всю жизнь забыть про недоразумение print_r, - не такая уж и большая цена.

Цитата:
Представляю всю эту колбасню раскрашенную в небольшой ячейке таблицы которая в центре сайта где-нить
представляю как её разопрёт от <pre>...

кроме <pre> тебе ещё нужно юзать htmlspecialchars, чтобы отображалость то, что в строке, а не то, как это выводится в браузере. да и вообще, информативность у print_r крайне низкая.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Чт Мар 29, 2007 16:54    Заголовок сообщения: Ответить с цитатой

кстати, vardump благодаря нейтральным цветам замечательно подходит к любому дизайну, в отличие от аляповатого dBug :-]
_________________
 
\\(x\(x_\(x_x\(0_0)/x_x)/_x)/x)//
смерть человекам!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mavir



Зарегистрирован: 13.03.2006
Сообщения: 1452
Откуда: Минск

СообщениеДобавлено: Чт Мар 29, 2007 17:33    Заголовок сообщения: Ответить с цитатой

dark-demon писал(а):
кстати, vardump благодаря нейтральным цветам замечательно подходит к любому дизайну, в отличие от аляповатого dBug

Это все меняется с помощью CSS
_________________
Не плачьте, из-за того, что это закончилось; улыбнитесь, потому что это случилось.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Чт Мар 29, 2007 18:33    Заголовок сообщения: Ответить с цитатой

ну вот и выбирай, либо править CSS, либо прокручивать темплейты :)
Кстати, автор dBug сказал, что поправил основные отмеченные мной баги - рекомендую обновить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Сб Мар 31, 2007 02:29    Заголовок сообщения: Ответить с цитатой

Поправил, да не все. Варнинги всё ещё появляются и замены на html-сущности так и не происходит...

Обновил сабж - теперь тестовый пакет можно скачать одним архивом.
_________________
 
\\(x\(x_\(x_x\(0_0)/x_x)/_x)/x)//
смерть человекам!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
MiksIr



Зарегистрирован: 29.11.2006
Сообщения: 670

СообщениеДобавлено: Сб Мар 31, 2007 13:11    Заголовок сообщения: Ответить с цитатой

Всегда хватало print_r, выыод читался безо всякого pre простым view_source, нужное место искалось поиском, и забывать убрать print_r после отладки как-то не удавалось забыть - на рабочем месте не бухаем, но даже если и забыли, grep найдет все, что нужно.
Чорт, неужели я опять что-то делаю не так? ;(
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Вс Апр 01, 2007 00:33    Заголовок сообщения: Ответить с цитатой

Цитата:
Всегда хватало print_r, выыод читался безо всякого pre простым view_source, нужное место искалось поиском
ключевое слово - "искалось" :) в нескольких тяжёлых дампах приходится усердно искать нужные данные. и при рефреше - всё по новой.

Цитата:
забывать убрать print_r после отладки как-то не удавалось забыть - на рабочем месте не бухаем
для этого не обязательно бухать - можно просто отвлечь.

Цитата:
grep найдет все, что нужно.
могу поспорить он найдёт ещё и кучу строк типа:
Код:
#var_dump($myvariable);
впрочем, не в этом основная причина - иметь трейсдамп полезно, чтобы можно было тут же посмотреть с какими параметрами была вызвана функция и откуда. не знаю как тебе, а мне в таких случаях удобнее щёлкнуть пару раз мышью, чем переключаться на редактор, добавлять трейсдамп, закачивать на сервер и переключаться обратно. или другой пример: делаешь дамп массива одно из полей которого содержит таймстемп. чтобы узнать дату тебе нужно лезть в сорц и добавлять отдельный вывод для этого таймстемпа. мне же для этого достаточно одного щелчка мышью.
_________________
 
\\(x\(x_\(x_x\(0_0)/x_x)/_x)/x)//
смерть человекам!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Dagdamor



Зарегистрирован: 04.02.2006
Сообщения: 1789
Откуда: Барнаул

СообщениеДобавлено: Вс Апр 01, 2007 00:43    Заголовок сообщения: Ответить с цитатой

Небольшой оффтоп:
Интересно, а можно ли как-нибудь в PHP (под локальной сборкой) узнать состояние клавиатуры? ;) Scroll Lock включен - сайт работает в режиме отладки, выключен - все как обычно, а на продуктиве данная функция себя вообще никак не проявляет :D Удобно ведь ;)
_________________
Братья и сестры, опомнитесь! Что вы делаете? Вы же братья и сестры...
PHP Compiler - простой, но мощный фреймворк на PHP
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Гость






СообщениеДобавлено: Вс Апр 01, 2007 02:12    Заголовок сообщения: Ответить с цитатой

Dagdamor, интересная идея :) можно повесить на хоткеи и яваскриптом ставить куку.
Вернуться к началу
AlexGousev



Зарегистрирован: 25.03.2006
Сообщения: 1507
Откуда: Москва

СообщениеДобавлено: Вс Апр 01, 2007 04:43    Заголовок сообщения: Ответить с цитатой

Продолжение небольшого оффтопа:
Dagdamor писал(а):
Интересно, а можно ли как-нибудь в PHP (под локальной сборкой) узнать состояние клавиатуры? Wink Scroll Lock включен - сайт работает в режиме отладки, выключен - все как обычно, а на продуктиве данная функция себя вообще никак не проявляет Very Happy Удобно ведь Wink

Чисто теоретически можно написать модуль для PHP, который получает состояние клавиатуры сервера. Но зачем? Проще в конфиге задавать уровень отладки (именно так я и делаю). А scroll lock у меня индикатор раскладки клавиатуры: не надо его трогать :)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Горбунов Олег
Гость





СообщениеДобавлено: Вс Апр 01, 2007 10:21    Заголовок сообщения: Ответить с цитатой

Тож оффтоп
AlexGousev писал(а):
Чисто теоретически можно написать модуль для PHP, который получает состояние клавиатуры сервера

Видел класс на PHP через COM обьект выдвигал лоток привода на серваке. ^_^ LOL =)
AlexGousev писал(а):
А scroll lock у меня индикатор раскладки клавиатуры: не надо его трогать

Я предпочел Caps - все равно не пользуюсь, и под рукой ближе.
Вернуться к началу
dark-demon



Зарегистрирован: 16.02.2007
Сообщения: 1924
Откуда: леноград

СообщениеДобавлено: Вт Июл 24, 2007 19:13    Заголовок сообщения: Ответить с цитатой

наткнулся тут на интересное решение: http://www.firephp.org/Demo/
если в кратце, то оно использует http-заголовки для передачи данных, а специальное расширение для расширения для браузера написанного на движке мозилла смотрит эти заголовки и выводит в специальной панельке.
_________________
 
\\(x\(x_\(x_x\(0_0)/x_x)/_x)/x)//
смерть человекам!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов PHP.RU -> Решения, алгоритмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Последние пять забаневших себя:

[03.09.2010 17:11] Anonymous пустил себе кровь. Успел замарать форум 16777086 раз
[03.09.2010 16:50] Anonymous решил больше не терроризировать местную деревушку. Успел замарать форум 16777086 раз
[03.09.2010 15:01] Gromo обиделся и забанил себя на смерть. Успел замарать форум 102 раза
[03.09.2010 10:53] Anonymous бьется головой ап стену в надежде что его забанят. Успел замарать форум 16777086 раз
[03.09.2010 00:12] Anonymous ушел в кругосветку. Успел замарать форум 16777086 раз

Со 2 апреля сервис "Забанить себя" будет платным. Успейте забанить себя сегодня!

Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

  Engine MnoGoSearch 2007-2010 © PHP.RU Powered by ODware 440Hz