За последние 24 часа нас посетил 18641 программист и 1702 робота. Сейчас ищут 877 программистов ...

canary mismatch .. efree() .. heap overflow Как бороться?

Тема в разделе "Прочие вопросы по PHP", создана пользователем Arhat109, 3 июн 2013.

  1. Arhat109

    Arhat109 Новичок

    С нами с:
    3 июн 2013
    Сообщения:
    5
    Симпатии:
    0
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: canary mismatch .. efree() .. heap overflow Как бороться

    а не всё ли равно течет память или нет? ;)
     
  3. Arhat109

    Arhat109 Новичок

    С нами с:
    3 июн 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: canary mismatch .. efree() .. heap overflow Как бороться

    Объясните подробнее что вы хотели сказать, а то не понятно... (если только не потроллить)
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: canary mismatch .. efree() .. heap overflow Как бороться

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

    делаете все через Ж... неудивительно что код падает
     
  5. Arhat109

    Arhat109 Новичок

    С нами с:
    3 июн 2013
    Сообщения:
    5
    Симпатии:
    0
    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. К сожалению - всё это оффтоп и решению проблемы НЕ помогает. Поэтому, сильно прошу не вдаваться в обсуждение (можно в личку), а тут - помочь с проблемой а не флудить на тему "зачем попу баян".
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Re: canary mismatch .. efree() .. heap overflow Как бороться

    так может там и валится гдето.

    если он вызывается без объекта, - тогда ЧТО он делает внутри объекта?
    выделите его вообще в отдельную функцию. и вызывайте везде где хотите.

    на кой передавать в параметре пустой объект всегда? не проще ли его в самом методе и рожать тогда.
     
  7. Arhat109

    Arhat109 Новичок

    С нами с:
    3 июн 2013
    Сообщения:
    5
    Симпатии:
    0
    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 в примере, например добавить/убрать пробел в комментах)... апач начинает отдавать страницы верно... и даже БЕЗ перезагрузок (кеш?!? где?!?)... но опять произвольное время...

    ... цикл повторяется.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: canary mismatch .. efree() .. heap overflow Как бороться

    а че б не потролить? хотя я имел в виду, что не надо делать долгоиграющие процессы на похапе.
     
  9. Arhat109

    Arhat109 Новичок

    С нами с:
    3 июн 2013
    Сообщения:
    5
    Симпатии:
    0
    Re: canary mismatch .. efree() .. heap overflow Как бороться

    тогда не удивляйтесь когда сами вместо помощи получаете в ответ троллизм и флуд. :(

    по теме: попробовал ещё раз модифицировать код... 2 часа полет нормальный... ждём-с.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Re: canary mismatch .. efree() .. heap overflow Как бороться

    а, ну вперед