2013-05-20 5 views
5

क्या कोई php.ini सेटिंग या कुछ अन्य चाल है जो एक घातक त्रुटि उत्पन्न करने के लिए PHP को मजबूर करने के लिए मजबूर करती है या इसी तरह की एक स्ट्रिंग मानने के (हास्यास्पद) डिफ़ॉल्ट व्यवहार के बजाय एक अपरिभाषित स्थिरता का उपयोग किया जाता है?अपरिभाषित स्थिरांक के लिए PHP व्यवहार बदलें?

डिफ़ॉल्ट व्यवहार एक अंतरंग सुरक्षा जोखिम हो सकता है, लेकिन इससे अधिक बार यह केवल एप्लिकेशन त्रुटियों की ओर जाता है। मुझे एहसास है कि मैं मान के लिए पूछने से पहले निरंतर अस्तित्व की जांच करने के लिए defined() का उपयोग कर सकता हूं, लेकिन इससे अनावश्यक/बदसूरत कोड होता है, और अभी भी डेवलपर त्रुटि के लिए प्रवण है। हम यह सुनिश्चित करने के बारे में बहुत सावधान हैं कि प्रयुक्त स्थिरांक परिभाषित किए गए हैं, लेकिन यह समस्या अभी भी थोड़ी देर में उत्पादन में घुस जाती है, और यदि संभव हो तो मैं इसे रोकना चाहता हूं। एक घातक त्रुटि "आपके चेहरे में" और क्यूए द्वारा निचोड़ने की बहुत कम संभावना होगी।

उत्तर

2

अपरिभाषित स्थिरांक एक PHP नोटिस उत्पन्न करते हैं।

तुम बस, किसी भी पीएचपी चेतावनी के लिए एक अपवाद फेंक कर सकते हैं कम से कम विकास मोड में:

set_error_handler(function ($errno, $errstr, $errfile, $errline) { 

    throw new ErrorException($errstr, $errno, 1, $errfile, $errline); 

    // or turn it in a fatal error 

    trigger_error($errstr, E_USER_ERROR); 
}); 

आप केवल undefined constant चेतावनी, Use of undefined constant FOO - assumed 'FOO' के खिलाफ अगर $errstr मैचों परीक्षण को संभालने के लिए चाहते हैं।


नोट: केवल अयोग्य, वैश्विक स्थिरांक इस तरह व्यवहार करते हैं। PHP अपरिभाषित वर्ग स्थिरांक और अपरिभाषित नामस्थान स्थिरांक (उदा। Foo::BAR या Foo\BAR) के लिए एक घातक त्रुटि फेंकता है।

तो यदि आप अनिर्धारित स्थिरांक का उपयोग करते समय PHP को घातक त्रुटियों को फेंकना चाहते हैं, तो दूसरा समाधान कक्षा स्थिरांक या नामित स्थिरांक का उपयोग करना है।

+0

+1। मैं कक्षा स्थिरांक के बारे में जानता था, लेकिन मुझे हमेशा लगता है कि नामित स्थिरांक इस संबंध में अयोग्य लोगों के समान कार्य करते हैं। पारितोषिक के लिए धन्यवाद। – FtDRbwLXw6

3
set_error_handler(function($type, $error) { 
    if(stripos($error, 'Use of undefined constant') !== FALSE) 
    { 
     // god forbid - someone's used an undefined constant. Act appropriately. 
     trigger_error($error, E_USER_ERROR); // Triggers a fatal error. 
     return TRUE; 
    } 
}, E_NOTICE); 

यह शायद तुम क्या, के लिए देख रहे जहाँ तक मुझे पता है कर रहा हूँ वहाँ PHP के त्रुटि 'रैंकिंग' संशोधित करने के लिए कोई रास्ता नहीं है है।

+0

वही है जो मैं लिख रहा था;) – smassey

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