Kesalahan fatal di Halaman Admin

15

Saya telah menginstal magento 1.7 dan bekerja dengan baik sampai sekarang.

Saya mengimpor produk setiap hari. Jika ada produsen baru, saya menambahkannya di atribut Produsen berbasis drop-down.

Hari ini, saya telah menambahkan opsi Produsen baru di atribut back-end dan pergi untuk mengimpor produk yang berhasil mengimpor produk.

Tetapi setelah itu saya mencoba membuka halaman apa saja di situs admin Magento, itu berakhir dengan pesan kesalahan di bawah ini

Kesalahan fatal: Tidak dapat mengganti metode akhir Mage_Core_Model_Abstract :: clearInstance () di /var/www/html/app/code/core/Mage/Catalog/Model/Category.php on line 36

Line 36baru saja mulai keriting {untuk kelas ini

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

Dan saya telah memeriksa Mage_Catalog_Model_Categorytetapi tidak ada metode yang didefinisikan dengan nama clearInstance. Benar-benar menyebalkan.

FYI: Saya tidak menyentuh satu karakter kode saya hanya menggunakan situs ADMIN untuk mengimpor produk dan menambahkan beberapa atribut yang diperlukan

sinar matahari
sumber
Kenapa -1? Saya di sini untuk mendapatkan bantuan orang. Apakah ini bukan tempat untuk bertanya tentang Magento.
sinar matahari
Tentang -1, kadang-kadang orang bereaksi aneh ... Tentang masalah Anda, ada tertulis dalam pesan kesalahan Anda, baca saja. "TIDAK BISA OVERRIDE FINAL METODE ...". Anda mencoba untuk menimpa sesuatu yang tidak bisa (Anda atau seseorang yang mengkodekannya dengan buruk)
Sylvain Rayé
@ SylvainRayé: Saya bahkan belum menyentuh satu karakter kode pun, Apakah Anda membaca pertanyaan ?, Saya hanya menggunakan situs ADMIN untuk mengimpor produk. Ini adalah Magento yang merupakan kesalahan melempar dan sekali lagi Magento yang mengkodekannya dengan buruk
sunlight
@ SylvainRayé: Kesalahannya tidak semudah yang Anda kira, Khususnya ketika berasal dari kode inti dan bahkan ketika tanpa menyentuh kode.
sinar matahari
Para peri downvote cukup agresif di komunitas ini, abaikan saja. Mungkin menjadi masalah di mana ekstensi pihak ketiga menyebabkan masalah dengan memperluas atau menimpa kelas. Coba dan nonaktifkan semua ekstensi pihak ke-3 untuk melihat apakah itu membantu
Sander Mangel

Jawaban:

5

Perilaku ini biasanya tidak akan terjadi kecuali Anda telah memodifikasi kode Magento dengan cara tertentu - baik melalui ekstensi pihak ke-3, pengeditan kode inti atau penyesuaian umum.

Fakta itu terjadi di admin, sebelum model data apa pun benar-benar dimuat (kisi-kisi produk dll.) Akan menyiratkan itu disebabkan oleh ekstensi - bukan data yang diimpor.

Jika terjadi di kisi produk - maka itu bisa menjadi model produk yang salah sebagai akibat dari impor gagal.

Tetapi setelah pencarian cepat, ada banyak hasil pencarian google diindeks dari toko Magento dengan kesalahan yang sama. Jadi itu bisa di intinya (walaupun, kita belum pernah menemukannya) - tapi saya ragu.

Melihat inti dalam 1.7

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

Anda seharusnya tidak memiliki penggantian clearInstance()metode ini. Bahkan, metode ini hanya dideklarasikan sekali, diapp/code/core/Mage/Core/Model/Abstract.php

final public function clearInstance()

Saya telah melihat kesalahan seperti ini terjadi ketika orang secara keliru menggunakan includekelas yang diganti (menghasilkannya dimuat dua kali).


Pilihan terbaik Anda adalah mengikuti prosedur debug standar

  1. Kembalikan inti bersih
  2. Pulihkan direktori adminhtml yang bersih
  3. Ganti nama ./app/code/localdirektori
  4. Ganti nama ./app/code/communitydirektori

Dan lihat apakah masalahnya tetap ada.

Ben Lessani - Sonassi
sumber
3

masalahnya di sini adalah dengan APC, nonaktifkan APC dan masalahnya akan hilang.

Calvin Muller
sumber
menonaktifkan APC bukanlah opsi. Tapi ide bagus! Saya tidak akan pernah memikirkan hal ini! @sunlight apakah Anda memiliki lebih dari satu magento yang diinstal? dan mendefinisikan awalan yang sama? Mungkin ada masalah dengan toko lain di dalam cache yang sama.
Fabian Blechschmidt
3

menggunakan standar php untuk kesalahan khusus ini:

Kesalahan fatal: Tidak dapat mengganti metode akhir Mage_Core_Model_Abstract :: clearInstance () di /var/www/html/app/code/core/Mage/Catalog/Model/Category.php on line 36

itu jelas berarti bahwa Anda telah Mage_Core_Model_Abstractmenggunakan kelas tambahan

class Mage_Catalog_Model_Category extends Mage_Catalog_Model_Abstract

dan dalam kelas ini Anda telah clearInstance()mendefinisikan sebagai fungsi.

Karena clearInstance()fungsi adalah fungsi akhir sehingga Anda tidak diizinkan untuk memodifikasi fungsi ini di kelas mana pun.

apa sebenarnya baris 36 Anda dengan menambahkan beberapa kode boneka di atas dan di bawah baris yang Anda asumsikan adalah baris 36.

Saya telah melihat pengembang memodifikasi atau melihat file dalam folder tertentu di mana ketika kompiler diatur ke file kelas php benar ada di folder lain.

Profesi profesional
sumber
Saya memeriksa, saya tidak memiliki metode apa pun yang disebut clearInstancedi localdan communitykolam. Namun, saya menghapus kata kunci akhir dari deklarasi fungsi untuk menyelesaikan masalah sementara, Tapi itu mengganggu saya bahwa ketika saya telah menambahkan finalkata kunci kembali di depan fungsi, semuanya masih berfungsi dengan baik.
sinar matahari
Mungkin kelas Anda dimasukkan dua kali seperti yang dinyatakan oleh sonassi: Saya telah melihat kesalahan seperti ini terjadi ketika orang secara keliru menggunakan termasuk untuk kelas yang ditimpa (yang mengakibatkannya dimuat dua kali).
Oscprofessionals
2

Saya memiliki masalah yang sama dengan versi PHP 5.4 terbaru pada versi Magento yang berbeda (di area frontend) dan tidak bisa menyelesaikan ini dengan kode atau cache. Apakah Anda memeriksa versinya?

Jika ini masalahnya, kembalikan ke versi sebelumnya akan patut dicoba.

Nico Siebler
sumber
2

Baru saja mengalami ini dan menemukan posting bug yang belum dikonfirmasi menyatakan pengaturan yang sangat mirip.

Tampaknya ini adalah bug dengan kombinasi

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

Apache error_log menunjukkan AH00052: child pid XX signal exit Kesalahan segmentasi (11)

Dua solusi terbaik untuk masalah saat ini tampaknya adalah:

A) Turunkan PHP ke versi yang lebih rendah, mungkin 5.4.11 atau lebih rendah.

