ข้อผิดพลาดร้ายแรงในหน้าผู้ดูแลระบบ


15

ฉันได้ติดตั้งวีโอไอพี 1.7 และมันใช้ได้ดีจนถึงตอนนี้

ฉันนำเข้าผลิตภัณฑ์ทุกวัน หากมีผู้ผลิตรายใหม่ฉันจะเพิ่มลงในแอตทริบิวต์ผู้ผลิตแบบหล่นลง

วันนี้ฉันได้เพิ่มตัวเลือกผู้ผลิตใหม่ในคุณลักษณะแบ็คเอนด์และไปนำเข้าผลิตภัณฑ์มันประสบความสำเร็จในการนำเข้าผลิตภัณฑ์

แต่หลังจากนั้นฉันพยายามเปิดหน้าใด ๆ ในเว็บไซต์ผู้ดูแลระบบของ 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มันน่ารำคาญจริงๆ

FYI: ฉันไม่ได้สัมผัสตัวอักษรรหัสเดียวฉันเพิ่งใช้ไซต์ ADMIN เพื่อนำเข้าผลิตภัณฑ์และเพิ่มคุณสมบัติที่จำเป็นบางอย่าง


ทำไม -1 ฉันมาที่นี่เพื่อรับความช่วยเหลือจากผู้คน นี่ไม่ใช่ที่สำหรับถามคำถามเกี่ยวกับ Magento
แสงแดด

เกี่ยวกับ -1 บางครั้งผู้คนมีปฏิกิริยาแปลก ๆ ... เกี่ยวกับปัญหาของคุณมันเขียนไว้ในข้อความแสดงข้อผิดพลาดของคุณเพียงแค่อ่าน "ไม่สามารถเอาชนะวิธีสุดท้ายได้ ... " คุณพยายามที่จะแทนที่สิ่งที่ไม่สามารถ (คุณหรือคนที่รหัสมันไม่ดี)
Sylvain Rayé

@ SylvainRayé: ฉันไม่ได้สัมผัสแม้แต่ตัวอักษรเดียวของรหัสคุณอ่านคำถามหรือไม่ฉันแค่ใช้เว็บไซต์ ADMIN เพื่อนำเข้าผลิตภัณฑ์ มันเป็นวีโอไอพีที่กำลังโยนข้อผิดพลาดและอีกครั้งมันเป็นวีโอไอพีที่รหัสมันไม่ดี
แสงแดด

@ SylvainRayé: ข้อผิดพลาดไม่ได้เป็น lite อย่างที่คุณคิดเป็นพิเศษเมื่อมันมาจากรหัสหลักและแม้ในขณะที่ไม่มีรหัสสัมผัส
แสงแดด

นางฟ้าแห่งความโกลาหลนั้นค่อนข้างก้าวร้าวในชุมชนนี้ อาจเป็นปัญหาที่ส่วนขยายของบุคคลที่สามทำให้เกิดปัญหาโดยขยายหรือเขียนทับคลาส ลองและปิดใช้งานส่วนขยายของบุคคลที่สามทั้งหมดเพื่อดูว่ามีส่วนช่วยหรือไม่
Sander Mangel

คำตอบ:


5

พฤติกรรมนี้จะไม่เกิดขึ้นเว้นแต่ว่าคุณจะแก้ไขโค้ดของวีโอไอพีไม่ทางใดก็ทางหนึ่งโดยผ่านทางส่วนขยายของบุคคลที่สามการแก้ไขโค้ดหลักหรือการปรับแต่งทั่วไป

ความจริงมันเกิดขึ้นในผู้ดูแลระบบก่อนที่จะมีการโหลดแบบจำลองข้อมูลใด ๆ (ตารางผลิตภัณฑ์เป็นต้น) จะบ่งบอกว่าเกิดจากส่วนขยาย - ไม่ใช่ข้อมูลที่นำเข้า

มันเกิดขึ้นในตารางผลิตภัณฑ์ - จากนั้นอาจเป็นรุ่นผลิตภัณฑ์ที่ผิดพลาดเนื่องจากการอิมพอร์ตล้มเหลว

