Сайт Ильи Азарова
PHP. var_dump структуры с кучей указателей и рекурсия. Для чего действительно полезен xdebug
Данная ситуация довольно редкая, однако все же встречается. Есть некая переменная, для которой надо посмотреть ее структуру.
Мы начинаем делать
var_dump($fields);
и садимся в лужу, видя сообщение в логе сервера:
[Thu Feb 23 16:21:07 2012] [error] [client 127.0.0.1] PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 78045652 bytes) in /web/site1/includes/theme.inc on line 1080, referer: http://localhost/site1/
Что же произошло. В $fields где-то в глубине обнаружился указатель на объект который уже есть в fields и описан выше. И var_dump начинает рекурсивно "бегать" по структуре объекта, пока не сожрет всю память.
Получается, мы не можем посмотреть "что там внутри", без описания оберток. В drupal есть модуль devel, который использует библиотеку krumo, но в тех версиях, которые я видел - тоже нет лимитов глубины прохода.
Проблема решается установкой xdebug и использованием функции xdebug_var_dump(). У этого модуля можно задать глубину показа "внутренностей" в переменной xdebug.var_display_max_depth и указать количество объектов на конкретном уровне, которые можно показывать переменной xdebug.var_display_max_children.
Таким образом, можно не городить свои обертки для дампов.
PS. Пишу это в качестве напоминания для себя.
PPS. Удивительно, до сих пор в PHP не предусмотрели штатно уровни вложенности в функции var_dump.


