كيف يمكنني رؤية رسائل الخطأ عندما يحصل الموقع الذي أعمل فيه على شاشة بيضاء؟
ضع هذا في أسفل الإعدادات. 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);
الشاشة البيضاء للموت (صفحة فارغة تمامًا) مورد على موقع 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);
ألق نظرة على سجل أخطاء Apache ، في Ubuntu ، يقع في /var/log/Apache2/error.log
حتى يمكنك القيام بما يلي:
tail -f /var/log/Apache2/error.log
لقد وجدت طريقة سهلة لتتبع أخطاء 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
).
إذا كنت تستخدم drush ، يمكنك رؤية رسائل الخطأ باستخدام الأمر drush-ws.
يمكنك تعديل 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>';
}
ستعرض رسالة الخطأ الملف وسطر التعليمات البرمجية الذي تسبب في الخطأ.
لقد قمت للتو بتغيير قيمة $ update_free_access المتغيرة من FALSE إلى TRUE وقمت بتنفيذ ملف update.php. لقد حلت مشكلتي.