940 字
5 分钟
兰空图床随机返图

兰空图床docker配置#

docker-compose配置如下
集成了mysql redis
需要自己稍微配置一下(略)

services:
  lskypro:
    image: coldpig/lskypro-docker:latest
    restart: unless-stopped
    hostname: lskypro
    container_name: lskypro
    volumes:
      - /vol2/1000/docker/lskypro/html:/var/www/html
      - /vol2/1000/media/picture:/mnt
    ports:
      - "9080:80"
  lskypro_mysql:
    image: mysql:5.7.37
    restart: unless-stopped
    hostname: lskypro_mysql
    container_name: lskypro_mysql
    # 修改加密规则
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - /vol2/1000/docker/lskypro/mysql/data:/var/lib/mysql
      - /vol2/1000/docker/lskypro/mysql/conf:/etc/mysql
      - /vol2/1000/docker/lskypro/mysql/log:/var/log/mysql
    environment:
      MYSQL_ROOT_PASSWORD: lhcssg445723100 # 数据库root用户密码(请自行修改密码)
      MYSQL_DATABASE: lskypro  # 给 lsky-pro 用的数据库名称
  lskypro_adminer:
    image: adminer:latest
    container_name: lskypro_adminer
    hostname: lskypro_adminer
    restart: unless-stopped
    ports:
      - 18080:8080
    environment:
      - ADMINER_DEFAULT_SERVER=lskypro_mysql
  lskypro_redis:
    image: redis:latest
    container_name: lskypro_redis
    hostname: lskypro_redis
    restart: unless-stopped
    ports:
      - "6379:6379"
    volumes:
      - /vol2/1000/docker/lskypro/redis/redis.conf:/etc/redis/redis.conf 
      - /vol2/1000/docker/lskypro/redis/data:/data
    command: redis-server /etc/redis/redis.conf

docker映射关系 /vol2/1000/docker/lskypro/html:/var/www/html

创建图床文件夹,对应容器内地址
横屏图片 pc端 /var/www/html/storage/app/random/pc
竖屏图片 移动端 /var/www/html/storage/app/random/pe

兰空图床配置#

创建存储策略#

如图所示创建存储策略
注意域名改成自己的域名
确认该域名可以访问到图床
67243d034e994.webp 67243e77d5b30.webp

新建存储策略
名字:pc
访问地址:https://yourdomain/c
储存路径:/var/www/html/storage/app/random/pc
名字:mobile
访问地址:https://yourdomain/e
储存路径:/var/www/html/storage/app/random/pe

随机返图脚本#

自动判断接受设备的类型
根据设备类型返回pc(横屏)或pe(竖屏)里的图

  1. 新建脚本 random.php
    创建php脚本保存在 /html/storage/app/random
<?php

header('Access-Control-Allow-Origin: *'); // 允许所有来源访问

function get_images_from_directory($directory) {
    $images = [];
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if ($file->isFile() && preg_match('/\.(gif|jpg|png|jpeg|webp|bmp)$/i', $file->getFilename())) {
            $images[] = $file->getPathname();
        }
    }
    return $images;
}

function get_cached_images($directory, $cache_file) {
    if (file_exists($cache_file) && (time() - filemtime($cache_file)) < 3600) { // Cache for 1 hour
        return json_decode(file_get_contents($cache_file), true);
    } else {
        $images = get_images_from_directory($directory);
        file_put_contents($cache_file, json_encode($images));
        return $images;
    }
}

$agent = $_SERVER['HTTP_USER_AGENT'];
// var_dump($agent);

if (stripos($agent, 'android') !== false || stripos($agent, 'iphone') !== false) {
    $img_array = get_cached_images('../storage/app/random/pe/', 'peimg_cache.json');
    if (count($img_array) == 0) {
        die('没找到pe图片文件。请先上传一些图片到 ./data/storage/app/uploads/pe/ 文件夹');
    }
    header('Content-Type: image/png');
    echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
} else {
    $img_array = get_cached_images('../storage/app/random/pc/', 'pcimg_cache.json');
    if (count($img_array) == 0) {
        die('没找到pc图片文件。请先上传一些图片到 ./data/storage/app/uploads/pc/ 文件夹');
    }
    header('Content-Type: image/png');
    echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
}
  1. 修改路由设置
    打开/html/routes/web.php
    在大约37行添加如下内容
