代码
# 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);测试
单击图片以打开完整图片