Неустранимая ошибка на страницах администратора

15

У меня установлен magento 1.7, и до сих пор он работал нормально.

Я импортирую продукты ежедневно. Если есть какой-либо новый производитель, я добавляю его в раскрывающемся списке атрибутов производителя.

Сегодня я добавил новую опцию «Производитель» в атрибуте back-end и пошел импортировать товары, успешно импортировавшие товары.

Но после этого я пытаюсь открыть любую страницу в админ-сайте Magento, она заканчивается сообщением об ошибке ниже

Неустранимая ошибка: невозможно переопределить конечный метод Mage_Core_Model_Abstract :: clearInstance () в /var/www/html/app/code/core/Mage/Catalog/Model/Category.php в строке 36

Линия 36только начинается вьющейся {для этого класса

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract
{ <-- this is line 36

И я проверил, Mage_Catalog_Model_Categoryно нет никакого метода, определенного с именем clearInstance. Это действительно раздражает.

К вашему сведению: я не коснулся ни одного символа кода, я просто использую сайт ADMIN для импорта товаров и добавления некоторых обязательных атрибутов

Солнечный лучик
источник
Почему -1? Я здесь, чтобы получить помощь людям. Разве это не место, чтобы задавать вопросы о Magento.
солнечный свет
О -1, иногда люди реагируют странно ... О вашей проблеме написано в вашем сообщении об ошибке, просто прочитайте ее. «НЕ МОЖЕТ ПЕРЕЗАПИШИТЬ ФИНАЛЬНЫЙ МЕТОД ...». Вы пытаетесь переопределить что-то, что не может (вы или кто-то, кто это плохо кодирует)
Сильвен Райе
@ SylvainRayé: я даже не коснулся ни одного символа кода. Вы читали вопрос? Я просто использую сайт ADMIN для импорта продукта. Это Magento, который выдает ошибку, и снова это Magento, который плохо его кодирует
солнечный свет
@ SylvainRayé: ошибка не такая легкая, как вы думаете, особенно когда она исходит из основного кода и даже без прикосновения к коду.
солнечный свет
Феи противников довольно агрессивны в этом сообществе, игнорируйте их. Может быть проблема, когда стороннее расширение вызывает проблему, расширяя или перезаписывая класс. Попробуйте отключить все сторонние расширения, чтобы посмотреть, поможет ли это
Сандер Мангель

Ответы:

5

Такое поведение обычно не происходит, если вы не изменили код Magento каким-либо образом - будь то с помощью сторонних расширений, редактирования кода ядра или общих настроек.

Тот факт, что это происходит в администраторе, до того, как какая-либо модель данных будет фактически загружена (сетка продукта и т. Д.), Будет означать, что это вызвано расширением, а не импортированными данными.

Если это происходило в сетке продукта, то это могло быть ошибочной моделью продукта в результате неудачного импорта.

Но после быстрого поиска, есть много проиндексированных результатов поиска Google в магазинах Magento с той же ошибкой. Так что это может быть в основе (хотя мы никогда не сталкивались с этим) - но я сомневаюсь.

Глядя на ядро ​​в 1.7

+34 abstract class Mage_Catalog_Model_Abstract extends Mage_Core_Model_Abstract
+35 {
+36     /**
+37      * Identifuer of default store

Вы не должны иметь никакого переопределения clearInstance()метода. На самом деле, этот метод объявлен только один раз, вapp/code/core/Mage/Core/Model/Abstract.php

final public function clearInstance()

Я видел ошибки такого рода, возникающие, когда люди ошибочно использовали includeпереопределенный класс (в результате его дважды загружали).


Ваши лучшие варианты - следовать стандартной процедуре отладки.

  1. Восстановить чистое ядро
  2. Восстановить чистый adminhtml dir
  3. Переименовать ./app/code/localкаталог
  4. Переименовать ./app/code/communityкаталог

И посмотри, не исчезнет ли проблема.

Бен Лессани - Сонасси
источник
3

проблема здесь с APC, отключите APC, и проблема исчезнет.

Кэлвин Мюллер
источник
отключение APC не вариант. Но хорошая идея! Я бы никогда не подумал об этом! @sunlight у вас установлено более одного magento? и определил тот же префикс? Это может быть проблема с другим магазином внутри того же кэша.
Фабиан Блехшмидт
3

идя по стандартам php для этой конкретной ошибки:

Неустранимая ошибка: невозможно переопределить конечный метод Mage_Core_Model_Abstract :: clearInstance () в /var/www/html/app/code/core/Mage/Catalog/Model/Category.php в строке 36

это ясно означает, что вы расширили класс, Mage_Core_Model_Abstractиспользуя

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract

и в этом классе вы clearInstance()определили как функцию.

Поскольку clearInstance()функция является конечной функцией, вам не разрешено изменять эту функцию в любом расширенном классе.

что такое ваша строка 36, добавив некоторый фиктивный код выше и ниже строки, которую вы считаете строкой 36.

Я видел, как разработчики модифицировали или просматривали файлы в определенной папке, где, как и в случае с компилятором, установленным в true, файлы класса php находятся в какой-то другой папке.

Oscprofessionals
источник
Я проверил, у меня нет никакого метода, названного clearInstanceв localи communityпуле. Тем не менее, я удалил ключевое слово final из объявления функции, чтобы временно решить проблему, но меня раздражает, что когда я добавил finalключевое слово в начало функции, все по-прежнему работает должным образом.
солнечный свет
Вероятно, ваш класс включается дважды, как заявлено sonassi: я видел ошибки такого рода, возникающие, когда люди по ошибке использовали include для переопределенного класса (в результате он загружался дважды).
Oscprofessionals
2

У меня была та же проблема с последней версией PHP 5.4 в другой версии Magento (в области внешнего интерфейса), и я не мог решить эту проблему с помощью кода или каких-либо кешей. Вы проверили версию?

В этом случае стоит попробовать выполнить откат к более ранней версии.

Нико Зиблер
источник
2

Просто испытал это и обнаружил неподтвержденную ошибку, сообщающую об очень похожих настройках.

Это похоже на ошибку с комбинацией

  • PHP 5.4.12+
  • Magento 1.7.x (1.13.x EE)
  • APC (3.1.x)

Apache error_log показывает AH00052: выходной сигнал дочернего pid XX Ошибка сегментации (11)

Два лучших решения проблемы на данный момент это:

A) Понизьте PHP до более низкой рабочей версии, возможно, 5.4.11 или ниже.

B) Отключить APC, если это невозможно, см. A. :)

B00MER
источник
У меня такая же проблема с PHP 5.3.27 с MariaDB, Magento 1.7.0.2, без APC. Я также использую Varnish + nginx. Это временная проблема, которая иногда приводит к перезапуску php-fpm, лака, nginx и т. Д. Кстати, я не нашел ни одного неосновного метода clearInstance, объявленного где-либо. Может быть, есть что-то, включая классы дважды. Но это странно, потому что если бы это была ошибка парсера, это происходило бы каждый раз.
Рикардо Мартинс
1

Я решил эту проблему для Magento 1.9, переключив способ работы PHP (в панели управления хостингом я переключил Запуск PHP как ... на Быстрое CGI-приложение). Я не имею ни малейшего представления, каковы другие последствия этого изменения. Пытаюсь выяснить это в данный момент.

matthijshofstede
источник
0

Я ожидал ту же проблему. Не было никакого объявления метода clearInstance где-либо вне основного пула.

Я проанализировал свои nginx access.log и error.log и заметил, что эти ошибки появляются, когда боты Google и Bing посещают мой сайт тысячу раз за несколько минут с разными URL, делая много запросов и запросов от magento. Это разрушает мой сайт.

Я думаю, что я исправил это, уменьшив мощность гусеничного робота от Google и добавив bing на панели своих веб-мастеров.

Вы можете использовать GoAccess или Request Log Analyzer, чтобы проанализировать ваш файл журнала и увидеть пользовательский агент самых популярных посетителей.

Рикардо Мартинс
источник