2012-04-21 2 views
1

Я использую Magento 1.5.0.1 и получаю случайный вызов на функцию getId() для не-объекта ' ошибка при оформлении заказа.Magento 1.5.0.1 Occasional 'Вызов функции-члена getId() для не-объекта'

Клиент будет несколько раз проверять с теми же деталями, и ошибка «Вызов функции-члена getId() на не-объект» будет продолжаться, но затем, через несколько секунд или несколько минут , ошибка остановится, и проверка будет проходить.

Это не происходит в течение 100% времени.

Я проверил: 1) Журналы ошибок Apache чисты, у Apache много ресурсов системы. Оптимизирован для Magento в соответствии с официальным руководством. 2) Журналы ошибок MySQL чисты, у mysql есть много системных ресурсов. Оптимизирован для Magento в соответствии с официальным руководством. 3) Журналы ошибок PHP будут отображаться только «Вызов функции-члена getId() для не-объекта», нет никаких указаний на то, что PHP закончил работу с ram, то есть ошибка выделенной памяти, типичная для ОЗУ. 4) Были выполнены все другие оптимизации Magento: кеширование, компиляция, APC, предел PHP 256 МБ. 5) APC имеет множество системных ресурсов. 6) CPU никогда не превышал 25-50% использования, только 40-50% оперативной памяти, более 50% бесплатно!

Может также получить 'Вызов функции-члена getStoreId() для сообщения об ошибке, отличном от объекта.

Я отрываю свои волосы от попыток, что еще я могу сделать! Из 50 заказов он будет задерживаться примерно на 2-3 порядка, т. Е. Клиент пытается проверить около 5-10 раз в течение 5-10 минут.

Что можно заблокировать?

+2

Какое полное сообщение об ошибке? Он должен указывать, что в файле/строке произошла ошибка. – nachito

ответ

0

Когда я проанализировал подобные ошибки на моей установке Magento (1.4.2), мне удалось собрать все, что это была какая-то попытка взлома с сайта на основе whois & nslookup. Люди (боты?) Размещают заказы без правильной инициализации своего сеанса, таким образом, для Идентификатора не создается магазин (или любой другой) объект. Это должно быть помечено как ошибка, чтобы они могли правильно обрабатывать этот случай и повторно инициализировать сеанс или выполнить какое-то другое действие, чтобы лучше ожесточиться против людей, ковыряющих логику форм.

Кроме того, в коде есть какая-то ошибка, из-за которой клиент может разместить заказ на предмет, который равен $ 0. В каждом случае это был обычный клиент, который, когда его вызвали, был удивлен и дал нам детали CC для ручной обработки платежей. Очистка кеша и все первое, что помогает каждый день, помогает с этим.

+0

Интересно. Это не будет попыткой взлома, так как клиенты действительно обращаются к нам, когда это происходит, говоря нам, что они не могут проверить. Кроме того, интересно отметить: когда это происходит, когда я сам пытаюсь проверить, у меня такая же проблема. Таким образом, проблема не будет изолирована от одного сеанса пользователя. Он просто продолжает повторяться снова и снова, где у нас есть период от 10 до 20-30 минут, когда любые попытки проверки приводят к ошибке. Произошла массовая неудача несколько недель назад, когда ошибка не исчезла вообще! Мне пришлось зайти в базу данных и сбросить цифры инкремента. – cappuccino

+0

Это не будет случай добавления $ 0, потому что, как описано выше, когда проблема возникает, я на самом деле пытаюсь проверить себя, и я могу заверить, что элемент не равен $ 0. Кроме того, во время отключения, когда ошибка getId() не прекращается после нескольких часов, я сделал все: 1) очистил все кеши, 2) переиндекс 3) очистил APC, 4) восстановил базу данных ... все! Единственное, что остановилось, это когда я сбросил счетчик инкремента в базе данных magento.Но это не объясняет, почему бывают случаи, когда это произойдет и уйдет через несколько минут, и время, когда оно не исчезнет. – cappuccino

+0

BTW, ошибка возникает в файле onepagecontroller, у нас есть моды в нашем файле, поэтому номер строки не будет одинаковым (и никакие моды не будут вызывать это, и они являются расширениями для других вещей). Мы действительно выполнили тест, после сохранения заказа с помощью -> save(); в контроллере ошибка возникает, когда вызывается getId(), а также когда это было прокомментировано, оно затихло, когда вызывается getIncrementId(). ТАКЖЕ интересно, порядок не был создан. SO, возможно, проблема не в getId() или getIncrementId(), возможно, объект не может быть вызван, потому что ... – cappuccino

Смежные вопросы