מטמון שלא מתנקה מראה לכם גרסה ישנה של האתר, ומטמון שלא נמחק פיזית ממלא דיסק. הדף עובר על שלוש הדרכים לנהל אותו: הפאנל 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_expired | POST: type (all, pages, items) ו-dry_run (true להדמיה). מחזיר JSON עם התוצאה |
compress_cache | POST: 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 מרוקנת את cache/ כולה, כולל תיקיות של דומיינים אחרים בהתקנה, ואת מטמוני הנתונים הגלובליים (platforms, params, table_list). האתר ייבנה מחדש מאפס, והעומס על המסד יעלה זמנית. באתר עמוס מעדיפים cleanup_expired או ביטול של עמודים ספציפיים.
ניקוי אחרי פריסה#
אחרי העלאת קוד, השינוי לא תמיד נראה מיד. קוד PHP טרי נקרא מיד, אבל עמוד שכבר נשמר מוגש כמו שהיה עד שפג או שמבטלים אותו. הנקודה הרגילה לניקוי היא system/Tools/delete_cache (POST עם url), שמוגנת לאדמין בלבד (אחרת מוחזר false). היא עושה:
- מעלה ב-1 את
attaches_versionב-CRM_params, כך שכתובות JS ו-CSS (?ver=) מתחדשות בדפדפנים. - קוראת ל-
ping_cacheלכתובת שנשלחה (ולגרסה בלי?), שבונה אותה מחדש. - מוחקת את מטמוני הנתונים הגלובליים
params,platformsו-table_list. - מפעילה את האירוע
PAGE::trigger('delete.cache'), שאפשר להאזין לו מקוד האתר. - מדפיסה
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 | התיקיות |
|---|---|
pages | pages ו-pages_mobile של הדומיין |
items | cache/items |
all | cache/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");