Сначала написал сюда http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid ... g=14377462, но в силу отсутствия ответа - прошу помощи тут. В чём может быть проблема (уже не знаю куда копать)
Re: canary mismatch .. efree() .. heap overflow Как бороться Объясните подробнее что вы хотели сказать, а то не понятно... (если только не потроллить)
Re: canary mismatch .. efree() .. heap overflow Как бороться вам вроде там уже написали -зачем вызывать статические методы если создаете сам объект? -зачем для такой простой задачи юзать формирование имени вызываемого метода через имя дочернего класса. позднее статическое связывание и все такое... делаете все через Ж... неудивительно что код падает
Re: canary mismatch .. efree() .. heap overflow Как бороться Там же уже ответил: 1. Статический метод используется далеко не всегда при уже созданном объекте. Он потому и сделан статическим, что гораздо чаще(!) он используется БЕЗ объекта ваще. См. в примере прямой вызов статического метода другого класса для формирования подзапроса. Объекта к нему нет и не предполагается, потому как НЕЗАЧЕМ. 2. Косвенный вызов через calc_user_func() в объектном методе базового класса статического метода дочернего класса - необходимость, не зависящая от "простоты" такого примера. Почему статический - уже пояснил, почему этот метод объектный - должно быть понятно: объект подключается к БД и содержит параметры подключения (или его адаптер)... Пример, он на то и пример, чтобы выделить главное. В оригинале, этот метод - около 200строк кода. плотных. и делает "много чего" в том числе и контроль прав доступа и логирование и профилирование/отладку конечного запроса если надо. ... пишите через ж... то есть, надо писать так как вы? Тогда покажите "как" решаете такие задачи: 1. Предоставить разрабам ПХП средство, которое НЕ требует знаний SQL. Совсем НЕ требует. Никаких. За исключением разраба, который добавляет новые сущности в систему и пишет этот самый статический метод (только один новый метод!). 2. Иметь модульный и расширяемый код приложения, активно работающего с развитой структурой БД (около 2000таблиц, 10-30Гб данных). 3. Перенести на него с Zend Frasmework имеющиеся уже более 1000 работающих классов. Подозреваю, что НЕ решаете, потому что: 1. А нафига? Без этого даже лучше, больше денюг дают... (знать надо больше) 2. А нафига? А вдруг внезапно попросят и без меня развивать станут... а так, фиг будут заново ваять... 3. А нафига? А как же "сопровождение" и бабло за него хочется... ... поэтому это - внутренний фреймворк. P.S. К сожалению - всё это оффтоп и решению проблемы НЕ помогает. Поэтому, сильно прошу не вдаваться в обсуждение (можно в личку), а тут - помочь с проблемой а не флудить на тему "зачем попу баян".
Re: canary mismatch .. efree() .. heap overflow Как бороться так может там и валится гдето. если он вызывается без объекта, - тогда ЧТО он делает внутри объекта? выделите его вообще в отдельную функцию. и вызывайте везде где хотите. на кой передавать в параметре пустой объект всегда? не проще ли его в самом методе и рожать тогда.
Re: canary mismatch .. efree() .. heap overflow Как бороться перепощу сюда http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid ... g=14386970 пример с полным описанием как и что вызывается в конкретно этой ошибке. Сейчас меня интересует объяснение ситуации с дополнением: Дополню ещё по ситуации: 0. Рекурсий там нет. Есть примерно та вложенность, которая описана в примере... Есть и больше, но там "всё работает". 1. Скрипт запускается, отдает ответы, всё нормально... какое-то время. 2. Потом (непонятно когда) происходит выдача апачем ошибки "canary mismatch .. efree() heap overflow .." в которой указавается в том числе и строка действия контроллера, которая вызывает именно такую функцию. 3. Есть ещё более 50 классов, куча действий, работающих на этой же модели доступа к БД и гораздо сложнее: запросы по 70 строк по 80 символов - генерятся полностью через этот подход... однако работают нормально и устойчиво... и крайне шустро. 4. После того как выпала 502 ошибка, далее такие страницы (их много) все отдаются только с 502. 5. Достаточно перезаписать файл с этой функцией (ModeModel.php в примере, например добавить/убрать пробел в комментах)... апач начинает отдавать страницы верно... и даже БЕЗ перезагрузок (кеш?!? где?!?)... но опять произвольное время... ... цикл повторяется.
Re: canary mismatch .. efree() .. heap overflow Как бороться а че б не потролить? хотя я имел в виду, что не надо делать долгоиграющие процессы на похапе.
Re: canary mismatch .. efree() .. heap overflow Как бороться тогда не удивляйтесь когда сами вместо помощи получаете в ответ троллизм и флуд. по теме: попробовал ещё раз модифицировать код... 2 часа полет нормальный... ждём-с.