Mam zainstalowany Magento 1.7 i do tej pory działał dobrze.
Codziennie importuję produkty. Jeśli jest jakiś nowy producent, dodaję go w rozwijanym atrybucie producenta.
Dzisiaj dodałem nową opcję producenta w zapleczu atrybutu i udałem się do importowania produktów, które z powodzeniem importowałem.
Ale potem próbuję otworzyć dowolną stronę w witrynie administratora Magento, kończy się to poniższym komunikatem o błędzie
Błąd krytyczny: nie można zastąpić ostatecznej metody Mage_Core_Model_Abstract :: clearInstance () w /var/www/html/app/code/core/Mage/Catalog/Model/Category.php w linii 36
Linia 36
właśnie zaczęła się kręcić {
dla tej klasy
class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract
{ <-- this is line 36
I sprawdziłem, Mage_Catalog_Model_Category
ale nie ma metody zdefiniowanej z nazwą clearInstance
. To jest naprawdę denerwujące.
FYI: Nie dotknąłem ani jednego znaku kodu, używam strony ADMIN do importowania produktów i dodawania niektórych wymaganych atrybutów
źródło
Odpowiedzi:
Takie zachowanie zwykle by się nie zdarzyło, chyba że zmodyfikujesz kod Magento w jakikolwiek sposób - czy to za pomocą rozszerzeń innych firm, podstawowych edycji kodu lub ogólnych dostosowań.
Fakt, że występuje on w adminie, przed załadowaniem jakichkolwiek modeli danych (siatka produktu itp.) Sugerowałby, że przyczyną jest rozszerzenie - nie importowane dane.
Miało to miejsce w siatce produktów - wówczas mógł to być model produktu, który zawinił w wyniku nieudanego importu.
Ale po szybkim wyszukiwaniu istnieje wiele zindeksowanych wyników wyszukiwania Google sklepów Magento z tym samym błędem. Więc może być w centrum (choć nigdy się nie spotkaliśmy) - ale wątpię.
Patrząc na rdzeń w 1.7
Nie powinieneś mieć żadnego zastąpienia tej
clearInstance()
metody. W rzeczywistości metoda ta jest zadeklarowana tylko raz, wapp/code/core/Mage/Core/Model/Abstract.php
Widziałem błędy tego rodzaju występujące, gdy ludzie omyłkowo zastosowali się
include
do przesłoniętej klasy (co powoduje, że jest ona ładowana dwukrotnie).Najlepszym rozwiązaniem jest zastosowanie standardowej procedury debugowania
./app/code/local
katalogu./app/code/community
kataloguI sprawdź, czy problem nadal występuje.
źródło
problem dotyczy APC, wyłącz APC, a problem zniknie.
źródło
przestrzeganie standardów php dla tego konkretnego błędu:
Oznacza to oczywiście, że masz rozszerzoną klasę
Mage_Core_Model_Abstract
używającclass Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract
i w tej klasie
clearInstance()
zdefiniowałeś jako funkcję.Ponieważ
clearInstance()
funkcja jest funkcją końcową, więc nie można modyfikować tej funkcji w żadnej z rozszerzonych klas.czym dokładnie jest twoja linia 36 poprzez dodanie jakiegoś kodu zastępczego powyżej i poniżej linii, którą zakładasz, to linia 36.
Widziałem programistów modyfikujących lub przeglądających pliki w określonym folderze, gdzie tak jak w przypadku kompilatora ustawionego na prawdziwą klasę plików php znajduje się w innym folderze.
źródło
clearInstance
wlocal
icommunity
basen. Jednak tymczasowo usunąłem ostatnie słowo kluczowe z deklaracji funkcji, aby rozwiązać problem, ale denerwuje mnie to, że kiedy dodałemfinal
słowo kluczowe z powrotem przed funkcją, wszystko nadal działa poprawnie.Miałem ten sam problem z najnowszą wersją PHP 5.4 w innej wersji Magento (w obszarze frontend) i nie mogłem rozwiązać tego za pomocą kodu ani żadnych pamięci podręcznych. Czy sprawdziłeś wersję?
W takim przypadku warto spróbować przywrócić poprzednią wersję.
źródło
Właśnie tego doświadczyłem i znalazłem niepotwierdzone zgłoszenie błędu o bardzo podobnej konfiguracji.
To wydaje się być błędem w połączeniu z
Dwa najlepsze rozwiązania problemu w chwili, gdy się wydaje, to:
A) Zmień PHP na niższą działającą wersję, prawdopodobnie 5.4.11 lub niższą.
B) Wyłącz APC, jeśli nie jest to możliwe, patrz A. :)
źródło
Rozwiązałem ten problem dla Magento 1.9, zmieniając sposób działania PHP (w panelu kontrolnym hostingu przesunąłem Uruchom PHP jako ... na Szybką aplikację CGI). Nie mam pojęcia, jakie inne konsekwencje ma ta zmiana. W tej chwili próbuję to rozgryźć.
źródło
Spodziewałem się tego samego problemu. Nigdzie poza pulą rdzeniową nie było deklaracji metody clearInstance .
Analizowałem mój nginx access.log i error.log i zauważyłem, że błędy te pojawiają się, gdy boty Google i Bing odwiedzają moją witrynę tysiąc razy w ciągu kilku minut w różnych adresach URL, wysyłając wiele zapytań i zapytań z Magento. To wszystko zdejmuje moją stronę.
Wydaje mi się, że to naprawiłem, zmniejszając moc robota Google i bing na panelach ich webmastera.
Możesz użyć GoAccess lub Request Log Analyzer do analizy pliku dziennika i zobaczenia najczęściej odwiedzanego klienta użytkownika.
źródło