ניקוי ותחזוקה

איך מנקים מטמון ב-WIZZO CMS: הפאנל clear_cache, ניקוי אחרי פריסה דרך delete_cache, משימת ה-cron שמוחקת קבצים שפג תוקפם, דחיסה של קבצים קיימים וניקוי Smarty.

⏱ 4 דק' קריאה 763 מילים ערוך דף זה ב-GitHub

מטמון שלא מתנקה מראה לכם גרסה ישנה של האתר, ומטמון שלא נמחק פיזית ממלא דיסק. הדף עובר על שלוש הדרכים לנהל אותו: הפאנל clear_cache, נקודת הקצה שמשמשת אחרי פריסה, ומשימת ה-cron היומית.

בעמוד הזה system/ הוא תיקיית הליבה הפרוסה (= api/core בריפו) ו-{admin} הוא CONFIG::$admin_url של האתר.

הפאנל clear_cache#

הפאנל {admin}/clear_cache (קובץ api/core/admin/clear_cache.php) מציג כמה קבצים יש בכל סוג מטמון, ומאפשר לנקות. הפעולות שהוא חושף:

פעולהמה היא עושה
index, index_dataהמסך הראשי וספירת הקבצים לכל סוג
remove_pageביטול עמוד אחד או תיקייה שלמה (POST: kind = file או folder, ו-name). נתיבים עם .. או / נדחים
remove_all_pagesמוחק את כל עמודי הדומיין הנוכחי (דסקטופ וטלפון)
remove_all_items, remove_itemמוחק Items (הכול, או לפי שם)
remove_all_data, remove_dataמוחק קבצי נתונים (.chc) משורש המטמון ומתיקיית הדומיין (הכול, או לפי שם)
search, search_removeחיפוש קבצי מטמון לפי שם ומחיקה של התוצאות
clearמוחק את כל תיקיית cache, כל הדומיינים
fix_cacheמסיר קבצי .chc שפג תוקפם
get_statsספירה: עמודים, עמודי טלפון, Items, נתונים, סך הכול
cleanup_expiredPOST: type (all, pages, items) ו-dry_run (true להדמיה). מחזיר JSON עם התוצאה
compress_cachePOST: type ו-dry_run. דוחס קבצים קיימים ל-gzip
get_settingsמחזיר את compress_pages ו-compress_data
clear_smarty, get_smarty_statsמנקה ומציג תבניות Smarty מקומפלות (cache/Smarty/templates_c)

רוב הפעולות מחזירות JSON בצורה {"success": true, "deleted": N, "freed_mb": X}.

clear מוחק לכל הדומיינים

הפעולה clear מרוקנת את cache/ כולה, כולל תיקיות של דומיינים אחרים בהתקנה, ואת מטמוני הנתונים הגלובליים (platforms, params, table_list). האתר ייבנה מחדש מאפס, והעומס על המסד יעלה זמנית. באתר עמוס מעדיפים cleanup_expired או ביטול של עמודים ספציפיים.

ניקוי אחרי פריסה#

אחרי העלאת קוד, השינוי לא תמיד נראה מיד. קוד PHP טרי נקרא מיד, אבל עמוד שכבר נשמר מוגש כמו שהיה עד שפג או שמבטלים אותו. הנקודה הרגילה לניקוי היא system/Tools/delete_cache (POST עם url), שמוגנת לאדמין בלבד (אחרת מוחזר false). היא עושה:

  1. מעלה ב-1 את attaches_version ב-CRM_params, כך שכתובות JS ו-CSS (?ver=) מתחדשות בדפדפנים.
  2. קוראת ל-ping_cache לכתובת שנשלחה (ולגרסה בלי ?), שבונה אותה מחדש.
  3. מוחקת את מטמוני הנתונים הגלובליים params, platforms ו-table_list.
  4. מפעילה את האירוע PAGE::trigger('delete.cache'), שאפשר להאזין לו מקוד האתר.
  5. מדפיסה true.
הקריאה לא מוחקת קבצי עמודים

השורה cache_all_page_remove בתוך delete_cache מושבתת בהערה. העמוד נבנה מחדש דרך ping_cache, ולא נמחק. עמודים אחרים נשארים עד שיפוג תוקפם. לכן אם שיניתם תבנית שמשפיעה על כל האתר, השתמשו ב-remove_all_pages של הפאנל.

בצד הלקוח, api/js/MISC.js שולח אליה בקשה כשמנהל מחובר לוחץ Ctrl+Shift+(מקש הגרש ההפוך) בעמוד הציבורי: זה מנקה גם אתlocalStorageשל הדפדפן ובונה את העמוד הנוכחי מחדש. גםagent_mcp.php` חושף פעולה מקבילה.

הניקוי היומי: cache_cleanup#

קובץ שפג תוקפו אינו נמחק מיד: הוא נשאר $gc_grace_hours (48 שעות) כדי לשמש כעמוד ישן בזמן בנייה. מחיקה פיזית נעשית על ידי הבקר system/cache_cleanup/run, שקורא ל-cache_engine::cleanup_expired($type, false).

  • נרשם ב-CRM_cron_tasks בקטגוריית המערכת (category_id=1) עם url = system/cache_cleanup/run ו-crontime = "0 4 * * *", כלומר כל לילה ב-4:00. המשימה מסונכרנת מהשרת הראשי בכל עדכון גרסה (משימות מתוזמנות).
  • פרמטר אופציונלי ?type=all|pages|items (ברירת מחדל all).
  • הפלט נקלט בלוג המשימה: OK type=all deleted=123 freed_mb=45.6, או ERROR: ... / SKIP: ....

מה כל type מנקה:

typeהתיקיות
pagespages ו-pages_mobile של הדומיין
itemscache/items
allcache/items וגם תיקיית הדומיין (עמודים, scss, minify, וקבצי הנתונים שלה)

הניקוי מוגן: הוא פועל רק בתוך שורש המטמון, לעולם לא על השורש עצמו, ומוודא שהדומיין תקין. כשיש find של GNU הוא משתמש בו, אחרת עובר על הקבצים ב-PHP.

הרצה ידנית להדמיה, מקוד או מכלי בשרת:

$res = cache_engine::cleanup_expired('all', true);   // dry run
// ['deleted' => 120, 'freed_bytes' => ..., 'freed_mb' => 18.4, 'freed_gb' => 0.02, 'dry_run' => true]

דחיסת קבצים קיימים#

אם הפעלתם דחיסה אחרי שכבר יש מטמון גדול, compress_existing_cache($dry_run, $type) (או compress_cache בפאנל) ממירה את הקבצים הקיימים ל-gzip וחוסכת בדרך כלל 70-85 אחוזים בעמודים. הרצה ראשונה מומלצת ב-dry_run.

בדיקה מהירה כשהשינוי לא מופיע#

בדקואיך
העמוד עדיין ישןבטלו אותו בפאנל, או cache_all_page_remove($url) ואז cache_all_page_update($url)
קובץ JS או CSS ישן בדפדפןהעלו את attaches_version (ניקוי דרך delete_cache עושה זאת)
פרמטר או שורה חדשה ב-CRM_params לא נראיםמחקו את params (עד 30 יום במטמון)
דומיין חדש לא מזוההמחקו את platforms
טבלה חדשה לא מזוההמחקו את table_list
cache_engine::remove("params");
cache_engine::remove("platforms");
cache_engine::remove("table_list");

ראו גם#

מצאתם טעות או חוסר? תקנו את הדף או פתחו Issue בריפו. התיעוד נכתב מתוך הקוד של ליבה 5.0.115.