self::MIN_SIZE_FOR_COMPRESSION && function_exists('gzencode')) { $compressed_data = @gzencode($data, 6); // Уровень сжатия 6 (баланс скорости и размера) if ($compressed_data !== false) { $compressed_size = strlen($compressed_data); $compression_ratio = $compressed_size / $data_size; // Используем сжатие только если оно дает выигрыш более 10% if ($compression_ratio < 0.9) { $data = $compressed_data; $compressed = true; } } } return array( 'data' => $data, 'compressed' => $compressed, 'original_size' => $data_size, 'compressed_size' => $compressed ? strlen($data) : $data_size, 'compression_ratio' => $compression_ratio, ); } /** * Распаковать данные, если они сжаты * * @param string $data Данные (возможно сжатые) * @param bool $is_compressed Флаг сжатия * @return string|false Распакованные данные или false при ошибке */ public static function decompress_if_needed($data, $is_compressed) { if (!$is_compressed) { return $data; } if (!function_exists('gzdecode')) { return false; } $decompressed = @gzdecode($data); return $decompressed !== false ? $decompressed : false; } }