Страницы, статьи и новости
Инструменты и плагины
Заготовка заголовок


Описание как пример заготовки. Пример текстового контента для дальнейшей кастомизации шаблона "Index36".

Редактировать шаблон вы можете на свое усмотрение и как вам угодно. Если у вас на это нет времени или недостаточно знаний - вы всегда можете заказать адаптацию шаблона сайта написав мне по контактам на GitHub или в личные сообщения на публичной странице сайта маркетплейса цифровых товаров

29.08.2025 18:35

Ошибка Warning: unserialize(): Extra data starting at offset 146 of 147 bytes указывает на то, что данные, которые пытаются десериализовать в файле CommentsWidget.php, повреждены или имеют неправильный формат, из-за чего функция PHP unserialize() завершается с ошибкой. Скорее всего, это связано с некорректными или подделанными данными в параметре GET ci, который декодируется из base64 и затем десериализуется. Чтобы исправить это, нужно добавить проверку данных и обработку ошибок, чтобы убедиться, что данные безопасны и правильно отформатированы перед попыткой десериализации.

Вот исправленный код с добавленной проверкой, обработкой ошибок

		// Get the URL parameters of the current page where the comment widget is displayed.
		if (COT_AJAX && Cot::$env['ext'] === 'comments' && isset($_GET['ci'])) {
			$ci = cot_import('ci', 'G', 'TXT'); // Берём параметр ci из GET
			if (!empty($ci)) {
				$decoded = base64_decode($ci, true); // Декодируем base64 (true = строгая проверка)
				if ($decoded !== false) {
					// trim убирает возможные пробелы/переносы, @ подавляет warning при ошибке
					$unserialized = @unserialize(trim($decoded));
					if ($unserialized !== false && is_array($unserialized)) {
						$this->currentUrlExtension = $unserialized[0]; // Расширение
						$this->currentUrlParams    = $unserialized[1]; // Параметры
					}
				}
			}
		} elseif (
			Cot::$env['ext'] !== 'comments'
			|| !isset($_GET['a'])
			|| $_GET['a'] !== 'display'
		) {
			$this->currentUrlExtension = Cot::$env['ext']; // Текущее расширение
			$this->currentUrlParams = $_GET;               // Все GET-параметры
			unset($this->currentUrlParams['e']);           // Убираем служебный параметр
			if (isset($_GET['rwr'])) {
				unset($this->currentUrlParams['rwr']);     // Убираем rwr если есть
			}
		}

 

или так

// Получаем параметры URL текущей страницы, где отображается виджет комментариев.
if (COT_AJAX && Cot::$env['ext'] === 'comments' && isset($_GET['ci'])) {
    $ci = cot_import('ci', 'G', 'TXT');
    if (!empty($ci)) {
        // Декодируем base64-строку с проверкой валидности
        $decoded = base64_decode($ci, true); // Строгий режим для base64
        if ($decoded !== false) {
            // Безопасно десериализуем данные, отключая поддержку классов
            $unserialized = @unserialize($decoded, ['allowed_classes' => false]);
            if ($unserialized !== false || $decoded === serialize(false)) {
                // Присваиваем значения, если десериализация успешна
                $this->currentUrlExtension = $unserialized[0] ?? '';
                $this->currentUrlParams = $unserialized[1] ?? [];
            }
        }
    }
} elseif (
    Cot::$env['ext'] !== 'comments'
    || !isset($_GET['a'])
    || $_GET['a'] !== 'display'
) {
    // Если не AJAX или не страница комментариев, используем текущие параметры
    $this->currentUrlExtension = Cot::$env['ext'];
    $this->currentUrlParams = $_GET;
    unset($this->currentUrlParams['e']);
    if (isset($_GET['rwr'])) {
        unset($this->currentUrlParams['rwr']);
    }
}

 

Пояснения:

Проверка base64: Используется base64_decode($ci, true) для строгой проверки валидности base64-строки.
Безопасная десериализация: Применяется @unserialize с опцией ['allowed_classes' => false] для защиты от уязвимостей и подавления предупреждений.
Проверка результата: Проверяется успешность десериализации или соответствие данным serialize(false).
Безопасное присваивание: Оператор ?? задаёт значения по умолчанию, если данные отсутствуют.

 

 

Аккаунт