Sakurairo原生支持了一个很好玩的功能!就是可以设定背景图片API,而该API能够提供一张随机的背景图片~
但是只用别人的API的话,就只能在提供的这些图片中随机展示了。想不想自制一个API呢?ヾ(≧▽≦*)o
自制API思路
首先观察Sakurairo原生提供的API,发现它的结尾是.php
,所以思路一下就打开了:PHP能够提供一种前后端不分离的服务,当触发请求时,经过某种机制(例如随机)选择一张图片,然后将图片作为结果进行返回。
那么思路就很简单了:
<?php
// 指定图片文件夹和访问网址前缀
$imageFolder = '/var/www/html/static/bg_img/';
$urlPrefix = 'https://www.example.com/static/bg_img/';
// 获取指定文件夹下所有图片文件
$img_array = glob("$imageFolder/*.{gif,jpg,png,webp}", GLOB_BRACE);
// 随机选择一张图片
$randomImage = $img_array[array_rand($img_array)];
// 获取图片文件名(去掉路径)
$imageName = basename($randomImage);
// 拼接完整的图片 URL
$imageUrl = $urlPrefix . $imageName;
// 重定向到图片 URL
header("Location: $imageUrl");
?>
是不是很简单(=・ω・=)
进阶
上面的代码还比较简单,还可以进阶!( σ'ω')σ
设定文件头
既然是随机图片,如果被浏览器缓存下来结果,每次都返回这个结果,那就失去随机图片的意义了。所以可以加入如下文件头,来保证服务器不缓存结果图片:
<?php
header("Access-Control-Allow-Origin: *");
header('Pragma:no-cache');
header('Cache-Control: no-cache, must-revalidate');
header('Expires: 0');
//...
?>
纠错机制
可以检查一下这个文件夹是否为空,如果为空则不返回404.
if (empty($img_array)) {
// 文件夹为空,返回 404 错误
header("HTTP/1.1 404 Not Found");
echo "404 Not Found: No images available.";
exit; // 终止脚本执行
}
传入参数
你想不想设定一个图片主题呢?例如提供:风景图片、二次元小人两种风格的图,根据参数的不同,返回指定类别下随机的图片?这个其实很好办,只需要在访问时指定参数就好了。
比如,之前访问的链接示例是:https://www.example.com/api.php
现在改成这个:https://www.example.com/api.php?type=wife
然后在php文件中进行规则判断:
$type = isset($_GET['type']) ? $_GET['type'] : null;
if ($type === 'wife') {
// ... 如果指定参数为wife
} else {
// ... 如果指定参数为其他情况
}
这样就可以根据参数的不同返回不同的图片了!此外,注意这里判断使用的是三个等号===
而不是两个等号==
,在PHP语言中,两个等号的判断要求左右两侧数据类型必须一致,所以会套一层强制类型转换,可能会导致字符串和奇怪的内容画上等号(比如字符串强制转换为0去和整数数字作比较)导致结果超出预期;而三个等号要求数据类型一致(否则返回false)。
而且Sakurairo支持给PC端和手机端分别设置图片API,用这个思路,就可以使用同一个API传入不同参数来实现双端展示不同比例的图片了!
至此,教程结束ヾ(≧▽≦*)o
Comments NOTHING