1. Тали Сергей - 06 Июня, 2015 - 18:12:54 - перейти к сообщению
Добрый день. Я пишу первый сайт с подгрузкой информации из бд. Использую phpMyadmin. Сначала объясню как устроен сайт. Впринцепи довольно банально: есть шаблоны основных страниц, дублирующиеся части вынесены в другой файл, в этом файле подставляються переменные содержащие нужную инфу полученую из файла получения переменных методом перебора двумерного массива. Вызов файла получения данных производиться require-ом из основного файла шаблона. Т.е дублирующая часть вызываеться из цикла в файле получения переменных, к нему подключен скрипт функций. Функции на 1 класс записей(1 шаблон) 2: первая получает объект из бд вторая разбирает его на двумерный массив и возвращает в первую функцию. Именно она вызываеться в файле получения данных. И все прекрасно работало. Но эти функции копировались для каждого отдельного мини шаблона (и их мягкомговоря стало много, около 80 пар)(шаблоны сильно отличаются). И так вышло что закончив с первой станницей и перейдя к следующему основному шаблону выпала ошибка: maximum function nesting level of '100' reached, aborting как раз в строке вызова функции соединения с бд скрипта с фунциями. Вот теперь гадаю над запутанной историей. Если ктото понял что нибудь и есть предложение, не стисняйтесь. Если надо кину скрипты
2. exlant - 06 Июня, 2015 - 20:31:53 - перейти к сообщению
Максимальный уровень вложенности функции в '100' достигнута, прерывание...
3. Тали Сергей - 06 Июня, 2015 - 20:38:09 - перейти к сообщению
exlant пишет:
Максимальный уровень вложенности функции в '100' достигнута, прерывание...
Да, я погуглил нашел. Но толком не нашел информации описывающей что такое вложеность и как обойти эту ошибку, или стоит ли вообще ее обходить. Может нужно переделывать схему выборки. Когда выкладывать этот сайт на хост там такаяже проблема может возникнуть.
4. exlant - 06 Июня, 2015 - 20:40:08 - перейти к сообщению
на сколько я понял, у вас получается функция в функции, которая в функции, которая в функции, и так более 100 раз, вот и ошибка, не понимаю зачем делать такую вложенность...
5. Тали Сергей - 06 Июня, 2015 - 20:48:17 - перейти к сообщению
Нет немного не так. Или я может не понимаю в каком месте она вызываеться таким образом. Но у меня в скрипте получилось 85 пар фунций по сути выполняющих одно и тоже действие для разных выборок из бд. Пара: функция выборки из бд, 2 функция - разбивает полученый объект в массив и отдает обратно в первую, а первая возвращает полученный результат. Я удалил последние 5 пар и ошибка пропала.
6. exlant - 06 Июня, 2015 - 20:55:11 - перейти к сообщению
Цитата:
Или я может не понимаю в каком месте она вызываеться таким образом.
скорей всего... а пишет, что у вас ошибка максимальной вложенности функций, может все-таки у вас где то рекурсия закралась?
7. Тали Сергей - 06 Июня, 2015 - 21:03:58 - перейти к сообщению
[quote=exlant]
Может быть. Я начинаю подозревать, у меня функция возвращающая двумерный массив вызываеться в отдельном файле для разложения на переменные и в конце этого цикла includ-ом вызываеться шаблон для подстановки переменных а к нему в свою очередь подключена библиотека с этим скриптом(85 пар). Может пока в базе не много записей и вложенность от каждого вызова не большая а все вместе дает о себе знать. Скажите если я бред отморозил. Продолжаю поиски.
Цитата:
может все-таки у вас где то рекурсия закралась?
Может быть. Я начинаю подозревать, у меня функция возвращающая двумерный массив вызываеться в отдельном файле для разложения на переменные и в конце этого цикла includ-ом вызываеться шаблон для подстановки переменных а к нему в свою очередь подключена библиотека с этим скриптом(85 пар). Может пока в базе не много записей и вложенность от каждого вызова не большая а все вместе дает о себе знать. Скажите если я бред отморозил. Продолжаю поиски.
8. exlant - 06 Июня, 2015 - 21:07:27 - перейти к сообщению
база тут не причем, 100 записей для базы это ничто! А вот в своем скрипте, вы явно что то перемудрили!
(Добавление)
а что бы понять, что именно, я не экстрасенс, нужно смотреть код!
(Добавление)
а что бы понять, что именно, я не экстрасенс, нужно смотреть код!
9. Тали Сергей - 06 Июня, 2015 - 21:18:41 - перейти к сообщению
код большой. Могу вам на почту кинуть? Или тут как то в личку?
10. LIME - 06 Июня, 2015 - 21:24:37 - перейти к сообщению
Матрешка![Улыбка Улыбка](./im/emoticons/smile24.gif)
Да это такая у тебя рекурсия хитрая
Вызывай что там у тебя есть последовательно а не матрешкой
![Улыбка Улыбка](./im/emoticons/smile24.gif)
Да это такая у тебя рекурсия хитрая
Вызывай что там у тебя есть последовательно а не матрешкой
11. Тали Сергей - 06 Июня, 2015 - 21:29:39 - перейти к сообщению
LIME пишет:
Матрешка![Улыбка Улыбка](./im/emoticons/smile24.gif)
Да это такая у тебя рекурсия хитрая
Вызывай что там у тебя есть последовательно а не матрешкой
![Улыбка Улыбка](./im/emoticons/smile24.gif)
Да это такая у тебя рекурсия хитрая
Вызывай что там у тебя есть последовательно а не матрешкой
Так то оно так, только почему при первом же вызове она не достигает
100? И могут ли рекурсии складываться и давать 100?
(Добавление)
Если не сложно расскажите немного о рекурсии что знаете и о этой ошибке. Буду благодарен. Очень поможет в поисках.
12. LIME - 06 Июня, 2015 - 21:35:05 - перейти к сообщению
Узнай что такое рекурсия для начала
100 это максимальная глубина стека вызовов по умолчанию в php
Не обязательно рекурсия
Может быть 100 разных фций вызывающих одна другую
У ОС тоже есть свое ограничение стека вызовов но оно поболее
Не вызывай внутри фции
Вызови следующую после отработки предыдущей
(Добавление)
Рекурсию нагугли
Не буду я тут учебники копипастить
100 это максимальная глубина стека вызовов по умолчанию в php
Не обязательно рекурсия
Может быть 100 разных фций вызывающих одна другую
У ОС тоже есть свое ограничение стека вызовов но оно поболее
Не вызывай внутри фции
Вызови следующую после отработки предыдущей
(Добавление)
Рекурсию нагугли
Не буду я тут учебники копипастить
13. exlant - 06 Июня, 2015 - 21:36:21 - перейти к сообщению
Тали Сергей рекурсия, это когда функция вызывает сама себя!
14. LIME - 06 Июня, 2015 - 21:37:58 - перейти к сообщению
15. Тали Сергей - 06 Июня, 2015 - 21:42:07 - перейти к сообщению
exlant пишет:
Спасибо, я это понимаю. Нотв моем коде такой прямой зависимости нет.Тали Сергей рекурсия, это когда функция вызывает сама себя!
(Добавление)
Есть ли какойто способ посмотреть сколько раз и как вызываються функции интерпритатором и откуда береться эта 100 вложений?