На февраль 2026 года ситуация с PHP-версиями выглядит так:
- PHP 8.5 (выпущен 20 ноября 2025) — текущая стабильная версия с активной поддержкой до 31 декабря 2027 (bug fixes + security) и security-only до 31 декабря 2029. Уже вышла 8.5.3 (февраль 2026). Это самая свежая ветка с новыми фичами (pipe operator, clone with, URI extension и т.д.), но и с наибольшим количеством deprecation'ов, которые в PHP 9.0 станут breaking changes.
- PHP 8.4 (ноябрь 2024) — активная поддержка до 31 декабря 2026, security до 31 декабря 2028. Полностью зрелая, стабильная, меньше новых deprecation'ов по сравнению с 8.5. Многие хостинги уже делают её дефолтом.
- PHP 8.3 — active support закончился 31 декабря 2025, сейчас только security до 31 декабря 2027. Уже не рекомендуется для новых/обновляемых проектов.
- PHP 7.3 (и ниже) — давно EOL (2019–2021), без security-патчей с 2021 года. Использование — прямой риск уязвимостей, эксплойтов и несовместимости с современными библиотеками/хостингами.
рекомендация на 2026 год:
Оставаться на PHP 8.4 — оптимальный баланс сейчас (февраль 2026). Это зрелая версия с долгой security-поддержкой (ещё почти 3 года), минимальными рисками новых багов и меньшим объёмом правок по сравнению с прыжком сразу на 8.5. Deprecation'ы в 8.4 уже знакомы и легко фиксятся (как мы чинили PDO и array_key_exists в Cotonti).
Уже сейчас для миграции на PHP 8.5 вы можете использовать последнюю версию Open Server 6.5.0 - Первый запуск. Руководство пользователя.
Переходить на PHP 8.5 стоит, если:
- проект активно развивается и вы готовы потратить время на тесты/фиксы deprecation'ов (динамические свойства, nullable в функциях, новые strictness);
- нужны свежие фичи (pipe |> и т.д.);
- хостинг уже дефолтит 8.5 или вы планируете долгосрочный roadmap до 2029+.
С 7.3 подниматься выше обязательно — это критично для безопасности. 7.3 уязвим к десяткам CVE без патчей. Минимально — на 8.4, идеально — на 8.4 → 8.5 после тестов.
План действий:
- Тестируйте на staging → 8.4 (если ещё не там).
- Фиксите deprecation'ы (как это делается в этой теме или пишите разработчикам Cotonti).
- Через 6–12 месяцев (когда 8.5 наберёт патчи) — переход на 8.5.
Оставаться на 8.4 в 2026 — разумно и безопасно.
Прыгать на 8.5 — прогрессивно, но требует рук.
С 7.x — немедленно уходить, иначе рискуете сайтом и не только (утечка данных)
И так начинаем! Фиксим, сообщаем об ошибкахи обновляем вместе!
PHP 8.5+ уже на большинстве хостингов, а Cotonti (как и многие другие PHP-движки) выдаёт deprecation warning'ы.
Через год-два эти предупреждения превратятся в fatal ошибки под PHP 9.0.
Сейчас самое время подчистить код минимальными правками:
убрать устаревшие константы, проверки null в array_key_exists и динамические свойства — чтобы сайт жил дальше без @ и error_reporting(0).
Вот два самых первых момента при запуске сайта на PHP 8.5
Deprecated
: Constant PDO::MYSQL_ATTR_INIT_COMMAND is deprecated since 8.5, use Pdo\Mysql::ATTR_INIT_COMMAND instead in
D:\OSPanel_650\home\cotonti.local\public_html\system\database.php
on line
181
Warning
: Cannot modify header information - headers already sent by
(output started at D:\OSPanel_650\home\cotonti.local\public_html\system\database.php:181) in
D:\OSPanel_650\home\cotonti.local\public_html\system\header.php
on line
114
Deprecated: Using null as the key parameter for array_key_exists() is deprecated,
use an empty string instead in D:\OSPanel_650\home\cotonti.local\public_html\system\functions.php on line 2752\system\database.php строка 182
находим блок
if (!empty($this->config['charset'])) {
$collation_query = "SET NAMES '{$this->config['charset']}'";
if (!empty($this->config['collate'])) {
$collation_query .= " COLLATE '{$this->config['collate']}'";
}
$this->config['options'][PDO::MYSQL_ATTR_INIT_COMMAND] = $collation_query;
}заменить на
if (!empty($this->config['charset'])) {
$collation_query = "SET NAMES '{$this->config['charset']}'";
if (!empty($this->config['collate'])) {
$collation_query .= " COLLATE '{$this->config['collate']}'";
}
if (defined('\Pdo\Mysql::ATTR_INIT_COMMAND')) {
$this->config['options'][\Pdo\Mysql::ATTR_INIT_COMMAND] = $collation_query;
} else {
$this->config['options'][PDO::MYSQL_ATTR_INIT_COMMAND] = $collation_query; // для старых версий PHP
}
}\system\functions.php строка 2752
найти
// Trim units after $smallestunit
if (array_key_exists($smallestunit, $units))
{
$offset = array_search($smallestunit, array_keys($units));
$units = array_slice($units, 0, $offset+1, true);
}заменить на
// Trim units after $smallestunit
// if (array_key_exists($smallestunit, $units))
if ($smallestunit !== null && array_key_exists($smallestunit, $units))
{
$offset = array_search($smallestunit, array_keys($units));
$units = array_slice($units, 0, $offset+1, true);
}