<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// 引入 Redis 和 Memcached 扩展
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$memcached = new Memcached();
$memcached->addServer('127.0.0.1', 11211);

function sendErrorResponse($message, $statusCode = 500) {
    http_response_code($statusCode);
    echo json_encode([
        "status" => "error",
        "message" => $message
    ]);
    exit;
}

function getMimeType($filePath) {
    $extension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
    switch ($extension) {
        case 'jpg':
        case 'jpeg':
            return 'image/jpeg';
        case 'png':
            return 'image/png';
        case 'gif':
            return 'image/gif';
        case 'webp':
            return 'image/webp';
        default:
            return 'application/octet-stream'; // 默认类型
    }
}

$imageDirectory = "images"; // 图片存放目录
$cacheTimeout = 3600; // 缓存超时时间（秒）

// 检查 Memcached 中是否有图片列表
$images = $memcached->get('image_list');
if ($images === false) {
    // 如果没有，从文件系统中获取图片
    $images = glob($imageDirectory . '/*.{jpg,jpeg,png,gif,webp}', GLOB_BRACE);
    if (empty($images)) {
        sendErrorResponse("没有可用的图片", 404);
    }
    // 将图片列表存储到 Memcached
    $memcached->set('image_list', $images, $cacheTimeout);
}

// 随机选择一张图片
$randomImage = $images[array_rand($images)];

// 获取图片 MIME 类型
$mime = getMimeType($randomImage);
header('Content-Type: ' . $mime);
header('Content-Disposition: inline; filename="' . basename($randomImage) . '"');
header('Content-Length: ' . filesize($randomImage));

// 清理输出缓冲区并输出图片
ob_clean();
flush();
readfile($randomImage);
exit;
?>
