Schwerwiegender Fehler in Admin-Seiten

15

Ich habe Magento 1.7 installiert und es hat bis jetzt gut funktioniert.

Ich importiere täglich Produkte. Wenn es einen neuen Hersteller gibt, füge ich ihn im Dropdown-basierten Herstellerattribut hinzu.

Heute habe ich eine neue Herstelleroption im Attribut-Backend hinzugefügt und bin gegangen, um Produkte zu importieren, die erfolgreich importiert wurden.

Aber nachdem ich versucht habe, eine Seite in der Magento Admin-Site zu öffnen, wird die folgende Fehlermeldung angezeigt

Schwerwiegender Fehler: Die letzte Methode Mage_Core_Model_Abstract :: clearInstance () in /var/www/html/app/code/core/Mage/Catalog/Model/Category.php in Zeile 36 kann nicht überschrieben werden

Die Linie 36hat {für diese Klasse gerade erst begonnen, sich zu kräuseln

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

Und ich habe überprüft, Mage_Catalog_Model_Categoryaber es gibt keine Methode mit Namen definiert clearInstance. Es ist wirklich nervig.

Zu Ihrer Information: Ich habe kein einziges Zeichen des Codes berührt. Ich verwende lediglich die ADMIN-Site, um Produkte zu importieren und einige erforderliche Attribute hinzuzufügen

Sonnenlicht
quelle
Warum -1? Ich bin hier, um Menschen zu helfen. Ist dies nicht ein Ort, um Fragen zu Magento zu stellen.
Sonnenlicht
Über -1, manchmal reagieren die Leute komisch ... Über dein Problem steht es in deiner Fehlermeldung, lies es einfach. Msgstr "SCHLUSSMETHODE KANN NICHT AUSSERBRECHEN ...". Sie versuchen, etwas zu überschreiben, das nicht möglich ist (Sie oder jemand, der es schlecht codiert)
Sylvain Rayé
@ SylvainRayé: Ich hatte noch nicht einmal ein einziges Zeichen Code berührt. Hast du die Frage gelesen? Ich verwende nur die ADMIN-Site, um ein Produkt zu importieren. Es ist Magento, das einen Fehler
auslöst,
@ SylvainRayé: Der Fehler ist nicht so lite wie du denkst, vor allem wenn es um Core-Code geht und auch wenn man keinen Code berührt.
Sonnenlicht
Die Downvote-Feen sind in dieser Community ziemlich aggressiv, ignorieren sie. Kann ein Problem sein, bei dem eine Drittanbietererweiterung das Problem verursacht, indem die Klasse erweitert oder überschrieben wird. Versuchen Sie, alle Erweiterungen von Drittanbietern zu deaktivieren, um festzustellen, ob dies hilft
Sander Mangel

Antworten:

5

Dieses Verhalten tritt normalerweise nicht auf, wenn Sie den Code von Magento nicht in irgendeiner Weise geändert haben - sei es über Erweiterungen von Drittanbietern, Änderungen des Kerncodes oder allgemeine Anpassungen.

Die Tatsache, dass es im Administrator vor dem tatsächlichen Laden von Datenmodellen (Produktgitter usw.) auftritt, würde bedeuten, dass es durch eine Erweiterung verursacht wird - nicht durch importierte Daten.

Wenn es im Produkt-Grid vorkommt, kann es sich um das Produktmodell handeln, das aufgrund eines fehlgeschlagenen Imports fehlerhaft ist.

Aber nach einer schnellen Suche gibt es eine Menge indizierter Google-Suchergebnisse von Magento-Stores mit demselben Fehler. So könnte es im Kern sein (obwohl wir noch nie darauf gestoßen sind) - aber ich bin zweifelhaft.

Blick auf den Kern in 1.7

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

Sie sollten die clearInstance()Methode nicht überschreiben . Tatsächlich wird diese Methode nur einmal in deklariertapp/code/core/Mage/Core/Model/Abstract.php

final public function clearInstance()

Ich habe gesehen, dass Fehler dieser Art auftreten, wenn Leute versehentlich includeeine überschriebene Klasse verwendet haben (was dazu führte, dass sie zweimal geladen wurde).


Am besten folgen Sie dem Standard-Debug-Verfahren

  1. Stellen Sie einen sauberen Kern wieder her
  2. Stellen Sie ein sauberes adminhtml-Verzeichnis wieder her
  3. ./app/code/localVerzeichnis umbenennen
  4. ./app/code/communityVerzeichnis umbenennen

Und sehen Sie nach, ob das Problem weiterhin besteht.

Ben Lessani - Sonassi
quelle
3

Das Problem liegt hier bei APC. Deaktivieren Sie APC, und das Problem wird behoben.

Calvin Muller
quelle
Das Deaktivieren von APC ist keine Option. Aber gute Idee! Daran würde ich nie denken! @sunlight hast du mehr als ein magento installiert? und das gleiche Präfix definiert? Möglicherweise liegt ein Problem mit einem anderen Speicher im selben Cache vor.
Fabian Blechschmidt
3

nach PHP-Standards für diesen spezifischen Fehler gehen:

Schwerwiegender Fehler: Die letzte Methode Mage_Core_Model_Abstract :: clearInstance () in /var/www/html/app/code/core/Mage/Catalog/Model/Category.php in Zeile 36 kann nicht überschrieben werden

es bedeutet eindeutig , dass Sie erweiterte Klasse Mage_Core_Model_Abstractmit

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract

und innerhalb dieser Klasse haben Sie clearInstance()als eine Funktion definiert.

Da clearInstance()function eine letzte Funktion ist, dürfen Sie diese Funktion in keiner der erweiterten Klassen ändern.

Was genau ist Ihre Zeile 36, wenn Sie über und unter Zeile einen Dummy-Code einfügen, von dem Sie annehmen, dass es sich um Zeile 36 handelt?

Ich hatte Entwickler gesehen, die Dateien in einem bestimmten Ordner modifizierten oder untersuchten, während sich Dateien in einem anderen Ordner befanden, die wie beim Compiler auf echte PHP-Klassendateien eingestellt waren.

Oscprofessionals
quelle
Ich habe überprüft, ich habe keine Methode mit dem Namen clearInstancein localund communityPool. Ich habe jedoch das letzte Schlüsselwort aus der Funktionsdeklaration entfernt, um das Problem vorübergehend zu beheben. Es ist jedoch ärgerlich, dass finaldie Dinge immer noch ordnungsgemäß funktionieren, wenn ich das Schlüsselwort wieder vor der Funktion eingefügt habe .
Sonnenlicht
Wahrscheinlich wird Ihre Klasse zweimal eingeschlossen, wie von sonassi angegeben: Ich habe gesehen, dass Fehler dieser Art auftreten, wenn Leute fälschlicherweise include für eine überschriebene Klasse verwendet haben (was dazu führt, dass sie zweimal geladen wird).
Oscprofessionals
2

Ich hatte das gleiche Problem mit der neuesten PHP 5.4-Version auf einer anderen Magento-Version (im Frontend-Bereich) und konnte dies nicht durch Code oder irgendwelche Caches lösen. Hast du die Version überprüft?

In diesem Fall ist ein Rollback auf die frühere Version einen Versuch wert.

Nico Siebler
quelle
2

Ich habe dies gerade erlebt und einen unbestätigten Fehler gefunden, der eine sehr ähnliche Konfiguration angibt.

Dies scheint ein Fehler in der Kombination von zu sein

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

Apache error_log zeigt AH00052: Ausgangssignal für untergeordnete PID XX Segmentierungsfehler (11)

Die zwei derzeit besten Lösungen für das Problem sind:

A) Aktualisieren Sie PHP auf eine niedrigere Arbeitsversion, möglicherweise 5.4.11 oder niedriger.

