जब मुझे मौत की सफ़ेद स्क्रीन मिलती है तो त्रुटि संदेश कैसे देखें?


25

जब मैं जिस साइट पर काम कर रहा हूं, उसे सफेद स्क्रीन मिलने पर मैं त्रुटि संदेश कैसे देख सकता हूं?

जवाबों:


33

इसे सेटिंग के निचले भाग पर रखें।

error_reporting(-1);  // Have PHP complain about absolutely everything 
$conf['error_level'] = 2;  // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE);  // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);

यह विकास साइटों के लिए बहुत अच्छा है, हालांकि मैं लाइव साइट्स के लिए /var/log/apache2/error.log पसंद करता हूं। हालांकि यह काम करता है। :)
Citricguy

17

Drupal.org पर व्हाइट स्क्रीन ऑफ डेथ (पूरी तरह से ब्लैंक पेज) संसाधन आपको त्रुटि संदेश के साथ-साथ सामान्य समस्याओं को देखने के लिए कदमों के माध्यम से कदम रखेगा।

"अदृश्य" त्रुटियां

यदि त्रुटि रिपोर्टिंग को बंद कर दिया जाता है, तो आपको एक घातक त्रुटि मिल सकती है, लेकिन इसे देखना नहीं। एक उत्पादन साइट पर, त्रुटि रिपोर्टिंग बंद होना आम बात है। अगर ऐसा है और PHP ने एक अपरिवर्तनीय त्रुटि को मारा है, तो न तो कोई त्रुटि और न ही सामग्री प्रदर्शित की जाएगी, इसलिए आप पूरी तरह से रिक्त पृष्ठ के साथ समाप्त होते हैं।

आप इसके बारे में क्या कर सकते हैं या तो PHP त्रुटि रिपोर्टिंग चालू करें ताकि यह पृष्ठ पर स्वयं एक संदेश प्रदर्शित करे, या त्रुटि देखने के लिए अपनी लॉग फ़ाइलों (सर्वर से) की जांच करें। इन दोनों को कैसे करें नीचे समझाया गया है।

त्रुटि रिपोर्टिंग सक्षम करें

यद्यपि इसे वाणिज्यिक होस्ट और उत्पादन साइटों (अच्छे कारण के लिए बंद किया जा सकता है, ताकि उपयोगकर्ताओं को त्रुटियाँ न दिखें), ये समस्याएँ समस्या निवारण के लिए आपके सबसे अच्छे साधनों में से एक हैं। त्रुटि रिपोर्टिंग को सक्षम करने के लिए, पहले खुलने वाले PHP टैग के बाद अपनी index.php फ़ाइल (आमतौर पर आपके रूट डायरेक्टरी में स्थित) को अस्थायी रूप से संपादित करें (निम्न फ़ाइल जानकारी को संपादित न करें!) निम्नलिखित जोड़ने के लिए:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

अब आप सीधे स्क्रीन पर आने वाली किसी भी त्रुटि को देख पाएंगे। स्मृति समस्याएं अभी भी प्रदर्शित नहीं हो सकती हैं, लेकिन यह उन्मूलन की प्रक्रिया में पहला कदम है।

यदि आप एक मल्टी-साइट सेटअप का उपयोग कर रहे हैं और केवल एक साइट के लिए त्रुटियां प्रकट करना चाहते हैं, तो पहले होस्ट का नाम निम्नानुसार जांचें:

if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
}

यदि अद्यतन चलाते समय समस्या उत्पन्न होती है। किसी पाठ संपादक में अद्यतन को अपडेट करने के लिए।

ini_set('display_errors', FALSE);

10

अपाचे त्रुटि लॉग पर एक नज़र डालें, उबंटू में यह स्थित है /var/log/apache2/error.logताकि आप कर सकें:

tail -f /var/log/apache2/error.log

2
sudo tail -f /var/log/apache2/error.log
Citricguy

1
यदि आपके पास उनमें से प्रत्येक के लिए कस्टम लॉग फ़ाइलों के साथ कई vhosts हैं, तो बस इसका उपयोग करें: sudo tail -f /var/log/apache2/*.log तब wsod के साथ समाप्त होने वाले पृष्ठ को रीफ़्रेश करें
izus

2

मुझे पूरी साइट चलाकर WSOD त्रुटियों को ट्रैक करने का आसान तरीका मिला drush, जैसे:

drush rs

उसके बाद दिए गए नए पते (जैसे 127.0.0.1:8080) पर साइट को एक्सेस करें , फिर समस्या को पुन: उत्पन्न करने का प्रयास करें, और आपको टर्मिनल स्क्रीन पर सभी त्रुटियां दिखाई देंगी। अपने PHP को पुन: कॉन्फ़िगर करने की आवश्यकता नहीं है, विशेष रूप से ऐसे मामलों में जब display_errorsविफल रहता है (जैसे एमएनएम)।


अन्य मुश्किल तरीके से मैंने इसे डिबगर्स का उपयोग करके पाया है, जैसे:

  • OS X:

    sudo dtruss -fn httpd 2>&1 | grep -i error
  • लिनक्स:

    sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error

    नोट: बदलें httpdमें phpआप उपयोग कर रहे हैं drush rsइसके बाद के संस्करण के रूप में।

या XDebugPHP विस्तार स्थापित करने और एक ट्रेस फ़ाइल ( xdebug.auto_trace=1) उत्पन्न करते हैं ।


1
आप सर, एक जीवन रक्षक हैं। बदलती php सेटिंग्स में से किसी ने भी मेरे लिए काम नहीं किया, लेकिन यह काम किया!
ग्रेग सोमरस

1

यदि आप ड्रश का उपयोग कर रहे हैं, तो आप ड्रश-वास कमांड का उपयोग करके त्रुटि संदेश देख सकते हैं।


0

मैंने अभी FALSE से चर $ update_free_access मान को TRUE में बदल दिया और अद्यतन.php फ़ाइल निष्पादित की। इसने मेरी समस्या हल कर दी।


0

आप index.php को संशोधित कर सकते हैं और एक कोशिश / पकड़ के साथ कोड को लपेट सकते हैं। ऐशे ही:

try {
    define('DRUPAL_ROOT', getcwd());
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    menu_execute_active_handler();
} catch (Error $t) {
    error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
    print '<div>Message: ' . $t->getMessage() . '</div>';
    print '<div>File:' . $t->getFile() . '</div>';
    print '<div>Line:' . $t->getLine() . '</div>';
}

त्रुटि संदेश कोड की फ़ाइल और लाइन दिखाएगा जो त्रुटि का कारण बना।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.