मैं PHP त्रुटियों को कैसे चुप करूं?


32

क्या ड्रुपल में सभी PHP त्रुटियों, चेतावनियों और नोटिस को चुप करने का एक तरीका है? वे devel साइट पर उपयोगी हैं, लेकिन वे एक बड़ा सुरक्षा जोखिम हैं, और साइट को लाइव पर खराब दिखते हैं।

मुझे पता है कि Drupal 6 पृष्ठ पर व्यवस्थापक / सेटिंग्स / त्रुटि-रिपोर्टिंग में Drupal को स्क्रीन पर त्रुटियों को लिखने से रोका जा सकता है, लेकिन मुझे Drupal 7 में यह कहां मिल सकता है? लगता है यह गायब है।


3
ध्यान दें, हालांकि, त्रुटियों में बहुत महत्वपूर्ण भूमिका है: वे संकेत देते हैं कि कुछ गलत है। उस को चिन्हित करना, अंतर्निहित समस्या को हल नहीं करता है। इसे "रूसी विधि" भी कहा जाता है: जब एक परमाणु संयंत्र में अलार्म-प्रकाश झपकी लेना शुरू कर देता है, तो बस लाइटबल्ब को हटा दें। अलार्म-लाइट अब नहीं झपकी; कोई समस्या नहीं।
Berkes

मजेदार :)। लेकिन मैं केवल उत्पादन साइट पर त्रुटि को दबाता हूं।
drupal_stuff_alter

ड्रुपल के पास यह तय करने का विकल्प है कि किन त्रुटियों को प्रदर्शित किया जाना चाहिए; प्रदर्शित नहीं की गई त्रुटियां अभी भी डेटाबेस में दर्ज हैं, और एडमिन / रिपोर्ट / डब्लॉग में दिखाई जाती हैं।
kiamlaluno

@kiamlaluno, उत्पादन में जो कुछ हद तक ठीक है (फिर भी एक त्रुटि प्रस्तुत करना कि एक भुगतान विफल हमेशा बेहतर होता है तो अनिश्चितता में अपने ग्राहक को छोड़कर)। लेकिन विकास और परीक्षण में मेरा अनुभव यह है कि dblog में धकेल दी गई त्रुटियों को समाप्त कर दिया गया है। सैकड़ों नोटिस और प्रति घंटे चेतावनी के साथ Drupalsites वहाँ लॉग इन किया, कोई अपवाद नहीं है। और असली अपवाद और त्रुटियां शोर में खो जाती हैं। सबसे अच्छा है कि प्रत्येक नोटिस को डेवलपर के चेहरे पर जोर से धक्का दे।
बर्क

ठीक है, लेकिन ओपी उन त्रुटियों को एक उत्पादन साइट में छिपाने के लिए दिलचस्पी लेता है। (देखें, "वे devel साइट पर उपयोगी हैं लेकिन वे एक बड़ा सुरक्षा जोखिम हैं, और लाइव पर साइट नज़र बुरा बनाते हैं।")
kiamlaluno

जवाबों:


29

पथ परिवर्तन, जैसा कि Drupal 7 में होता है, वही पृष्ठ जिसे आप पहले व्यवस्थापक / सेटिंग्स / त्रुटि-रिपोर्टिंग में देखते थे, अब व्यवस्थापक / config / development / logging में है।

स्क्रीनशॉट


1
किसी कारण के लिए, IM यह करने में सक्षम नहीं है। सेव पर क्लिक करने पर मेरा चयन रीसेट हो रहा है। वहाँ एक तरह से मैं डेटाबेस या मैन्युअल रूप से इस तरह से इसे बदल सकता है ??
निरंजन एन राजू

17

जैसा कि सुझाव दिया गया है, Administration » Configuration » Development(पर /admin/config/development/logging) आप त्रुटि संदेशों के प्रदर्शन को अक्षम करने के लिए सेटिंग पा सकते हैं , लेकिन यह त्रुटि / नोटिस को पूरी तरह से अक्षम नहीं करेगा।