Route::get('random', function () {return include storage_path('/app/randmom/random.php');});
  1. 上传图片
    横屏图片上传至pc文件夹中
    竖屏图片上传至pe文件夹中
    可以在兰空的面板里面上传至对应的存储策略
    也可以直接把图片存到对应文件夹

  2. 使用方法
    在域名后面加/random即可
    https://domain.com/random

单独随机返图脚本(无判断pc mobile)#

  1. 新建脚本pc.php
    用于返回横屏图片
    保存在html/storage/app/random
<?php

header('Access-Control-Allow-Origin: *'); // 允许所有来源访问

function get_images_from_directory($directory) {
    $images = [];
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if ($file->isFile() && preg_match('/\.(gif|jpg|png|jpeg|webp|bmp)$/i', $file->getFilename())) {
            $images[] = $file->getPathname();
        }
    }
    return $images;
}

function get_cached_images($directory, $cache_file) {
    if (file_exists($cache_file) && (time() - filemtime($cache_file)) < 3600) { // 缓存 1 小时
        return json_decode(file_get_contents($cache_file), true);
    } else {
        $images = get_images_from_directory($directory);
        file_put_contents($cache_file, json_encode($images));
        return $images;
    }
}

// 获取同目录下 pc 文件夹的图片
$img_array = get_cached_images('../storage/app/random/pc/', 'pcimg_cache.json');
if (count($img_array) == 0) {
    echo json_encode(['error' => '没有找到 PC 图片文件。请先上传一些图片到 ./data/storage/app/uploads/pc/ 文件夹']);
    exit;
}

// 随机选择一张图片并返回
header('Content-Type: image/png');
echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
  1. 新建脚本pe.php
    用于返回竖屏图片
    pe文件夹同理
<?php

header('Access-Control-Allow-Origin: *'); // 允许所有来源访问

function get_images_from_directory($directory) {
    $images = [];
    $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
    foreach ($iterator as $file) {
        if ($file->isFile() && preg_match('/\.(gif|jpg|png|jpeg|webp|bmp)$/i', $file->getFilename())) {
            $images[] = $file->getPathname();
        }
    }
    return $images;
}

function get_cached_images($directory, $cache_file) {
    if (file_exists($cache_file) && (time() - filemtime($cache_file)) < 3600) { // 缓存 1 小时
        return json_decode(file_get_contents($cache_file), true);
    } else {
        $images = get_images_from_directory($directory);
        file_put_contents($cache_file, json_encode($images));
        return $images;
    }
}

$img_array = get_cached_images('../storage/app/random/pe/', 'peimg_cache.json');
if (count($img_array) == 0) {
    echo json_encode(['error' => '没有找到 PE 图片文件。请先上传一些图片到 ./data/storage/app/uploads/pe/ 文件夹']);
    exit;
}

header('Content-Type: image/png');
echo file_get_contents($img_array[random_int(0, count($img_array) - 1)]);
  1. 路由设置 打开/html/routes/web.php 添加如下内容
Route::get('pc', function () {return include storage_path('/app/randmom/pe.php');});
Route::get('pe', function () {return include storage_path('/app/randmom/pe.php');});
  1. 根据需要选择地址
    需要横屏图片使用htps://domain.com/pc
    需要竖屏图片使用htps://domain.com/pe
兰空图床随机返图
https://blog.mashiro.su/posts/lskypro_imgbed/
作者
真城 mashiro
发布于
2024-11-01
许可协议
CC BY-NC-SA 4.0
© 2024 真城 mashiro. All Rights Reserved. / RSS/ Sitemap
Powered by Astro & Fuwari