Lsky Pro 随机图片

Lsky Pro 随机图片

 次点击
6 分钟阅读

代码

# cat random.php

<?php
$PC_DIR = __DIR__ . '/../storage/app/random/pc';
$PE_DIR = __DIR__ . '/../storage/app/random/pe';
$PC_CACHE = __DIR__ . '/../storage/app/random/pcimg_cache.json';
$PE_CACHE = __DIR__ . '/../storage/app/random/peimg_cache.json';

function get_images_from_directory($directory) {
    $images = [];
    if (!is_dir($directory)) return $images;
    $it = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)
    );
    foreach ($it as $file) {
        if ($file->isFile() && preg_match('/\.(gif|jpe?g|png|webp|bmp)$/i', $file->getFilename())) {
            $images[] = $file->getPathname();
        }
    }
    return $images;
}
function get_cached_images($directory, $cache_file) {
    if (is_file($cache_file) && (time() - filemtime($cache_file)) < 3600) { 
        $data = json_decode(file_get_contents($cache_file), true);
        return is_array($data) ? $data : [];
    }
    $images = get_images_from_directory($directory);
    @file_put_contents($cache_file, json_encode($images, JSON_UNESCAPED_SLASHES), LOCK_EX);
    return $images;
}

$agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
$isMobile = stripos($agent, 'android') !== false || stripos($agent, 'iphone') !== false || stripos($agent, 'ipad') !== false;
$dir = $isMobile ? $PE_DIR : $PC_DIR;
$cache = $isMobile ? $PE_CACHE : $PC_CACHE;
$images = get_cached_images($dir, $cache);
if (count($images) === 0) {
    http_response_code(404);
    exit('目录不存在或没有图片 : ' . $dir);
}
$file = $images[random_int(0, count($images) - 1)];
$mime = @mime_content_type($file) ?: 'image/jpeg'; 
header('Content-Type: ' . $mime);
header('Cache-Control: no-store');
readfile($file);

测试

单击图片以打开完整图片

© 本文著作权归作者所有,未经许可不得转载使用。