2012-11-15 8 views
6

मेरा एक ग्राहक अपने Magento सिस्टम में कुछ कोड के साथ एक अजीब समस्या की रिपोर्ट कर रहा है (Magento PHP में लिखा गया एक ईकॉमर्स मंच है)। मेरे पास सिस्टम को सीधे पहुंचने और डीबग करने के लिए सीधे पहुंच नहीं है, इसलिए मैंने सोचा कि मैं स्टैक ओवरफ़्लो से पूछूंगा यदि आपने कभी ऐसा कुछ देखा है।PHP रैंडम क्लास नाम को स्वत: लोड करने का प्रयास करता है

त्रुटि कभी-कभी वे देख रहे हैं

Warning: include(O1ucm02owqn3iwwcx5osz2m2.php): failed to open stream: 

है एक कॉल स्टैक कि इस से

#0 /Users/theirusername/Sites/project/lib/Varien/Autoload.php(93): mageCoreErrorHandler(2, 'include(O1ucm02...', '/Users/theiruse...', 93, Array) 
#1 /Users/theirusername/Sites/project/lib/Varien/Autoload.php(93): Varien_Autoload::autoload() 
#2 [internal function]: Varien_Autoload->autoload('o1ucm02owqn3iww...') 
#3 [internal function]: spl_autoload_call('o1ucm02owqn3iww...') 
#4 /Users/theirusername/Sites/project/app/code/local/Theirname/Commercebug/Model/Observer.php(191): defined('Mage_Core_Block...') 

शामिल के साथ, मैं यह मान सकते हैं पीएचपी यह एक वर्ग O1ucm02owqn3iwwcx5osz2m2 नामित दृष्टांत की जरूरत है सोचता है कि। हालांकि, मैं का पता नहीं लगा सकता क्यों PHP ऐसा कर सकता है। लाइनों है कि त्रुटि उत्पन्न (callstack में # 4, Observer.php में लाइन 191 के आसपास) होना चाहिए

if(defined("Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS")) 
{ 
    $path = Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS; 
} 

ये लाइनें नहीं है किसी भी पीएचपी वर्ग O1ucm02owqn3iwwcx5osz2m2 नामित (मैं कहता हूँ "होना चाहिए" क्योंकि उल्लेख करने के लिए ग्राहक ने स्वयं कोड को तैनात किया है, मैं संभावित समस्याओं की तलाश करने के लिए एक प्रति प्राप्त करने के लिए उनके साथ काम कर रहा हूं)।

क्या किसी को पता है कि क्या हो रहा है? क्या यह कुछ संस्करण के साथ एक ज्ञात PHP बग/मुद्दा है और/या किसी ने इस तरह के मुद्दों को PHP ऑटोलोडर/defined/कक्षा स्थिरांक के साथ देखा है?

(मैं PHP के संस्करण का निर्धारण करने के लिए अपने ग्राहकों के साथ काम कर रहा हूँ कि वे चल रहे हैं, साथ ही फाइलों वे सुनिश्चित करने के लिए तैनात किया गया है की एक प्रति हो रही वे मेल यह मानें कि मैं क्या कर रहे हैं।)

+1

वे अन्य तृतीय पक्ष एक्सटेंशन का उपयोग कर रहे हैं? इसके अलावा उनके पास अन्य PHP मॉड्यूल क्या हैं? कुछ प्रकार के भ्रष्टाचार की तरह लगता है। क्या वे एपीसी या एक्सकैच या ई एक्सेलेरेटर का उपयोग करते हैं? साथ ही, क्या यह हमेशा एक ही कक्षा का अनुरोध किया जाता है या क्या यह हमेशा यादृच्छिक बकवास की कुछ स्ट्रिंग है? –

+2

किसी भी मौके से ज़ेंड गार्ड लोडर का उपयोग करने के लिए हुआ? ऐसा लगता है कि समय-समय पर नाम बदलने में अति उत्साही है और इस प्रकार – Jasper

+2

का वर्णन करने वाले तरीके से स्क्रिप्ट को तोड़ना मुझे –

उत्तर

1

परिभाषित() फ़ंक्शन नामित स्थिरांक के लिए परिभाषित() फ़ंक्शन के लिए एक प्रशंसा के रूप में कार्य करता है। यही कहना है, define के साथ घोषित स्थिरांक defined के साथ अच्छी तरह से चेक किया जा सकता है।

हालांकि, यह कोड class constant की जांच कर रहा है, जो संभव है, कम सामान्य है। मुझे लगता है कि जाँच autoloading ट्रिगर कर रहा है (just as the use of class_exists can trigger autoloading।) हालांकि, मूल्य की परिभाषित घायल है उपयोग के माध्यम से autoloader को हस्तांतरित कर दिया (शायद hash of the z-val for the string सौंपने।)

मैं अगर निम्न परिवर्तन बातें मिलेगा सोच रहा हूँ काम कर रहा है:

// force PHP to load the class first, then let defined() check for the constant 
if(class_exists("Mage_Core_Block_Template") && defined("Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS")) 
{ 
    $path = Mage_Core_Block_Template::XML_PATH_DEBUG_TEMPLATE_HINTS; 
} 

जैसा कि एलन ने अपनी टिप्पणी में उल्लेख किया था, ज़ेंड गार्ड भी एक मुद्दा पैदा कर सकता है।

+1

+1 जैसा दिखता है क्योंकि आपने जो भी कहा है, वह सटीक और अच्छी सलाह है, "आमतौर पर एक स्थिरांक वर्ग बदल नहीं है "। मौजूद चेक जो विशेष रूप से हैं क्योंकि स्थिरांक समय के साथ Magento में जोड़ा गया है, और मेरे उत्पाद को उन पिछले संस्करणों का समर्थन करने की आवश्यकता है जिनके पास उन स्थिरांक नहीं हो सकते हैं। (यकीन है कि यह एक ज़ेंड गार्ड मुद्दा है जिसे 'परिभाषित' में कक्षा स्थिरांक के साथ अच्छा नहीं खेल रहा है) –

+1

मान्य बिंदु, एलन। मैंने तदनुसार जवाब अपडेट किया है।इन प्रकार के चेक की कमजोर प्रकृति वह है जिसे मैं संभावित कारण के रूप में हाइलाइट करना चाहता था, इस तरह की एक बग क्यों छीन सकती थी, लेकिन, वास्तव में, मेरी भाषा शुरू में बहुत मजबूत थी। – AdamJonR

संबंधित मुद्दे

 संबंधित मुद्दे