קובץ wp-content/debug.log שתופס עשרות מגה-בייט אינו רק עניין של מקום בדיסק. הוא סימן כמעט ודאי לכך שהאתר זורק שגיאת PHP מאות או אלפי פעמים בדקה - כל אחת מהן עולה זמן עיבוד, מאטה תגובת הדף ומסתירה אזהרות אמיתיות בים של רעש.
למה זה משנה
כל שגיאה ש-PHP זורק - אפילו Notice קל - דורשת מהשרת לבנות stack trace, להמיר ל-string ולכתוב לדיסק. בלוג שמתמלא במהירות זה מתחיל לעלות במונחי I/O. ראינו אתרים שעושים פעמיים יותר עבודת disk רק כדי לכתוב Deprecated warnings על קוד שלא משפיע על כלום. בנוסף, debug.log גדול מקשה מאוד על debugging אמיתי - כשמופיע משהו רציני, הוא קבור תחת אלפי שורות חוזרות. ולבסוף, חלק מתוספי האבטחה והגיבוי כוללים את הקובץ בגיבויים - וגיבוי של 200MB log הוא בזבוז רוחב פס.
הסיבה הנפוצה לתופעה: תוסף או תבנית ישנה עם syntax לא תואם הגרסת PHP החדשה. ב-PHP 8.1 ובעיקר 8.2, הרבה תכונות שהיו Deprecated בעבר נהפכו ל-Warning או Fatal: Creation of dynamic property, passing null to non-nullable parameter, ועוד. תוספים שלא עודכנו לתאימות PHP 8 ימלאו את הלוג מבלי לשבור את האתר ויזואלית.
איך לזהות
פתח את wp-content/debug.log דרך FTP, File Manager של ספק האחסון, או SSH. הסתכל על השגיאות - לרוב יש דפוס: אותה שגיאה חוזרת מאות פעמים. שורת השגיאה מכילה נתיב מלא:
PHP Deprecated: Creation of dynamic property in /home/user/public_html/wp-content/plugins/old-plugin/lib/foo.php on line 42הנתיב /wp-content/plugins/old-plugin/ מזהה את התוסף האשם. אפשר גם להריץ:
grep -oE "plugins/[^/]+" wp-content/debug.log | sort | uniq -c | sort -rn | headזה מציג את התוספים שהכי מופיעים בלוג, ממוין לפי שכיחות.
איך לתקן
- זהה את התוסף או התבנית הראשית שמייצרת את השגיאות (ראה למעלה).
- אם יש עדכון לתוסף - עדכן. רוב הסיכויים שהמפתח כבר תיקן את התאימות.
- אם התוסף לא מתוחזק (עדכון אחרון לפני שנתיים+) - מצא חלופה ובצע migration. תוסף לא מתוחזק הוא גם סיכון אבטחתי.
- אם זו תבנית מסחרית, גש לאזור התמיכה של המפתח ובקש עדכון. עד אז, צור תבנית ילד והעתק את הקבצים הבעייתיים אליה כדי לתקן ידנית בלי לאבד שינויים בעדכון הבא.
- אחרי תיקון, רוקן את הלוג:
echo "" > wp-content/debug.logאו דרך FTP מחק והעלה קובץ ריק. - בייצור, עדיף לכבות לוג שגיאות לחלוטין: ב-
wp-config.phpהגדרWP_DEBUG_LOGל-falseו-WP_DEBUG_DISPLAYל-false. הפעל debug רק בעת חקר תקלה.
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );
define( 'WP_DEBUG_DISPLAY', false );טעויות נפוצות
- השארת WP_DEBUG פעיל בייצור: זה כותב כל warning קטנה לדיסק תמיד. הפעל debug רק כשבעצם מנסים לתפוס באג.
- מחיקת debug.log בלי לתקן את הסיבה: הקובץ ימולא שוב בעוד יום. תקן את המקור.
- השתקה גורפת של שגיאות בקוד: הוספת
error_reporting(0)ב-functions.phpמסתירה הכל - כולל באגים אמיתיים. עדיף לסנן רק רמות מסוימות:error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);. - WP_DEBUG_DISPLAY=true בפרודקשן: זה גם מציג שגיאות לכל גולש - וקטור חשיפה של נתיבי שרת ופרטי DB.
בדיקה לאחר תיקון
אחרי ניקוי, השאר WP_DEBUG פעיל למשך יום אחד וצפה אם הקובץ מתחיל למלא שוב. אם נשאר ריק או כמעט ריק - תיקנת. אם חוזר תוך שעה - חזור לשלב הזיהוי, יש מקור נוסף שלא מצאת. ב-RankPlus הסטטוס ייהפך לירוק בסריקה הבאה.