כל אתר WizzoCMS מגדיר מחלקה בשם CONFIG_USER ב-index.php שלו, ורק אחר כך טוען את הליבה. הליבה מרחיבה אותה במחלקה CONFIG (class CONFIG extends CONFIG_USER), ולכן כל מפתח נקרא בקוד כ-CONFIG::$key. בדף הזה: כל מפתח שהליבה קוראת, מה הסוג שלו, מי משתמש בו ומה קורה כשהוא חסר, וגם שתי המתודות הציבוריות של CONFIG. הדף מציג שמות מפתחות והסבר בלבד, בלי ערכי סודות.
איך ההגדרה נטענת#
הליבה לא מגדירה ברירות מחדל. CONFIG_USER נמצאת באתר ולא בליבה, ולכן "ברירת מחדל" בטבלאות למטה היא תמיד "מוגדר באתר". כך נראה סדר הדברים ב-core.php:
glob(collections/*.php)טוען את כל המחלקות, כוללCONFIG.CONFIG::preinit()מחשבת פרוטוקול, נתיב בסיס ונתיבים מוחלטים לתיקיות.MISC::cli_check()מטפלת בהרצה משורת פקודה (cron).CONFIG::init()מחברת את הפלטפורמה ומחשבת את כתובות האתר והשפה.
null
ב-PHP 8 קריאה למאפיין סטטי שלא הוגדר זורקת Error: Access to undeclared static property, והבקשה נופלת. רק מפתחות שהקוד שומר עליהם ב-isset() או ב-property_exists() אפשר להשמיט (הם מסומנים "אופציונלי" בטבלאות). כל מפתח אחר חייב להיות מוצהר ב-CONFIG_USER, גם עם ערך ריק או false.מפתחות ששייכים לאתר (CONFIG_USER)#
נתיבים ותיקיות#
| מפתח | סוג | ברירת מחדל | מי משתמש בו | אם חסר |
|---|---|---|---|---|
core_path | string | מוגדר באתר | כל ה-require בליבה, core.php, תבניות ניהול, גרסת הליבה (version.txt), מנהל הקבצים | חובה. הבקשה נופלת מיד |
cache_folder | string (יחסי לתיקיית האתר) | מוגדר באתר | cache_engine, מנהל קבצים, ComposerManager, יועץ הביצועים | חובה. preinit() ממירה אותו לנתיב מוחלט |
models_folder | string (יחסי לתיקיית האתר) | מוגדר באתר | MODULE בטעינת מודל (המתודה model()) | חובה. preinit() ממירה אותו לנתיב מוחלט |
מסד נתונים#
| מפתח | סוג | ברירת מחדל | מי משתמש בו | אם חסר |
|---|---|---|---|---|
db_type | string: "PDO", "mysql", "pg" או "clickhouse" | מוגדר באתר | DB::create_connection(), מנהל ה-DB, יועץ הביצועים | חובה. ערך אחר מסיים ב-die("DB ERROR") |
db_host | string | מוגדר באתר | DB::create_connection() | חובה |
db_port | int | MySQL: ברירת המחדל של PDO. ClickHouse: 8123 | DB::create_connection() | אופציונלי (נבדק ב-isset) |
db_dbname | string | מוגדר באתר | DB::create_connection() | חובה |
db_user | string | מוגדר באתר | DB::create_connection() | חובה |
db_password | string | מוגדר באתר | DB::create_connection() | חובה. הערך נשמר רק בקובץ של האתר, לעולם לא בקוד או בתיעוד |
db_prefix | string | מוגדר באתר (בדרך כלל CRM) | CONFIG::init() מחשבת ממנו את db_fullprefix | חובה |
db_protocol | string: "http" או "https" | "http" | רק חיבור clickhouse | אופציונלי (נבדק ב-isset) |
zend_db | אובייקט | לא בשימוש בנתיב רגיל | בנאי ה-select הישן ב-DB.php | נדרש רק בקוד ישן שמשתמש בו |
db_type
החיבור הרגיל הוא "PDO" (MySQL). הענף "mysql" קורא ל-mysql_connect(), פונקציה שהוסרה מ-PHP, ולכן ב-PHP 8.3 הוא לא שמיש. ראו סכימת הטבלאות ו-ה-DB לשימוש בחיבור.ניתוב, ניהול ותבניות#
| מפתח | סוג | ברירת מחדל | מי משתמש בו | אם חסר |
|---|---|---|---|---|
admin_url | string, יחסי וללא / בהתחלה | מוגדר באתר | ROUTER (ביטויים רגולריים של כתובות הניהול), הפניות, כל קישור לניהול (כ-135 מקומות) | חובה. ראו אזהרה למטה |
default_module | string | מוגדר באתר | ROUTER, כשהכתובת ריקה (דף הבית) | חובה |
ignore_domain_check | bool | מוגדר באתר (בדרך כלל false) | PAGE מדלג על בדיקת הדומיין כשהוא true. MISC::cli_check() מציבה true בהרצת cron | חובה: גם הקריאה וגם ההשמה על מפתח לא מוצהר זורקות שגיאה |
use_smarty | true, false או "plain" | מוגדר באתר | FILES בעיבוד תבניות (אפשר לדרוס לכל מודול ב-use_smarty של הגדרות המודול) | חובה |
minify_html | bool | מוגדר באתר | PAGE: ערך false מדלג על כיווץ ה-HTML | חובה (נקרא בלי הגנה) |
show_wizzo_credits | bool | true כשהמפתח חסר | PAGE: ערך false מסיר את תגית ה-copyright | אופציונלי (נבדק ב-property_exists) |
set_base_domain | string | אין | CONFIG::init(): דורס את base_domain | אופציונלי (נבדק ב-isset) |
admin_countries | array או false | false | מסך מדינות הניהול וספריית המדינות (חלופה כשאין קובץ JSON) | אופציונלי (נבדק ב-isset) |
environment | string | ריק | minify: שורת נכס עם environment אחר מ-all נטענת רק כשהיא שווה לערך הזה | אופציונלי (נבדק ב-isset) |
admin_url ללא לוכסן בהתחלה
הערך נכנס ישירות לביטוי רגולרי שמתאים כתובת שכבר נוקתה מ-/ בהתחלה ('/^' . CONFIG::$admin_url . '\/...'), וההפניות בונות site_url . admin_url. לכן "wizzocms" נכון ו-"/wizzocms" לא יתאים לאף כתובת ניהול ויגרום להפניות עם כפל לוכסנים. בתיעוד זה {admin} מציין את הערך הזה.מטמון, קבצים ומדיה#
| מפתח | סוג | ברירת מחדל | מי משתמש בו | אם חסר |
|---|---|---|---|---|
allow_cache | bool | מוגדר באתר | core.php (שמירת עמוד שלם), cache_engine (cache_php_check() ונעילת הבנייה) | חובה. false מבטל את שמירת העמוד השלם ואת בדיקת המטמון ב-PHP. ראו סקירת המטמון |
storage_remote | string: "local", "ftp" או "s3" | מוגדר באתר | core.php (טוען את AWS SDK כשהוא "s3"), STORAGE::add(), STORAGE::get_url() | חובה (נקרא בלי הגנה) |
storage_remote_url | string (כתובת בסיס) | מוגדר באתר | STORAGE: קידומת הכתובת הציבורית כשהאחסון "ftp" | נדרש רק באחסון FTP |
storage_remote_ftp_host | string | מוגדר באתר | STORAGE::FtpClose() ופתיחת חיבור FTP | נדרש רק באחסון FTP |
storage_remote_ftp_username | string | מוגדר באתר | התחברות FTP | נדרש רק באחסון FTP |
storage_remote_ftp_password | string | מוגדר באתר | התחברות FTP | נדרש רק באחסון FTP. סוד, נשמר בקובץ האתר בלבד |
פרטי האחסון המלאים, כולל אישורי S3 שנשמרים ב-MISC::$GLOBALS ולא ב-CONFIG, ב-STORAGE.
דואר#
| מפתח | סוג | ברירת מחדל | מי משתמש בו | אם חסר |
|---|---|---|---|---|
mail_queue | bool | מוגדר באתר | mail_tpl (המתודה send()): true מכניס את ההודעה לתור emails_queue במקום לשלוח מיד | חובה (נקרא בלי הגנה) |
mail_is_smtp | bool | מוגדר באתר | mail_tpl ו-MISC (שליחה ישירה): רק === true מפעיל SMTP | חובה |
mail_smtp_host | string | מוגדר באתר | אותם מקומות, כש-mail_is_smtp === true | נדרש רק עם SMTP |
mail_smtp_auth | bool | מוגדר באתר | אותם מקומות | נדרש רק עם SMTP |
mail_smtp_username | string | מוגדר באתר | אותם מקומות | נדרש רק עם SMTP |
mail_smtp_password | string | מוגדר באתר | אותם מקומות | נדרש רק עם SMTP. סוד, נשמר בקובץ האתר בלבד |
mail_smtp_secure | string: "tls" או "ssl" | מוגדר באתר | אותם מקומות | נדרש רק עם SMTP |
mail_smtp_port | int | מוגדר באתר | אותם מקומות | נדרש רק עם SMTP |
ראו דואר לשליחה ולתור.
מצב הסוואה#
| מפתח | סוג | ברירת מחדל | מי משתמש בו | אם חסר |
|---|---|---|---|---|
mask | array (מפה קידומת אמיתית => מוסוות) או true | כבוי | MASK::map(): ערך true מפעיל מפה ברירת מחדל שמסווה גם את ערכת הנושא הפעילה | אופציונלי (נבדק ב-property_exists). חסר הוא כבוי |
mask_words | array (אמיתי => ניטרלי) | אין | MASK: שינויי שם בכיוון יציאה בלבד למזהים נוספים | אופציונלי (נבדק ב-property_exists) |
ראו מצב הסוואה.
מפתחות נגזרים: אסור להגדיר אותם#
CONFIG מצהירה בעצמה על המאפיינים האלה בלבד, והליבה ממלאת אותם. הגדרה שלהם ב-CONFIG_USER לא תועיל: הערך נדרס ב-preinit() או ב-init().
| מפתח | מי ממלא | משמעות |
|---|---|---|
protocol | preinit() | "https" או "http" |
base_path | preinit() | התיקייה של סקריפט הכניסה (index.php של האתר) |
db_fullprefix | init() | db_prefix . "_", או מחרוזת ריקה כשאין קידומת. משמש בכל שאילתה ב-DB |
platform_data | init() | שורת הפלטפורמה מ-CRM_platforms שמתאימה לדומיין הבקשה |
site_url | init() | כתובת האתר לפי דומיין הפלטפורמה, עם לוכסן בסוף |
original_site_url | init() | כתובת לפי HTTP_HOST של הבקשה עצמה |
env_url | init() | זהה ל-site_url, חוץ מבקשה מדומיין מורשה (allowed_domains) שאז הוא כתובת הדומיין שביקשו |
base_domain | init() | set_base_domain אם הוגדר, אחרת HTTP_HOST |
lang | init() | מזהה הפלטפורמה (platform_data["id"]), ומועתק גם ל-MISC::$GLOBALS["lang"] |
system_type | ROUTER | "client" או "admin" לפי סוג הכתובת שנפתרה |
site_config | (מוצהר, לא בשימוש) | מוצהר ב-CONFIG ואין לו קוראים בליבה |
CONFIG::preinit()#
public static function preinit()
קוראת core.php לפני כל דבר אחר, ללא פרמטרים וללא ערך החזרה.
מה היא עושה, לפי הסדר:
- קובעת את אזור הזמן
Asia/Jerusalemעםdate_default_timezone_set(). - קובעת את
CONFIG::$protocol:"https"בהרצה משורת פקודה, ובבקשת רשת"https"רק כש-$_SERVER["HTTPS"] == "on", אחרת"http". - מחשבת את
CONFIG::$base_pathכתיקייה של סקריפט הכניסה (הקובץ התחתון ב-debug_backtrace()). - ממירה את
models_folderואתcache_folderלנתיבים מוחלטים. ערך שמכיל../עוברrealpath()ביחס ל-base_path, וערך אחר מקבלbase_path . '/'בהתחלה.
הפרוטוקול נקבע רק מ-$_SERVER["HTTPS"]. מאחורי פרוקסי או CDN שמסיים TLS ולא מעביר את המשתנה, CONFIG::$protocol יהיה "http" וכל כתובת שנבנית מ-site_url תהיה http://. הדרך היחידה לתקן היא שהשרת יעביר HTTPS=on ל-PHP.
realpath() על נתיב שלא קיים
אם התיקייה עם ../ לא קיימת, realpath() מחזיר false והמפתח נשאר false. הקוד שקורא לו אחר כך ייכשל. ודאו שהתיקיות קיימות לפני הבקשה הראשונה.CONFIG::init()#
public static function init()
נקראת מ-core.php אחרי MISC::cli_check(), ומ-MISC::cli_check() עצמה בהרצת cron (אחרי שהיא מאפסת את SERVER_NAME ואת HTTP_HOST). אין פרמטרים ואין ערך החזרה.
מה היא עושה, לפי הסדר:
- מחשבת את
db_fullprefixמ-db_prefix. - טוענת את טבלת הפלטפורמות:
cache_engine::get("platforms", fn, 24*30, false), כלומרSELECT * FROM CRM_platformsממופה לפיdomain, ונשמר 720 שעות ($in_platform = false, כי המפתח משותף לכל הפלטפורמות). - בוחרת את
platform_data: שורה שה-domainשלה שווה ל-$_SERVER['SERVER_NAME']. - אם אין התאמה, עוברת על הפלטפורמות ובודקת את
allowed_domains(רשימה שמפורקת עםMISC::bgl_explode) יחד עם ה-domainשל אותה פלטפורמה. התאמה קובעת את הפלטפורמה וגם אתenv_urlלכתובת הדומיין שביקשו. - אם עדיין אין התאמה, לוקחת את השורה הראשונה בטבלה.
- ממלאת את
site_url,original_site_url,base_domain,env_urlו-lang(ראו את טבלת המפתחות הנגזרים).
// אחרי core.php אפשר לקרוא את התוצאה
CONFIG::$site_url; // "https://example.com/"
CONFIG::$platform_data["domain"]; // example.com
CONFIG::$lang; // מזהה הפלטפורמה
בלי אף שורה ב-CRM_platforms אין פלטפורמה לחזור אליה, ו-site_url נבנה בלי דומיין. בנוסף, השורה הראשונה משמשת כברירת מחדל לכל דומיין לא מוכר, כלומר כל כתובת שמצביעה על השרת תקבל את האתר הראשון. לכן הדומיינים המורשים מוגדרים ב-allowed_domains.
שינוי בטבלת CRM_platforms (דומיין חדש, allowed_domains) לא נראה עד שמפתח המטמון platforms נמחק או שחלפו 720 שעות. ראו ממשק המטמון.
דוגמה: CONFIG_USER מינימלי#
הערכים כאן הם מציין מקום. את הערכים האמיתיים מקבלים מהסביבה, ולא שומרים אותם במאגר.
<?php
class CONFIG_USER
{
// נתיבים
static $core_path = __DIR__ . "/system/core";
static $cache_folder = "cache";
static $models_folder = "application/models";
// מסד נתונים
static $db_type = "PDO";
static $db_host = "127.0.0.1";
static $db_dbname = "site_db";
static $db_user = "site_user";
static $db_password = "CHANGE_ME";
static $db_prefix = "CRM";
// ניתוב ותבניות (admin_url יחסי, בלי לוכסן בהתחלה)
static $admin_url = "wizzocms";
static $default_module = "home";
static $ignore_domain_check = false;
static $use_smarty = true;
static $minify_html = true;
// מטמון, אחסון ודואר
static $allow_cache = true;
static $storage_remote = "local";
static $mail_queue = true;
static $mail_is_smtp = false;
}
require __DIR__ . "/system/core/core.php";
הדוגמה כוללת את כל המפתחות שהליבה קוראת בלי הגנה בנתיב בקשה רגיל. מפתחות ה-SMTP, ה-FTP וההסוואה מתווספים רק כשמפעילים את התכונה שלהם.