CDN友好、基于PHP的简易随机图片API搭建指南

起因

一开始用的是主题自带的API,但图片库都是二次元图片而且有点慢,就萌生了自己搭建的想法,网上粗略搜索了一下发现很简单,又自己改了改以适应CDN,就变成了下面的样子。

代码

简要原理:从指定目录中读取指定后缀的所有文件名并随机选择一个进行重定向

在网站根目录中新建index.php,并粘贴以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php

/*
$from = parse_url($_SERVER['HTTP_REFERER']);

if ($from['host']!='irr.ink' &amp;&amp; $from['host']!='www.irr.ink') {
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found"); //分析来路,若不使用CDN而且想要防止盗用可把这段的注释去掉
exit;
}
*/

$img_array = glob('img/*.{gif,jpg,png,jpeg,webp,bmp}', GLOB_BRACE);
if(count($img_array) == 0) die('没有找到图片,请先上传到 '.dirname(__FILE__).'/img/ 文件夹');

if (isset($img_array))
{
Header("HTTP/1.1 303 See Other");
Header("Location: ".$img_array[array_rand($img_array)]);
exit;
}

在根目录中新建img文件夹,将图片放入,访问此域名时便会重定向到一张随机图片。

想法

没有直接选择返回随机图片而采用重定向的方法,是方便CDN根据URL进行缓存,在CDN上设置缓存规则后能加快图片的加载速度。而使用直接返回图片的方法则会导致CDN在开启强制缓存后只能返回同一张图片。[toc]

防盗链(可选)

如果你的API只希望自用,可在CDN的设置中添加防盗链配置,并将自己的域名设置为白名单,此时图片API只能用于指定的网站。

成果

可以到首页多刷新几次看看。


CDN友好、基于PHP的简易随机图片API搭建指南
https://irr.ink/2021/14XRCQF/
作者
iR
发布于
2021年5月25日
许可协议