जवाबों:
इसे सेटिंग के निचले भाग पर रखें।
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);
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);
अपाचे त्रुटि लॉग पर एक नज़र डालें, उबंटू में यह स्थित है /var/log/apache2/error.log
ताकि आप कर सकें:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
मुझे पूरी साइट चलाकर 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
इसके बाद के संस्करण के रूप में।
या XDebug
PHP विस्तार स्थापित करने और एक ट्रेस फ़ाइल ( xdebug.auto_trace=1
) उत्पन्न करते हैं ।
यदि आप ड्रश का उपयोग कर रहे हैं, तो आप ड्रश-वास कमांड का उपयोग करके त्रुटि संदेश देख सकते हैं।
मैंने अभी FALSE से चर $ update_free_access मान को TRUE में बदल दिया और अद्यतन.php फ़ाइल निष्पादित की। इसने मेरी समस्या हल कर दी।
आप 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>';
}
त्रुटि संदेश कोड की फ़ाइल और लाइन दिखाएगा जो त्रुटि का कारण बना।