Основная библиотека функций Cotonti. Начало.

Разбираем фрагменты кода по шагам и проанализируем логику, синтаксис и особенности фреймворка Cotonti.

Файл /system/functions.php

Фрагмент начала документа

/**
 * Main function library.
 *
 * @package API - Functions
 * @copyright (c) Cotonti Team
 * @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
 */

use cot\extensions\ExtensionsDictionary;
use cot\extensions\ExtensionsService;
use cot\users\UsersHelper;
use cot\users\UsersRepository;

defined('COT_CODE') or die('Wrong URL');

// System requirements check
if (!defined('COT_INSTALL')) {
    if (
        !function_exists('version_compare') ||
        !version_compare(PHP_VERSION, '7.3', '>=')
    ) {
        die('Cotonti system requirements: PHP 7.3 or above.'); // @todo: Need translate
    }

    if (!extension_loaded('mbstring')) {
        die('Cotonti system requirements: mbstring PHP extension must be loaded.'); // @todo: Need translate
    }
}

// Group constants
const COT_GROUP_DEFAULT = 0;
const COT_GROUP_GUESTS = 1;
const COT_GROUP_INACTIVE = 2;
const COT_GROUP_BANNED = 3;
const COT_GROUP_MEMBERS = 4;
const COT_GROUP_SUPERADMINS = 5;
const COT_GROUP_MODERATORS = 6;

/* ======== Pre-sets ========= */

$out = [
    'basehref' => '',
    'contentType' => '',
    'desc' => '', // Meta description
    'head' => '',
    'keywords' => '', // Meta keywords
    'canonical_uri' => '',
    'subtitle' => '',
];
$sys = [
    'abs_url' => null,
    'baseDir' => null,
    'displayHeader' => true,
    'displayFooter' => true,
    'domain' => null,
    'host' => null,
    'now' => null,
    'parser' => null,
    'port' => null,
    'query' => null, // Request query after the question mark '?'
    'scheme' => null,
    'secure' => null,
    'site_id' => null,
    'site_uri' => null,
    'sublocation' => null, // @todo move to $env?
    'uri' => null, // Request URI relative to $sys['abs_url']
    'uri_curr' => null,
    'uri_redir' => null,
    'url_redirect' => null,
    'xk' => null,

];
$usr = [];
$env = [
    'ext' => null, // extension code
    'location' => null,
    'last_modified' => 0,
    'status' => null, // response status. 200 OK
    'type' => null, // extension type
];
$L = [];
$R = [];

$i = explode(' ', microtime());
$sys['starttime'] = $i[1] + $i[0];

$cfg['version'] = '0.9.26 beta';

// Set default file permissions if not present in config
if (!isset($cfg['file_perms'])) {
    $cfg['file_perms'] = 0664;
}
if (!isset($cfg['dir_perms'])) {
    $cfg['dir_perms'] = 0775;
}

 

Этот фрагмент кода — это часть инициализации фреймворка Cotonti.
Он включает проверку системных требований, настройку глобальных переменных, установку дефолтных значений для прав доступа, а также сбор данных о текущем времени и версии фреймворка.

1. Проверка установки фреймворка:

defined('COT_CODE') or die('Wrong URL');

Это стандартная проверка на безопасность: если константа COT_CODE не определена, скрипт завершает выполнение. Таким образом, фреймворк удостоверяется, что код был вызван правильно, а не напрямую. Это может быть сделано для предотвращения прямого вызова скриптов фреймворка, который может быть уязвимым.


2. Проверка системных требований:

if (!defined('COT_INSTALL')) {
    if (
        !function_exists('version_compare') ||
        !version_compare(PHP_VERSION, '7.3', '>=')
    ) {
        die('Cotonti system requirements: PHP 7.3 or above.');
    }

    if (!extension_loaded('mbstring')) {
        die('Cotonti system requirements: mbstring PHP extension must be loaded.');
    }
}


Этот код проверяет, выполнены ли минимальные требования для работы фреймворка:
PHP 7.3 или выше.
Расширение mbstring должно быть загружено, так как оно используется для работы с многобайтовыми строками (например, для поддержки UTF-8).
Если эти условия не выполняются, выполнение останавливается с соответствующим сообщением.


3. Определение констант групп пользователей:

const COT_GROUP_DEFAULT = 0;
const COT_GROUP_GUESTS = 1;
const COT_GROUP_INACTIVE = 2;
const COT_GROUP_BANNED = 3;
const COT_GROUP_MEMBERS = 4;
const COT_GROUP_SUPERADMINS = 5;
const COT_GROUP_MODERATORS = 6;



Это определение констант для групп пользователей в системе. Каждой группе присваивается числовое значение.
Гости (COT_GROUP_GUESTS) — пользователи, не зарегистрированные или не вошедшие в систему.
Неактивные (COT_GROUP_INACTIVE) — пользователи, чьи аккаунты деактивированы.
Заблокированные (COT_GROUP_BANNED) — пользователи, заблокированные в системе.
Члены (COT_GROUP_MEMBERS) — зарегистрированные пользователи.
Суперадмины (COT_GROUP_SUPERADMINS) — администраторы системы.
Модераторы (COT_GROUP_MODERATORS) — пользователи с правами модератора.