ऐसा इसलिए है क्योंकि Drupal 7 E_ALL को लागू करता है, इसलिए वे अभी भी syslog के लिए लिखे गए हैं और आप उन्हें अपने वेबसाइट के प्रदर्शन को प्रभावित करने वाले हाल के लॉग में देख सकते हैं ।

नोटिस को पूरी तरह से अक्षम करने के लिए, आपको अपनी settings.phpया php.iniफ़ाइल में निम्न पंक्ति जोड़नी होगी :

ini_set('error_reporting', E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);

नोटिस और कोडिंग मानकों की चेतावनी को छोड़कर, सभी त्रुटियां दिखाएं।

सभी PHP त्रुटियों को चुप करने के लिए, जो अनुशंसित नहीं है, आप अपनी सेटिंग फ़ाइल को जोड़ने का प्रयास कर सकते हैं:

error_reporting(0); // Disable all errors.

देख: error_reporting()


E_ALLलॉगिंग के लिए उत्तरदायी ड्रुपल 7 कोर कोड (फाइल:) includes/bootstrap.inc:

// Enforce E_ALL, but allow users to set levels not part of E_ALL.
error_reporting(E_ALL | error_reporting());

यह भी देखें:


4

एक बात का किसी ने उल्लेख नहीं किया है जो लोगों को यह जानने में मददगार हो सकता है कि ड्रुपल 7 सभी स्थानीय सिस्टम त्रुटि रिपोर्टिंग स्तरों की उपेक्षा करता है। इसलिए आप Drupal में php त्रुटि रिपोर्टिंग स्तर सेट करने के लिए .htaccess या php.ini का उपयोग नहीं कर सकते हैं।

D8 में इसके लिए एक पैच प्रस्तावित है, लेकिन वर्तमान में D7 में आप 3 त्रुटि मास्क तक ही सीमित हैं- कोई भी, या त्रुटियां और चेतावनियाँ - जो कि इंगित किए गए व्यवस्थापक पृष्ठ kiamlaluno पर सेट हैं।


3

सेटिंग्स हमेशा व्यवस्थापक / कॉन्फ़िगरेशन / विकास / लॉगिंग में होती हैं :)


आपका बहुत बहुत धन्यवाद! मैं अभी भी हरी सूचनाओं को जीवित रखना चाहता हूं। आशा है कि वे गायब नहीं होंगे।
drupal_stuff_alter

2

निश्चित नहीं है कि ड्रश पद्धति इतनी अनिर्दिष्ट क्यों है, लेकिन मेरी बिल्ड स्क्रिप्ट में है:

drush vset error_level 0

... जो लॉग में त्रुटि संदेशों को बचाता है, लेकिन उन्हें स्क्रीन पर नहीं दिखाता है।


1

आपको ऊपर पोस्ट किए गए समाधान kenorb में उद्धरण जोड़ने की आवश्यकता हो सकती है:

ini_set('error_reporting', 'E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR');

यह गलत है - जो निरंतर हैं, उन्हें उद्धृत नहीं किया जाना चाहिए। error_reporting एक पूर्णांक मान है जो पूर्णांक स्थिरांक से मिलकर बना है। यह एक स्ट्रिंग सेटिंग नहीं है जो निरंतर नामों से बनी है जैसा कि आप यहां प्राप्त कर चुके हैं।
डेट्रॉसमैन

0

इसके लिए एक मॉड्यूल है:

https://www.drupal.org/project/errorlevelpermission

परियोजना पृष्ठ से:

तो तुम कर सकते हो

  • साइटबिल्डर भूमिका (या यहां तक ​​कि एक विशेष डिबगर भूमिका) में त्रुटियां और नोटिस देखें
  • अन्य लोगों ने त्रुटियां और नोटिस नहीं देखे हैं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.