it-swarm.asia

كيف ترى رسائل الخطأ عندما أحصل على شاشة الموت البيضاء؟

كيف يمكنني رؤية رسائل الخطأ عندما يحصل الموقع الذي أعمل فيه على شاشة بيضاء؟

25
sokratis

ضع هذا في أسفل الإعدادات. php:

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);
33
Mike

الشاشة البيضاء للموت (صفحة فارغة تمامًا) مورد على موقع drupal.org سيوجهك عبر الخطوات لرؤية رسالة الخطأ بالإضافة إلى المشكلات الشائعة التي تسببها.

أخطاء "غير مرئية"

إذا تم إيقاف تشغيل الإبلاغ عن الأخطاء ، فقد تحصل على خطأ فادح ولكن لا تشاهده. في موقع الإنتاج ، من الشائع إيقاف تشغيل الإبلاغ عن الأخطاء. إذا كان هذا هو الحال و PHP قد حدث خطأ غير قابل للاسترداد ، فلن يتم عرض أي خطأ أو محتوى ، وبالتالي ينتهي بك الأمر إلى صفحة فارغة تمامًا.

ما يمكنك القيام به حيال ذلك هو إما تشغيل PHP حتى يعرض رسالة على الصفحة نفسها ، أو التحقق من ملفات السجل الخاصة بك (من الخادم) للبحث عن الخطأ. كيفية تفعل كل من هذه موضحة أدناه.

تمكين الإبلاغ عن الأخطاء

على الرغم من أنه قد يتم إيقاف تشغيله على المضيفين التجاريين ومواقع الإنتاج (لسبب وجيه ، بحيث لا يرى المستخدمون الأخطاء) ، فإن هذه الأخطاء هي واحدة من أفضل أدواتك لاستكشاف الأخطاء وإصلاحها. لتمكين الإبلاغ عن الأخطاء ، قم بتحرير ملف index.php مؤقتًا (الموجود عادةً في الدليل الجذر) مباشرةً بعد الفتح الأول 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);
}

إذا حدثت المشكلة أثناء تشغيل update.php ، فقم بفتح update.php في محرر نصوص وقم بإلغاء تعليق السطر التالي:

ini_set('display_errors', FALSE);
17
iStryker

ألق نظرة على سجل أخطاء Apache ، في Ubuntu ، يقع في /var/log/Apache2/error.log حتى يمكنك القيام بما يلي:

tail -f /var/log/Apache2/error.log
10
tostinni

لقد وجدت طريقة سهلة لتتبع أخطاء WSOD عن طريق تشغيل الموقع بالكامل عبر drush ، على سبيل المثال:

drush rs

بعد ذلك ، قم بالوصول إلى الموقع على العنوان الجديد المحدد (على سبيل المثال 127.0.0.1:8080) ، ثم حاول إعادة إظهار المشكلة ، وسترى جميع الأخطاء على شاشة النهاية الطرفية. لا حاجة لإعادة تكوين PHP ، خاصة في الحالات التي display_errors فشل (مثل MAMP).


طريقة صعبة أخرى وجدتها باستخدام مصححات الأخطاء ، على سبيل المثال:

  • 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).

2
kenorb

إذا كنت تستخدم drush ، يمكنك رؤية رسائل الخطأ باستخدام الأمر drush-ws.

1
Manikandan

يمكنك تعديل 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>';
}

ستعرض رسالة الخطأ الملف وسطر التعليمات البرمجية الذي تسبب في الخطأ.

0
Trincer

لقد قمت للتو بتغيير قيمة $ update_free_access المتغيرة من FALSE إلى TRUE وقمت بتنفيذ ملف update.php. لقد حلت مشكلتي.

0
Saeed Afzal