4. Предустановленные массивы:


 

$out = [
    'basehref' => '',
    'contentType' => '',
    'desc' => '', // Meta description
    'head' => '',
    'keywords' => '', // Meta keywords
    'canonical_uri' => '',
    'subtitle' => '',
];


Массив $out используется для хранения различных значений, связанных с выводом данных на страницу. Это могут быть мета-теги, ссылки на ресурсы, заголовки и другие данные, которые используются для формирования контента страницы.

$sys = [
    'abs_url' => null,
    'baseDir' => null,
    'displayHeader' => true,
    'displayFooter' => true,
    'domain' => null,
    'host' => null,
    'now' => null,
    'parser' => null,
    'port' => null,
    'query' => null, // Request query after the question mark '?'
    'scheme' => null,
    'secure' => null,
    'site_id' => null,
    'site_uri' => null,
    'sublocation' => null, // @todo move to $env?
    'uri' => null, // Request URI relative to $sys['abs_url']
    'uri_curr' => null,
    'uri_redir' => null,
    'url_redirect' => null,
    'xk' => null,
];


Массив $sys используется для хранения системных переменных, таких как:
URL сайта (abs_url, domain, scheme, secure).
Параметры запроса и текущий URI (query, uri, uri_curr).
Флаги, отвечающие за отображение элементов страницы, например, заголовка и футера (displayHeader, displayFooter).
Переменная now используется для текущего времени.


 

$usr = [];

Массив $usr предназначен для хранения информации о текущем пользователе. Он может содержать данные, такие как ID пользователя, его имя, права доступа и другие характеристики.


 

$env = [
    'ext' => null, // extension code
    'location' => null,
    'last_modified' => 0,
    'status' => null, // response status. 200 OK
    'type' => null, // extension type
];


Массив $env используется для хранения информации о текущем расширении (если оно используется), его типе и состоянии (например, HTTP статус ответа).

 

$L = [];
$R = [];



Массивы $L и $R — это  массивы для хранения локализации и ресурсов.

Например,

$L  - строки на разных языках, а

$R  - это ресурсные данные (например, изображения или файлы).

 

5. Получение текущего времени:

$i = explode(' ', microtime());
$sys['starttime'] = $i[1] + $i[0];


Здесь используется функция microtime(), которая возвращает текущее время с точностью до микросекунд. Время разбивается на две части (секунды и микросекунды), и они суммируются для получения точного времени запуска приложения.

6. Установка версии фреймворка:

$cfg['version'] = '0.9.xx beta';


Устанавливается версия фреймворка. Это значение используется для отслеживания версии, на которой работает сайт.


7. Права доступа по умолчанию:

if (!isset($cfg['file_perms'])) {
    $cfg['file_perms'] = 0664;
}
if (!isset($cfg['dir_perms'])) {
    $cfg['dir_perms'] = 0775;
}


Здесь проверяется, если в конфигурации фреймворка не заданы права доступа для файлов и каталогов, то они устанавливаются по умолчанию:

Для файлов — 0664.
Для каталогов — 0775.

 

Особенности синтаксиса и логики


Использование глобальных массивов:

Во фреймворке Cotonti много глобальных массивов ($cfg, $sys, $usr, $env, $out, $L и т. д.), которые хранят важную информацию, связанную с системой, пользователями, конфигурацией и выводом. Это типично для фреймворков, где глобальные данные доступны в любой точке приложения.
Проверки на ошибки и условия: В коде есть несколько проверок на системные требования, что повышает устойчивость системы.
Масштабируемость и расширяемость: Присутствуют массивы для настроек и расширений, которые можно легко изменить или дополнить при необходимости.
 

6 minutes read Administrator

Comments (0)

No comments yet
Only registered users can post new comments

Content author

Administrator

Offline

Administrator

Last logged: 2026-07-21 00:03

  • Page published: 2025-01-21 12:40
  • Last update: 2025-01-21 12:48

Similar pages

Библиотека функций Cotlib для Cotonti Siena
1 Плагин не имеет настроек и установочных зависимостей, и должен быть инсталлирован до установки следующих
Комментарии для сайта и спам как основная проблема
2 Комментарии для сайта – это один из способов повышения вовлеченности посетителя и, как следствие, продвижения вашего
Как создавать видеокурсы и продавать онлайн (начало)
3 Спрос на обучающее видео продолжает расти, и ни для кого не секрет, что рынок онлайн-курсов огромен. Мировой рынок
User Blog • 2024-01-20 03:28 webitproff
Список функций, удаляемых из Google Assistant в 2024 году
4 Google меняет Google Assistant, удаляя и изменяя десятки функций, к которым некоторые из вас, возможно, привыкли.
User Blog • 2024-01-17 11:14 webitproff
Функции в PHP. Определение и вызов функций
5 Функция – это блок кода, который можно многократно вызывать.Пример функции:function sayHello() { echo "Привет,