แต่หลังจากการค้นหาอย่างรวดเร็วมีผลการค้นหาของ 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 คุณติดตั้งวีโอไอพีมากกว่าหนึ่งชุดหรือไม่ และกำหนดคำนำหน้าเหมือนกันหรือไม่ อาจเป็นปัญหากับร้านค้าอื่นภายในแคชเดียวกัน
Fabian Blechschmidt

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()function เป็นฟังก์ชันสุดท้ายดังนั้นคุณจึงไม่ได้รับอนุญาตให้แก้ไขฟังก์ชันนี้ในคลาสเสริมใด ๆ

บรรทัด 36 ของคุณคืออะไรโดยการเพิ่มโค้ดจำลองบางตัวด้านบนและด้านล่างบรรทัดที่คุณถือว่าเป็นบรรทัด 36

ฉันได้เห็นนักพัฒนาแก้ไขหรือดูไฟล์ในโฟลเดอร์เฉพาะที่เช่นเดียวกับคอมไพเลอร์ตั้งเป็นไฟล์คลาส php จริงอยู่ในโฟลเดอร์อื่น


ฉันจะตรวจสอบผมไม่ได้มีวิธีการใด ๆ ที่มีชื่อclearInstanceในlocalและcommunityสระว่ายน้ำ อย่างไรก็ตามฉันได้ลบคำหลักสุดท้ายออกจากการประกาศฟังก์ชันเพื่อแก้ไขปัญหาชั่วคราว แต่มันน่ารำคาญที่เมื่อฉันเพิ่มfinalคำหลักกลับมาที่ด้านหน้าของฟังก์ชั่นสิ่งต่าง ๆ ยังคงทำงานได้อย่างถูกต้อง
แสงแดด

น่าจะเป็นชั้นเรียนของคุณจะถูกรวมสองครั้งตามที่ระบุไว้โดย sonassi: ฉันเคยเห็นข้อผิดพลาดในลักษณะนี้เกิดขึ้นเมื่อคนใช้ผิดพลาดรวมสำหรับชั้นเรียน overridden (ส่งผลให้มันถูกโหลดสองครั้ง)
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. :)


ฉันกำลังประสบปัญหาเดียวกันกับ PHP 5.3.27 กับ MariaDB, Magento 1.7.0.2 โดยไม่มี APC ฉันยังใช้ Varnish + nginx มันเป็นปัญหาชั่วคราวที่บังคับให้รีสตาร์ท php-fpm, วานิช, nginx และอื่น ๆ ในบางครั้ง โดยวิธีการที่ฉันไม่พบวิธีการที่ชัดเจนที่ไม่ใช่คอร์ประกาศที่ใดก็ได้ อาจมีบางอย่างรวมถึงชั้นเรียนสองครั้ง แต่มันแปลกเพราะถ้ามันเป็นข้อผิดพลาดในการแยกวิเคราะห์มันจะเกิดขึ้นทุกครั้ง
Ricardo Martins

1

ฉันแก้ไขปัญหานี้สำหรับ Magento 1.9 โดยการเปลี่ยนวิธีการทำงานของ PHP (ในแผงควบคุมโฮสติ้งฉันเปลี่ยนการเรียกใช้ PHP เป็น ... เป็น Fast CGI Application) ฉันไม่รู้จริงๆว่าการเปลี่ยนแปลงนี้มีผลกระทบอะไรอีก พยายามคิดออกตอนนี้


0

ฉันคาดหวังว่าปัญหาเดียวกัน ไม่มีการประกาศเมธอดclearInstanceที่ใดก็ได้จากพูลหลัก

ฉันวิเคราะห์ nginx access.log และ error.log ของฉันและพบว่าข้อผิดพลาดเหล่านี้จะปรากฏขึ้นเมื่อ Google และ Bing bots เยี่ยมชมเว็บไซต์ของฉันหลายพันครั้งในเวลาไม่กี่นาทีใน URL ที่แตกต่างกันทำให้มีคำขอและแบบสอบถามจำนวนมากจากวีโอไอพี สิ่งนี้ทำให้ไซต์ของฉันพัง

ฉันเดาว่าฉันได้แก้ไขโดยการลดกำลังของซอฟต์แวร์รวบรวมข้อมูลจาก google และ bing ที่แผงควบคุมของเว็บมาสเตอร์

คุณสามารถใช้GoAccessหรือRequest Log Analyzerเพื่อวิเคราะห์ไฟล์บันทึกของคุณและดูตัวแทนผู้ใช้รายใหญ่ที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.