Категории форума

PHP 8.5 и Cotonti. Рефакторим и обновляем код движка.

Обсуждение проблем совместимости CMF Cotonti c PHP 8.5. Примеры решения проблем. Отчеты пользователей для разработчиков о выявленных ошибках при переходе с php 8.4


webitproff
webitproff • 28.02.2026 00:46 #1

На февраль 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 после тестов.

План действий:

  1. Тестируйте на staging → 8.4 (если ещё не там).
  2. Фиксите deprecation'ы (как это делается в этой теме или пишите разработчикам Cotonti).
  3. Через 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);
}

 

Отредактировано: webitproff (05.07.2026 15:41, 1 неделя назад)
1/1/0

webitproff
webitproff • 22.03.2026 17:45 #2

Cotonti Compatibility with PHP 8.5

Сегодня, Алексей поправил, будем ждать уже релиза 👍️ 

losdriver
losdriver • 09.05.2026 14:11 #3

#500 webitproff: 
 

Cotonti Compatibility with PHP 8.5

Сегодня, Алексей поправил, будем ждать уже релиза 👍️ 

Релиз вышел, - теперь называется “Verona”, и уже вроде как точно работает на php 8.5, но я еще не обновлялся, потому что у меня и на хостинге потолок сейчас php 8.4. но дело не в этом, вопрос в другом - это же и плагины нужно будет рефакторить если перейти на “Верону”? и еще такой вопрос, что у них там с форумом на официальном сайте, ни хочу никого обидеть, но какие-то три калеки из активных пользователей. новостей нет и обновлений плагинов нет. куда лучше писать и стучаться?

webitproff
webitproff • 09.05.2026 14:23 #4

#553 losdriver: 
… новостей нет и обновлений плагинов нет. куда лучше писать и стучаться?

Что там с форумом да и с сайтом, - это во первых отдельная тема, а во-вторых, - мне дела нет. Меня там забанили, и это мне сыграло на руку - пусть пасутся в своем княжестве из двух верноподданых. Все разработчики, кто при памяти, давно сами ушли из “сообщества” которое по сути и не сообщество, а княжество “мы всия руси” или таких разработчиков побанили, потому что проявляли инициативу и энтузиазм, а изменения в княжестве не приемлемы. Кроме Лёхи Кальнова, который сам тянет разработку там и разработчиков больше не осталось, остались князья, мнящие себя разработчиками, которым администраторство осталось случайно и по-наследству от Владимира Сибирова (TrustMaster). Сообщества больше нет.

По поводу расширений - тут же ну дело в том, смотря какие расширения, - если все штатное - конечно им и пишите.

Уверен все зависит от задач и личных предпочтений. Поэтому конечно писать стоит им на официальный сайт, если вопрос по “коробке”, то есть того что лежит в штатном наборе движка.

Но никто и не запрещает здесь спросить. Но соблюдайте ревалентность тем форума по разделам. 

Отредактировано: webitproff (10.05.2026 14:37, 2 месяца назад)
🗿

🧙‍♂️ Радуйся, странниче добрый и честный! Не понапрасну привела тя стезя в земли сии. Зде бо мужи мудры и искусники дела писменнаго и численнаго, что куют словеса и плетут узоры кода, тайны разгадывают и знанием делятся, летописи множа и ремесло цифровое творя.
⬅️ Аще налево пойдеши — обрящеши грамоты древния, писания старинныя и свитки учения. ⬆️ Аще прямо — слово мудрое и совет от мужей разумеющих, что в деле кодописном искусны, получиши. ➡️ Аще направо — сам в писцы и летописцы внидеши, и в ремесло цифровое, где строки и знаки в дело живое обращаются, слово свое в память веков вложиши.
📝 Не медли же — нареки имя свое, и вниди в чин наш, и стань с нами в братстве, где код есть магия, а строки — заклятия живыя, числом и буквою слово едины суть.
🏰 Не тайно есть собрание сие, и не инициации в нем, но многое сокрыто от пришлых и ступалого, понеже не всякому открывается знание, но токмо ищущим и пребывающим в деле сем.