B) APC deaktivieren, falls nicht möglich, siehe A. :)

B00MER
quelle
Ich habe das gleiche Problem mit PHP 5.3.27 mit MariaDB, Magento 1.7.0.2, ohne APC. Ich benutze auch Lack + Nginx. Es ist ein zeitweiliges Problem, das manchmal einen Neustart von PHP-FPM, Firnis, Nginx usw. erzwingt. Übrigens habe ich keine nicht zum Kern gehörende clearInstance-Methode gefunden, die irgendwo deklariert wurde. Vielleicht gibt es auch zweimal Unterricht. Aber es ist seltsam, denn wenn es ein Parserfehler wäre, würde es jedes Mal passieren.
Ricardo Martins
1

Ich habe dieses Problem für Magento 1.9 behoben, indem ich die Art und Weise geändert habe, wie PHP ausgeführt wird. Ich habe absolut keine Ahnung, welche weiteren Konsequenzen diese Änderung hat. Ich versuche das im Moment herauszufinden.

matthijshofstede
quelle
0

Ich hatte dasselbe Problem erwartet. Es gab keine Deklaration der clearInstance- Methode außerhalb des Core-Pools.

Ich habe meine Dateien "nginx access.log" und "error.log" analysiert und festgestellt, dass diese Fehler auftreten, wenn Google- und Bing-Bots meine Website in wenigen Minuten tausendmal in verschiedenen URLs besuchen und dabei viele Anfragen und Abfragen von Magento stellen. Diese Dinge bringen meine Seite zum Erliegen.

Ich schätze, ich habe das behoben, indem ich die Crawler-Leistung von Google verringert und an den Panels ihres Webmasters gebastelt habe.

Sie können GoAccess oder Request Log Analyzer verwenden , um Ihre Protokolldatei zu analysieren und den Benutzeragenten mit den häufigsten Besuchern anzuzeigen .

Ricardo Martins
quelle