基于PHP和301跳转实现简易随机图API

shawgg 发布于 2023-08-06 273 次阅读


前言

使用PHP代码实现一个简易的随机图API,随机的图片可以来自于对象存储、CDN或其它任何已知的图片链接;同时在Header中声明禁止缓存,这样即使不清除缓存地刷新(F5,清除缓存则Ctrl+F5)也可以得到新的图片。

代码实现

<?php
$arr = array(
    'https://cloud.colorfulstage.cn/wp/2023/08/20230804135126639.png',
    'https://cloud.colorfulstage.cn/wp/2023/08/20230804135116921.png',
    'https://cloud.colorfulstage.cn/wp/2023/08/20230804135104564.png',
    'https://cloud.colorfulstage.cn/wp/2023/08/20230804135051912.png',
    'https://cloud.colorfulstage.cn/wp/2023/08/20230804135041248.png'
);
$key = array_rand($arr, 1);
Header("HTTP/1.1 301 Moved Permanently");
Header("Cache-Control: no-cache, must-revalidate");
Header('Location: ' . $arr[$key]);
exit;

注意:

  1. 可以在$arr中添加更多的已知图片链接
  2. $key = array_rand($arr, 1);是真随机而不是轮询,因此有概率出现连续多次出现同一张图片
  3. Header("Cache-Control: no-cache, must-revalidate");是必需的禁止缓存声明,这样不清除缓存地刷新也会得到一张新图片;否则浏览器会把图片作为静态内容缓存下来,因为这并不是get请求
  4. 最后一行的exit;应当保留,确保此php程序正常退出

之后把上述代码保存成php文件,可以把它直接丢到WordPress的工作目录中,得到随机图API

your.wordpress.domain/rd-pic.php

其中your.wordpress.domain为WordPress主站域名,rd-pic.php为保存的文件名

设置防盗链

如果使用对象存储或CDN作为图床,建议在服务提供商那里配置防盗链(一般是通过限制referer实现)

在线演示

本站的封面随机图API为

https://blog.colorfulstage.cn/random-sekai.php

(已开启防盗链,仅供预览演示)

最后更新于 2024-04-13