制作随机图片 API:PHP 与 Python 双方案实战
要为自己的网站、博客或 App 添加一个“每日一图”或“随机背景”功能吗?本文将通过两种主流方式,从零搭建一个高性能,支持跨域的随机图片 API。
方案一:宝塔面板 + PHP站点。
方案二:Python Flask运行web服务。
一、准备工作
在开始之前,请确保你拥有:
一台 Linux 服务器(阿里云/腾讯云/华为云等)或本地测试环境。
一个域名(可选,用于绑定 API 地址)。
一组图片链接(可以是本地路径,也可以是图床的远程 URL)或者一个存放图片的文件夹。
准备一个 img.txt 文件,每行存放一个图片链接,例如:
https://picsum.photos/800/600?random=1
https://picsum.photos/800/600?random=2
https://picsum.photos/800/600?random=3方案一:宝塔面板 + PHP站点
1. 安装宝塔面板
确保系统符合安装宝塔面板,可前往官网了解并复制安装命令:宝塔面板下载,免费全能的服务器运维软件
如果你还没有安装宝塔,请登录服务器执行以下命令(以 Ubuntu 为例):
wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh && sudo bash install_panel.sh 安装完成后,登录面板(通常是 http://你的IP:8888),按提示设置用户名和密码。
2.安装PHP8.4版本
安装宝塔面板后,就可以在面板内安装PHP,一键化安装非常方便。

3. 创建 PHP 站点
登录宝塔面板,点击左侧 “网站” -> “添加站点”。

填写域名(如
random.aevi.top),若无域名可填服务器 IP,然后选择刚刚安装的PHP8.4版本。
点击“确定”,站点创建成功。
4. 上传代码与图片列表
点击刚创建站点的 “根目录”,进入文件管理。
新建一个文本文件
img.txt,将你的图片链接逐行粘贴进去,保存。新建一个 PHP 文件
index.php,粘贴以下代码:
<?php
// 随机图片 API - PHP 版
header("Access-Control-Allow-Origin: *"); // 允许跨域
header("Access-Control-Allow-Methods: GET");
$filename = "img.txt";
if (!file_exists($filename)) {
http_response_code(404);
die('文件不存在');
}
// 读取非空行
$pics = array_filter(file($filename), function($line) {
return trim($line) !== '';
});
if (empty($pics)) {
http_response_code(404);
die('图片列表为空');
}
// 随机选择
$pic = trim($pics[array_rand($pics)]);
$type = isset($_GET['type']) ? strtolower($_GET['type']) : '';
if ($type === 'json') {
header('Content-Type: application/json');
echo json_encode(['pic' => $pic]);
} else {
// 302 重定向
header("Location: $pic");
exit;
}
?>
5.测试接口
直接访问:
http://你的域名/→ 会自动跳转到随机图片。JSON 模式:
http://你的域名/?type=json→ 返回{"pic": "..."}。
我的API:https://random.aevi.top/
方案二:Python Flask运行web服务
1.安装 python 环境与 Flask
这里我选择安装 conda包管理工具,conda自带 python,管理虚拟环境及依赖包非常方便。
安装方法参考博文:Python工具:Conda 包管理器 | Guhe Blog
登录服务器终端,执行:
# conda新建一个虚拟环境
conda create --name random python==3.13
# 激活虚拟环境
conda activate random
# 安装包
pip install flask flask-cors2.编写 Flask 应用
在项目目录下创建 api.py:
from flask import Flask, request, jsonify, redirect
from flask_cors import CORS
import os
import random
app = Flask(__name__)
# 启用 CORS,允许所有来源跨域访问(生产环境可限制 origin)
CORS(app, resources={r"/*": {"origins": "*"}})
# 获取当前脚本所在目录
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
IMG_FILE = os.path.join(BASE_DIR, "img.txt")
@app.route('/')
def random_image():
if not os.path.exists(IMG_FILE):
return "文件不存在", 404
try:
with open(IMG_FILE, 'r', encoding='utf-8') as f:
lines = [line.strip() for line in f if line.strip()]
except UnicodeDecodeError:
# 如果 UTF-8 解码失败,尝试 GBK(兼容 Windows 系统保存的文件)
with open(IMG_FILE, 'r', encoding='gbk') as f:
lines = [line.strip() for line in f if line.strip()]
if not lines:
return "图片列表为空", 404
pic_url = random.choice(lines)
type_param = request.args.get('type', '').lower()
if type_param == 'json':
# CORS 已由 flask-cors 自动处理,无需手动加头
return jsonify({'pic': pic_url})
else:
return redirect(pic_url)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)同样在该目录下创建 img.txt 并填入图片链接。
3.后台运行 Flask
使用 nohup 或 screen 让程序在后台运行:
nohup python3 app.py > output.log 2>&1 &此时,访问http://服务器IP:5000即可看到效果。(记得防火墙放行指定端口)
为安全性考虑,可以做反向代理,绑定域名进行访问调用API。
希望这篇博客对你有帮助!如果有其他问题,欢迎随时提问!
- 感谢你赐予我前进的力量