B) Nonaktifkan APC, jika tidak memungkinkan lihat A. :)

B00MER
sumber
Saya mengalami masalah yang sama dengan PHP 5.3.27 dengan MariaDB, Magento 1.7.0.2, tanpa APC. Saya juga menggunakan Varnish + nginx. Ini adalah masalah intermiten yang memaksa untuk me-restart php-fpm, varnish, nginx, dll. By the way, saya tidak menemukan metode clearInstance non-inti yang dinyatakan di mana saja. Mungkin ada sesuatu termasuk kelas dua kali. Tapi ini aneh, karena jika itu kesalahan parser, itu akan terjadi setiap saat.
Ricardo Martins
1

Saya menyelesaikan masalah ini untuk Magento 1.9 dengan mengubah cara PHP berjalan (Di panel kontrol hosting saya swiched Jalankan PHP sebagai ... ke Aplikasi Fast CGI). Saya sama sekali tidak tahu apa konsekuensi lain dari perubahan ini. Mencoba mencari tahu itu saat ini.

matthijshofstede
sumber
0

Saya mengharapkan masalah yang sama. Tidak ada deklarasi metode Instance yang jelas di luar kumpulan inti.

Saya menganalisis nginx access.log dan error.log saya dan memperhatikan bahwa kesalahan ini muncul ketika Google dan Bing mengunjungi situs saya ribuan kali dalam beberapa menit dalam url yang berbeda, membuat banyak permintaan dan pertanyaan dari Magento. Hal-hal ini menurunkan situs saya.

Saya kira saya memperbaikinya dengan mengurangi kekuatan crawler dari google dan bing di panel webmaster mereka.

Anda dapat menggunakan GoAccess atau Request Log Analyzer untuk menganalisis file log Anda dan melihat agen pengguna pengunjung teratas.

Ricardo Martins
sumber