| @copyright 2007-2026 (c) AVE.cms | @link https://ave-cms.ru | @version 3.3 */ define('AVE_SETUP', true); define('BASE_PATH', str_replace('\\', '/', dirname(__DIR__))); @ini_set('display_errors', '0'); @ini_set('default_charset', 'UTF-8'); $setupSessionError = ''; $setupSessionPath = BASE_PATH . '/tmp/sessions'; if (!is_dir($setupSessionPath) && !@mkdir($setupSessionPath, 0775, true)) { $setupSessionError = 'Не удалось создать каталог tmp/sessions для сессии установщика.'; } elseif (!is_writable($setupSessionPath)) { $setupSessionError = 'Каталог tmp/sessions недоступен для записи.'; } if ($setupSessionError === '') { @ini_set('session.save_handler', 'files'); if (strtolower((string) ini_get('session.save_handler')) === 'files') { @session_save_path($setupSessionPath); } } @ini_set('session.use_cookies', '1'); @ini_set('session.use_only_cookies', '1'); @ini_set('session.use_strict_mode', '1'); @ini_set('session.cookie_httponly', '1'); @ini_set('session.cookie_samesite', 'Lax'); $setupScriptDirectory = rtrim(str_replace('\\', '/', dirname(isset($_SERVER['SCRIPT_NAME']) ? $_SERVER['SCRIPT_NAME'] : '/setup/index.php')), '/'); $setupCookiePath = preg_replace('#/setup$#', '', $setupScriptDirectory) . '/'; $setupCookiePath = $setupCookiePath === '//' ? '/' : $setupCookiePath; $setupCookieSecure = (!empty($_SERVER['HTTPS']) && strtolower((string) $_SERVER['HTTPS']) !== 'off') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower((string) $_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https'); session_set_cookie_params(array( 'lifetime' => 0, 'path' => $setupCookiePath, 'domain' => '', 'secure' => $setupCookieSecure, 'httponly' => true, 'samesite' => 'Lax', )); session_name('AVE_SETUP'); if (!@session_start() && $setupSessionError === '') { $setupSessionError = 'Не удалось запустить сессию установщика в tmp/sessions. Проверьте права на каталог tmp.'; } header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0'); header('Pragma: no-cache'); header('Expires: 0'); if (empty($_SESSION['setup_csrf'])) { $_SESSION['setup_csrf'] = bin2hex(random_bytes(32)); } require_once __DIR__ . '/Localization.php'; $requestedSetupLanguage = isset($_POST['setup_language']) ? (string) $_POST['setup_language'] : (isset($_GET['lang']) ? (string) $_GET['lang'] : ''); AveSetupLocale::boot($requestedSetupLanguage); $setupLanguage = AveSetupLocale::current(); require_once __DIR__ . '/PackageExtractor.php'; $packageExtractor = new AvePackageExtractor(BASE_PATH); if ($packageExtractor->available()) { $base = rtrim(str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME'])), '/'); if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['extract_runtime'])) { header('Content-Type: application/json; charset=UTF-8'); try { $token = isset($_POST['_csrf']) ? (string) $_POST['_csrf'] : ''; if (!hash_equals((string) $_SESSION['setup_csrf'], $token)) { throw new RuntimeException('Сессия распаковки устарела. Обновите страницу.'); } echo json_encode( AveSetupLocale::translatePayload($packageExtractor->step()), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ); } catch (Throwable $e) { http_response_code(422); echo json_encode( array('success' => false, 'message' => AveSetupLocale::translate($e->getMessage())), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ); } exit; } $css = __DIR__ . '/assets/installer.css'; $js = __DIR__ . '/assets/installer.js'; $escape = function ($value) { return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8'); }; ob_start(); ?> Подготовка AVE.cms
AVE.cms
Подготовка системы

Компактная поставка

Распаковываем AVE.cms

Проверяем архив и готовим файлы системы. Не закрывайте эту страницу.

