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
兰空图床配置
创建存储策略
如图所示创建存储策略
注意域名改成自己的域名
确认该域名可以访问到图床
新建存储策略
名字:pc
访问地址:https://yourdomain/c
储存路径:/var/www/html/storage/app/random/pc
名字:mobile
访问地址:https://yourdomain/e
储存路径:/var/www/html/storage/app/random/pe
随机返图脚本
自动判断接受设备的类型
根据设备类型返回pc(横屏)或pe(竖屏)里的图
- 新建脚本
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)]);
}
- 修改路由设置
打开/html/routes/web.php
在大约37行添加如下内容
Route::get('random', function () {return include storage_path('/app/randmom/random.php');});
上传图片
将横屏图片上传至pc
文件夹中
将竖屏图片上传至pe
文件夹中
可以在兰空的面板里面上传至对应的存储策略
也可以直接把图片存到对应文件夹使用方法
在域名后面加/random
即可
如https://domain.com/random
单独随机返图脚本(无判断pc mobile)
- 新建脚本
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)]);
- 新建脚本
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)]);
- 路由设置 打开
/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');});
- 根据需要选择地址
需要横屏图片使用htps://domain.com/pc
需要竖屏图片使用htps://domain.com/pe