Files
XC_VM/docs/en/guides/feature-flags.md
T
Divarion_D a453cd9620 docs: fix stale references to the removed prelude files
The prelude shims (Paths/AppConfig/Binaries/ErrorCodes.php) were deleted and the
$rErrorCodes global is gone. Point the developer guides at the new homes:
constants → ConstantsInitializer (paths()/appConfig()/binaries() maps), error
catalogue → ErrorResponder::codes(). Also refresh the now-outdated "refactored
later" note in build/rector.php's skip list.

Only docs/en is edited (docs/ru is regenerated from it before a release);
make docs-build passes.
2026-09-16 18:52:01 +03:00

112 lines
4.2 KiB
Markdown

# Development Feature Flags
XC_VM uses constants and settings-driven flags to control environment behavior.
Application constants are defined by the `appConfig()` map in `src/Core/Config/ConstantsInitializer.php`.
---
## Active Runtime Flag
### `PHP_ERRORS`
```php
define('PHP_ERRORS', $rShowErrors); // derived from $rSettings['debug_show_errors']
```
`PHP_ERRORS` controls PHP/debug verbosity and logger screen output:
```php
Logger::init(PHP_ERRORS, LOGS_TMP_PATH . 'error_log.log');
```
### `DB_ACCESS_ENABLED`
```php
define('DB_ACCESS_ENABLED', false); // enables phpMiniAdmin tab/page in admin panel
```
`DB_ACCESS_ENABLED` controls access to phpMiniAdmin from admin UI only.
It does not block core application database connections. Its companion `DB_ACCESS_PWD`
(also in the `appConfig()` map) sets the password protecting that page — leave it empty to keep the
tab off, set a strong value only while you need it.
### `DEV_MODE`
```php
define('DEV_MODE', false); // master development-mode flag
```
`DEV_MODE` is the compile-time development switch (`bootstrap.php` reads it into `self::$devMode`).
When `true` it forces `PHP_ERRORS` on (verbose on-screen errors), surfaces reCAPTCHA diagnostics,
and enables other developer conveniences.
> ⚠️ **Never enable `DEV_MODE` or `debug_show_errors` on production** — both expose internal
> errors/paths to visitors. `PHP_ERRORS` ends up `true` if **either** the `DEV_MODE` constant is
> set (bootstrap path) **or** the `debug_show_errors` setting is on (request-guard path); that is
> the resolution rule when the two overlap.
---
## Settings-driven Flags (`$rSettings`)
Loaded from settings cache and used in runtime decision points.
| Key | Type | Meaning |
| --- | --- | --- |
| `debug_show_errors` | `bool` | show detailed errors/debug output |
| `recaptcha_enable` | `bool` | enable reCAPTCHA v2 on login |
| `verify_host` | `bool` | enforce host allowlist validation |
| `save_login_logs` | `bool` | persist login attempts in `login_logs` |
| `fanout_supervise` | `bool` | hand live streams to the xc_fanout supervisor instead of a PHP monitor (default on) |
| `fanout_source_backend` | `auto` / `ffmpeg` / `native` | how sources become MPEG-TS; with supervision, whether copy-only streams run the native remuxer (`auto`: with ffmpeg fallback) |
These values are loaded from `CACHE_TMP_PATH/settings` by request guards.
---
## Static App Constants
From the `appConfig()` map in `src/Core/Config/ConstantsInitializer.php` (each entry is
`define()`'d by `ConstantsInitializer::init()`):
```php
'DB_ACCESS_ENABLED' => false,
'DB_ACCESS_PWD' => '', // password for the phpMiniAdmin tab (empty = off)
'DEV_MODE' => false, // master development-mode switch
'XC_VM_VERSION' => '2.4.1', // bumped every release — treat as illustrative
'GIT_OWNER' => 'Vateron-Media',
'GIT_REPO_MAIN' => 'XC_VM',
'GIT_REPO_UPDATE' => 'XC_VM_Update',
'GIT_REPO_BIN' => 'XC_VM_Binaries',
'GIT_REPO_FANOUT' => 'XC_VM_Fanout', // xc_fanout daemon source + binaries
'GIT_REPO_PROXY' => 'XC_VM_Proxy',
'MONITOR_CALLS' => 3,
'OPENSSL_EXTRA' => '...', // literal fallback; the real per-install secret is read
// from the config/openssl_extra file by init()
```
---
## Adding New Flags
Use static constants in the `appConfig()` map (`ConstantsInitializer.php`) for fixed infrastructure/runtime constants (edited in
code, take effect on next request). Use settings (`$rSettings`) for values an operator toggles
from the admin panel (**Settings** page) — those are persisted in the `settings` DB table and
read from `CACHE_TMP_PATH/settings`.
Avoid defining the same behavior in both places. When they unavoidably overlap (as with
`DEV_MODE` vs `debug_show_errors` → `PHP_ERRORS`), the effective value is the **OR** of the two —
either turning it on wins.
---
## Related files
| File | Purpose |
| --- | --- |
| `src/Core/Config/ConstantsInitializer.php` | static app constants (`appConfig()` map) |
| `src/Core/Http/RequestGuard.php` | loads `$rSettings`, sets `PHP_ERRORS` |
| `src/Core/Error/ErrorHandler.php` | uses `debug_show_errors` behavior |
| `src/Core/Logging/Logger.php` | debug/verbosity behavior |