array( 'size' => $jsonSize, 'size_readable' => self::formatBytes($jsonSize) ) ); if (function_exists('gzencode')) { $gzip = gzencode($json, 6); $gzipSize = strlen($gzip); $stats['gzip'] = array( 'size' => $gzipSize, 'size_readable' => self::formatBytes($gzipSize), 'saved' => round((1 - $gzipSize / $jsonSize) * 100, 1) . '%' ); } if (function_exists('msgpack_pack')) { $msgpack = msgpack_pack($data); $msgpackSize = strlen($msgpack); $stats['msgpack'] = array( 'size' => $msgpackSize, 'size_readable' => self::formatBytes($msgpackSize), 'saved' => round((1 - $msgpackSize / $jsonSize) * 100, 1) . '%' ); } return $stats; } private static function formatBytes($bytes) { if ($bytes >= 1048576) { return number_format($bytes / 1048576, 2) . ' MB'; } elseif ($bytes >= 1024) { return number_format($bytes / 1024, 2) . ' KB'; } else { return $bytes . ' B'; } } /** * 格式化评分显示 * 处理边缘情况:暂无评分、评分数量少、评分异常 * * @param float $score 平均评分 * @param int $nums 评分次数 * @return array 格式化后的评分信息 */ public static function formatRating($score, $nums) { $result = array( 'score' => 0.00, 'nums' => 0, 'display' => '暂无评分', 'status' => 'none', 'level' => '', 'star' => 0 ); if ($nums <= 0) { return $result; } $score = (float) $score; $nums = (int) $nums; if ($score < 0 || $score > 5) { $result['status'] = 'abnormal'; $result['display'] = '评分异常'; return $result; } $result['score'] = round($score, 2); $result['nums'] = $nums; $result['star'] = round($score); if ($nums < 3) { $result['status'] = 'few'; $result['display'] = sprintf('%.1f分 (%d人评分,样本较少)', $score, $nums); } elseif ($nums < 10) { $result['status'] = 'normal'; $result['display'] = sprintf('%.1f分 (%d人评分)', $score, $nums); } else { $result['status'] = 'sufficient'; $result['display'] = sprintf('%.1f分 (%d人评分)', $score, $nums); } if ($score >= 4.5) { $result['level'] = '优秀'; } elseif ($score >= 4.0) { $result['level'] = '推荐'; } elseif ($score >= 3.0) { $result['level'] = '一般'; } elseif ($score >= 2.0) { $result['level'] = '较差'; } else { $result['level'] = '不推荐'; } return $result; } /** * 获取评分统计信息(用于列表显示) * * @param float $score 平均评分 * @param int $nums 评分次数 * @return array 简化的评分信息 */ public static function getRatingSummary($score, $nums) { if ($nums <= 0) { return array( 'score' => 0.00, 'nums' => 0, 'display' => '暂无评分', 'star' => 0 ); } $score = (float) $score; if ($score < 0 || $score > 5) { return array( 'score' => 0.00, 'nums' => $nums, 'display' => '评分异常', 'star' => 0 ); } return array( 'score' => round($score, 2), 'nums' => (int) $nums, 'display' => sprintf('%.1f分', $score), 'star' => (int) round($score) ); } } if (php_sapi_name() === 'cli' && isset($argv[0]) && basename($argv[0]) === 'response.php') { header('Content-Type: text/plain'); echo "支持的响应格式:\n"; echo "- json: JSON格式(默认)\n"; echo "- gzip: Gzip压缩JSON\n"; if (function_exists('msgpack_pack')) { echo "- msgpack: MessagePack二进制格式 ✅\n"; } else { echo "- msgpack: MessagePack二进制格式 ❌ (需要安装msgpack扩展)\n"; } if (class_exists('CBOR\CBOREncoder')) { echo "- cbor: CBOR二进制格式 ✅\n"; } else { echo "- cbor: CBOR二进制格式 ❌ (需要安装cbor库)\n"; } echo "\n使用方式:\n"; echo " api.php?act=list&_format=json # JSON格式\n"; echo " api.php?act=list&_format=gzip # Gzip压缩\n"; echo " api.php?act=list&_format=msgpack # MessagePack格式\n"; echo " api.php?act=list&_format=cbor # CBOR格式\n"; echo " api.php?act=list&_pretty=1 # 格式化JSON(调试用)\n"; }