Forum categories

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

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


webitproff
webitproff • 2026-02-28 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);
}

 

This post was edited by webitproff (2026-07-05 15:41, 1 week ago)
1/1/0

webitproff
webitproff • 2026-03-22 17:45 #2

Cotonti Compatibility with PHP 8.5

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

losdriver
losdriver • 2026-05-09 14:11 #3

#500 webitproff: 
 

Cotonti Compatibility with PHP 8.5

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

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

webitproff
webitproff • 2026-05-09 14:23 #4

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

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

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

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

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

This post was edited by webitproff (2026-05-10 14:37, 2 months ago)
🗿

🧙‍♂️ Well met, good traveler! Fate has guided your steps to our humble realm. Here, wise sages and masters of the coding craft ⚒️📜 gather to unravel the mysteries of the code ✨⚙️, share their knowledge, and add new chapters to our chronicles.
⬅️ To the left lie ancient scrolls 📚 filled with forgotten wisdom. ⬆️ Straight ahead, friendly folk offer counsel 💬 to those in need. ➡️ To the right, you may become a chronicler ✍️ yourself, sharing your craft and leaving words of wisdom for those yet to come.
📝 Delay no longer—tell us the name by which you are known, complete the rite of registration 🛡️, and join our fellowship!
🏰 Our brotherhood holds no secret initiation, yet many halls remain closed to wandering guests, for some knowledge 💎 is reserved for those who choose to walk this path beside us.