Подготовка проверки0%
officialRepositoryProfile(); $release = is_file(BASE_PATH . '/system/release.php') ? require BASE_PATH . '/system/release.php' : array(); $releaseVersion = isset($release['version']) ? (string) $release['version'] : '3.3'; $releaseBuild = isset($release['build']) ? (string) $release['build'] : '0.20'; $adminPasswordMinLength = AveInstaller::ADMIN_PASSWORD_MIN_LENGTH; $requirements = $installer->requirements(); if ($setupSessionError !== '') { array_unshift($requirements, array( 'label' => 'Сессия установщика', 'passed' => false, 'detail' => $setupSessionError, 'required' => true, )); } $requirementsPassed = $installer->requirementsPassed($requirements); $state = $installer->installationState(); $existingConfig = $installer->existingDatabaseConfig(); $adminDirectory = $installer->configuredAdminDirectory(); $error = ''; $success = null; $base = rtrim(str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME'])), '/'); $rootUrl = preg_replace('#/setup$#', '', $base); $progressRequest = $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_SERVER['HTTP_X_SETUP_PROGRESS']) && $_SERVER['HTTP_X_SETUP_PROGRESS'] === '1'; $emitProgress = function (array $payload) use ($progressRequest) { if (!$progressRequest) { return; } echo json_encode( AveSetupLocale::translatePayload($payload), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) . "\n"; @ob_flush(); flush(); }; if ($progressRequest) { header('Content-Type: application/x-ndjson; charset=UTF-8'); header('Cache-Control: no-cache, no-store, must-revalidate'); header('X-Accel-Buffering: no'); @ini_set('output_buffering', '0'); @ini_set('zlib.output_compression', '0'); while (ob_get_level() > 0) { @ob_end_flush(); } ob_implicit_flush(true); } $defaults = array( 'dbhost' => $existingConfig && isset($existingConfig['dbhost']) ? $existingConfig['dbhost'] : '127.0.0.1', 'dbport' => $existingConfig && isset($existingConfig['dbport']) && $existingConfig['dbport'] ? $existingConfig['dbport'] : '3306', 'dbname' => $existingConfig && isset($existingConfig['dbname']) ? $existingConfig['dbname'] : '', 'dbuser' => $existingConfig && isset($existingConfig['dbuser']) ? $existingConfig['dbuser'] : '', 'dbpref' => $existingConfig && isset($existingConfig['dbpref']) ? $existingConfig['dbpref'] : 'ave', 'site_name' => AveSetupLocale::translate('Новый сайт на AVE.cms'), 'admin_name' => AveSetupLocale::translate('Администратор'), 'admin_login' => 'admin', 'admin_email' => '', 'admin_directory' => 'adminx', ); $resetPrefixRequested = $_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['reset_prefix']); $resetPrefixConfirmation = $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['reset_prefix_confirmation']) ? (string) $_POST['reset_prefix_confirmation'] : ''; $repositoryMode = $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['repository_mode']) ? strtolower(trim((string) $_POST['repository_mode'])) : (!empty($officialRepository['available']) ? 'official' : 'disabled'); $customRepositoryProfile = $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['repository_profile']) ? (string) $_POST['repository_profile'] : ''; if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($state['installed'])) { try { if ($setupSessionError !== '') { throw new RuntimeException($setupSessionError); } $token = isset($_POST['_csrf']) ? (string) $_POST['_csrf'] : ''; if (!hash_equals((string) $_SESSION['setup_csrf'], $token)) { throw new RuntimeException('Сессия установки устарела. Обновите страницу.'); } if (!$requirementsPassed) { throw new RuntimeException('Сначала устраните обязательные ошибки окружения.'); } $database = $existingConfig ?: array( 'dbhost' => isset($_POST['dbhost']) ? $_POST['dbhost'] : '', 'dbport' => isset($_POST['dbport']) ? $_POST['dbport'] : 3306, 'dbname' => isset($_POST['dbname']) ? $_POST['dbname'] : '', 'dbuser' => isset($_POST['dbuser']) ? $_POST['dbuser'] : '', 'dbpass' => isset($_POST['dbpass']) ? $_POST['dbpass'] : '', 'dbpref' => isset($_POST['dbpref']) ? $_POST['dbpref'] : 'ave', ); $site = array( 'site_name' => isset($_POST['site_name']) ? $_POST['site_name'] : '', 'admin_name' => isset($_POST['admin_name']) ? $_POST['admin_name'] : '', 'admin_login' => isset($_POST['admin_login']) ? $_POST['admin_login'] : '', 'admin_email' => isset($_POST['admin_email']) ? $_POST['admin_email'] : '', 'admin_password' => isset($_POST['admin_password']) ? $_POST['admin_password'] : '', 'admin_directory' => isset($_POST['admin_directory']) ? $_POST['admin_directory'] : 'adminx', 'admin_language' => $setupLanguage, ); $repositories = $installer->validateRepositorySelection($repositoryMode, $customRepositoryProfile); $success = $installer->install($database, $site, array( 'reset_prefix' => $resetPrefixRequested, 'reset_prefix_confirmation' => $resetPrefixConfirmation, 'repositories' => $repositories, 'progress' => function (array $progress) use ($emitProgress) { $progress['type'] = 'progress'; $emitProgress($progress); }, )); $_SESSION['setup_csrf'] = bin2hex(random_bytes(32)); $adminDirectory = isset($success['admin_directory']) ? $success['admin_directory'] : 'adminx'; $defaults = array_merge($defaults, array_intersect_key($site, $defaults)); if ($progressRequest) { $emitProgress(array( 'type' => 'complete', 'summary' => $success, 'admin_url' => $rootUrl . '/' . rawurlencode($adminDirectory) . '/login', 'site_url' => $rootUrl . '/', )); exit; } } catch (Throwable $e) { $error = $e->getMessage(); if ($progressRequest) { $emitProgress(array('type' => 'error', 'message' => $error)); exit; } foreach ($defaults as $key => $value) { if (isset($_POST[$key])) { $defaults[$key] = (string) $_POST[$key]; } } } } function setup_escape($value) { return htmlspecialchars((string) $value, ENT_QUOTES, 'UTF-8'); } function setup_asset_version($path) { $hash = is_file($path) ? hash_file('sha256', $path) : false; return $hash ? substr($hash, 0, 12) : 'missing'; } $installerCssVersion = setup_asset_version(__DIR__ . '/assets/installer.css'); $installerJsVersion = setup_asset_version(__DIR__ . '/assets/installer.js'); ob_start(); ?> Установка AVE.cms
AVE.cms
AVE.cms build

Система настроена

Установщик заблокирован

Для повторной установки удалите локальные configs/db.config.php и storage/installed.lock. После этого можно выбрать свободный префикс либо очистить таблицы прежнего префикса в форме.

Готово

AVE.cms установлена

Создано системных таблиц, один администратор, стартовая страница и служебная страница 404. Установленных модулей: .

1 шаблон1 рубрика2 поля2 документа

Чистая установка

Базовая система без модулей

Установщик создаст только ядро AVE.cms, первого администратора и минимальную публичную страницу. Товары, заказы, оплаты, формы, RSS и остальные пакеты останутся доступными для отдельной установки.

Установка остановлена
1

Окружение

Обязательные компоненты и права записи

2

База данных

Пустой префикс в существующей или новой базе

Подключение уже подготовлено / / префикс
>
Данные префикса будут удалены безвозвратно

В базе останутся все таблицы и представления, имена которых не начинаются с выбранного префикса.

3

Сайт и администратор

Единственная учётная запись новой системы

4

Обновления и каталог модулей

Источник можно изменить после установки; автоматическая установка выключена

>
Модули не устанавливаютсяПакеты останутся в состоянии «Доступен».