基于PHP和页面重定向实现简易随机图API

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


AI 摘要

本文介绍基于PHP的随机图片API实现方案,通过数组整合多源图片链接,利用302重定向动态分发图像资源。重点解析随机算法选择、HTTP状态码差异对缓存策略的影响,以及防盗链配置方法,为快速搭建高效图片分发服务提供轻量级技术路径。

前言

使用PHP代码实现一个简易的随机图API,随机的图片可以来自于对象存储、CDN或其它任何已知的图片链接。

代码实现

<?php
$arr = array(
    'https://221.ltd/wp-content/uploads/2023/08/20230804135126639.png',
    'https://221.ltd/wp-content/uploads/2023/08/20230804135116921.png',
    'https://221.ltd/wp-content/uploads/2023/08/20230804135104564.png',
    'https://221.ltd/wp-content/uploads/2023/08/20230804135051912.png',
    'https://221.ltd/wp-content/uploads/2023/08/20230804135041248.png'
);
$key = array_rand($arr, 1);
Header("HTTP/1.1 302");
Header('Location: ' . $arr[$key]);
exit;

注意:

  1. 可以在$arr中添加更多的已知图片链接
  2. $key = array_rand($arr, 1);是随机而不是轮询,因此有概率出现连续多次出现同一张图片
  3. 使用302跳转,即临时重定向,这样浏览器默认不会缓存跳转的目标,表现为每次刷新得到的图片几乎都不同;如果使用301跳转(永久重定向),则需要Header中额外添加禁止缓存声明,否则浏览器会把随机(重定向)的结果缓存下来。
    Header("HTTP/1.1 301 Moved Permanently");
    Header("Cache-Control: no-cache, must-revalidate");
  4. 最后一行的exit;应当保留,确保此php程序正常退出

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

your.wordpress.domain/rd-pic.php

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

设置防盗链

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

在线演示

本站的封面随机图API为

https://221.ltd/random-sekai.php

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