בפוסט קצר זה נראה מה הדרך הנכונה לנטר שגיאות PHP באתרי וורדפרס באמצעות WP_DEBUG_LOG
. כמו במרבית הדברים הקשורים לפיתוח וורדפרס, ניתן לומר כי הדרך הטובה ביותר להבין פונקציה מסויימת היא פשוט לחפש את אותה פונקציה בקבצי הליבה של וורדפרס ולתת מבט בקוד.
הנה הקוד של הפונקציה wp_debug_mode
.החלק החשוב והרלוונטי מופיע ב wp-include/load.php
:
function wp_debug_mode() {
if ( WP_DEBUG ) {
error_reporting( E_ALL );
if ( WP_DEBUG_DISPLAY )
ini_set( 'display_errors', 1 );
elseif ( null !== WP_DEBUG_DISPLAY )
ini_set( 'display_errors', 0 );
if ( WP_DEBUG_LOG ) {
ini_set( 'log_errors', 1 );
ini_set( 'error_log', WP_CONTENT_DIR . '/debug.log' );
}
} else {
error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
}
if ( defined( 'XMLRPC_REQUEST' ) )
ini_set( 'display_errors', 0 );
}
נחסוך את ההסברים על כל שורה, אך בעיקרו של דבר אם תקבעו כי WP_DEBUG_LOG
פעיל, WP_DEBUG_DISPLAY
לא פעיל ו WP_DEBUG
גם כן פעיל, התוצאה תהיה שכל שגיאות ה PHP יירשמו לקובץ debug.log
שייווצר בתיקיית wp-content אך לא יוצגו שגיאות php ברמת הדפדפן (ב frontend).
בכדי להגדיר אלו בצורה שתיארנו השתמשו בקוד הבא:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'WP_DEBUG_LOG', true );
אך מדוע לעשות זאת? הנה שלוש סיבות מדוע עדיף להשתמש ב WP_DEBUG_LOG
על פני WP_DEBUG
:
הודעות שגיאה נסתרות
אתם רגילים לראות הודעות שגיאה של PHP ברמת הדפדפן אך האם אתם בטוחים שאתם רואים את כולן? מה לגבי אלמנטים שנסתרים ב CSS ומה לגבי קריאות AJAX?
מעבר לכך שהרבה פעמים השגיאות אינן מוצגות בצורה נוחה ברמת הדפדפן, ממשק המשתמש (User Interface) הוא אינו מקום אמין לתפוס את כל הודעות השגיאה. קובץ ה PHP Log לעומת זאת מראה את כולן ולא תפספסו…
הודעות שגיאה חסרות
אולי אתם אוהבים להשתמש בתוספים כגון Debug Bar או Query Monitor על מנת לנטר ולקבל את הודעות השגיאה ואתם מאד מרוצים מהם, אני לא מאשים אתכם, אלו תוספים נהדרים.
עם זאת, נתקלתי בפעמים בהם הם מפספסים שגיאות. כנראה שסיטואציה זו קורה מפני שאלו בסופו של דבר תוספים ומאד יכול להיות שישתוספים שנטענים לפניהם. אפשר כמובן שניתן לשנות את סדר טעינת התוספים באמצעות תוספים אחרים כגון Plugin Organizer אך מה בקשר לתוספים הנמצאים בספריית ה MU plugins או שגיאות בקבצי הליבה של וורדפרס עצמה?
עד כמה שתוספים אלו נוחים ועוזרים לדברים נוספים, זוהי טעות לסמוך עליהם בלבד בכדי לגלות את כל שגיאות ה PHP באתר וורדפרס שלכם. PHP בפני עצמה היא המקור האמין ביותר לדיווח שגיאות וזאת תקבלו באמצעות הקובץ debug.log
.
תוספים צד שלישי
במידה והקוד שאתם כתבתם בעייתי וזורק הודעות שגיאה, תוכלו לתקן זאת. אך מה תעשו במקרה ותוספים חיצוניים שהתקנתם זורקים הודעות שגיאה והערות על כל הממשק שלכם? מכיוון וכאשר WP_DEBUG
פעיל הוא מציג את כל השגיאות ללא יוצא מן הכלל, זה יכול להיות מאד קשה לעבוד כאשר הודעות שגיאה והערות רצות לך על כל המסך כך שנוצר מצב בו אי אפשר לעבוד כלל כאשר תוספים מסויימים פעילים.
ניתן כמובן לבטל את אותם תוספים סוררים, אך מה אם הם הכרחיים לתהליך הפיתוח שלכם ואינכם יכולים לבטל אותם? בעבר פשוט ביטלתי את WP_DEBUG
במקרים כאלו אך זו בטח לא הדרך הנכונה לעבוד…
בשלב זה אני כבר בטוח שזכיתי בתשומת ליבכם, כבר הוספתם את אותן שורות ל wp-config.php
ואתם מנטרים את השגיאות באמצעות קובץ ה debug.log
. הנה דוגמא לכיצד נראות השגיאות בקובץ זה:
[18-Dec-2017 09:18:08 UTC] PHP Fatal error: Call to undefined function get_slocale() in /Users/roeeyossef/Sites/startapp/wp-content/themes/thesis/includes/home.php on line 9
[18-Dec-2017 09:18:08 UTC] PHP Stack trace:
[18-Dec-2017 09:18:08 UTC] PHP 1. {main}() /Users/roeeyossef/Sites/startapp/index.php:0
[18-Dec-2017 09:18:08 UTC] PHP 2. require() /Users/roeeyossef/Sites/startapp/index.php:17
[18-Dec-2017 09:18:08 UTC] PHP 3. require_once() /Users/roeeyossef/Sites/startapp/wp-blog-header.php:19
[18-Dec-2017 09:18:08 UTC] PHP 4. apply_filters() /Users/roeeyossef/Sites/startapp/wp-includes/template-loader.php:73
[18-Dec-2017 09:18:08 UTC] PHP 5. WP_Hook->apply_filters() /Users/roeeyossef/Sites/startapp/wp-includes/plugin.php:203
[18-Dec-2017 09:18:08 UTC] PHP 6. call_user_func_array:{/Users/roeeyossef/Sites/startapp/wp-includes/class-wp-hook.php:286}() /Users/roeeyossef/Sites/startapp/wp-includes/class-wp-hook.php:286
[18-Dec-2017 09:18:08 UTC] PHP 7. thesis_skin->_skin() /Users/roeeyossef/Sites/startapp/wp-includes/class-wp-hook.php:286
[18-Dec-2017 09:18:08 UTC] PHP 8. thesis_skin->_template() /Users/roeeyossef/Sites/startapp/wp-content/themes/thesis/lib/core/skin.php:1003
[18-Dec-2017 09:18:08 UTC] PHP 9. thesis_html_body->html() /Users/roeeyossef/Sites/startapp/wp-content/themes/thesis/lib/core/skin.php:1065
[18-Dec-2017 09:18:08 UTC] PHP 10. thesis_box->rotator() /Users/roeeyossef/Sites/startapp/wp-content/themes/thesis/lib/core/skin/boxes.php:604
[18-Dec-2017 09:18:08 UTC] PHP 11. call_user_func_array:{/Users/roeeyossef/Sites/startapp/wp-content/themes/thesis/lib/core/box.php:389}() /Users/roeeyossef/Sites/startapp/wp-content/themes/thesis/lib/core/box.php:389
הנתיבים המוזרים שאתם רואים הם מפאת הפיתוח על סביבת וורדפרס לוקאלית.
This post was translated from a post on deliciousbrains.com
מאמר יפה, טוב שמצאתי אותו. איפה אפשר למצוא הסבר איך פותרים את השגיאות? PHP Notice ו-PHP Warning אלה בעיות שיכולות להפיל אתר?
מאיפה מגיע הקובץ error_log? קיבלתי אתר שהקובץ הזה מגיע למאות MB, זה יכול להפיל את האתר?
היי רוב, ישנן המון סוגי שגיאות… בד״כ כאשר אני נתקל באחת ואיני יודע על מה מדובר אנו פשוט נעזר בגוגל. ברוב המקרים רק PHP Error יפיל את האתר. גודל קובץ ה Log לא ישפיע על האתר…
תודה, הבעיה שאין שגיאות אלא רק מה שכתבתי והקבצים האלה שיש רק בשורש וגם ב-Admin מגיעים לגודל עצום וגם משגעים את mysql ואחרי שאני מוחק אותם האתר חוזר לעבוד.