环境介绍

系统:Ubuntu 20.04

PHP:7.2.34

反向代理服务器OpenResty:1.21.4.3-2-1-focal

1Panel面板:社区版 v1.10.6-lts

准备工作

新人小白建议直接使用宝塔或者1Panel面板,创建一个网站,这里以1Panel举例,类型选择一定是PHP,运行环境的搭建请参考blog.awking.cn/archives/31.html

端口冲突了,随便改一个空闲端口就可以了 后续这个端口没什么用

image
image

然后进入该网站目录的index文件夹

image
image

准备工作就已经完成了

调用本地文件图片/视频

在网站目录中添加/img或/video文件夹,文件夹中放入相应的图片或者视频

然后修改网站目录中的index.php文件

<?php
$img_array = glob("img/*.{gif,jpg,png}",GLOB_BRACE); 
$img = array_rand($img_array);
$dz = $img_array[$img];
header("Location:".$dz);
?>

如果是视频的话代码如下:

一般不建议使用这种本地存储的方式,因为一是对服务器的存储压力大,二是对服务器的带宽要求也高,以上仅限图片 因为视频我还没有找到比较好的托管方案

外链调用

这种调用方式就是将喜欢的图片上传到图床上,然后直接调用图床的链接

第一步:在网站目录中创建img.txt文件

第二步:将以下代码写入index.php中

<?php

// 从指定的txt文件中随机获取一条图片链接的函数
function get_random_image($filename) {
    $image_urls = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 读取txt文件的每一行,存储到一个数组中
    if (count($image_urls) > 0) {
        $random_index = array_rand($image_urls); // 从数组中随机选择一个索引
        return $image_urls[$random_index]; // 返回选中的图片链接
    } else {
        return false; // 如果数组为空,返回false表示没有图片链接
    }
}

// 直接输出图片的函数
function output_image($image_url) {
    $headers = get_headers($image_url, 1); // 获取图片链接的HTTP头信息
    if (isset($headers['Content-Type'])) {
        header('Content-Type: ' . $headers['Content-Type']); // 设置响应的Content-Type头部信息
    }
    echo file_get_contents($image_url); // 读取并输出图片内容
}


$filename = 'img.txt'; // 根据设备类型选择相应的txt文件
$image_url = get_random_image($filename); // 从txt文件中随机获取一条图片链接

if ($image_url) {
    output_image($image_url); // 输出图片
} else {
    echo "No images found in the txt file."; // 如果没有图片链接,输出错误信息
}

?>

第三步:将图片链接复制进img.txt文件中,链接之间以回车分割

进阶玩法

主要有两个,一个是随机图片API会根据设备不同返回不同的图片,例如:手机用户返回竖图,PC用户返回横图,即自适应API

还有一个是对API进行图片分类管理

自适应API

第一步:创建mpm.txt 移动端图片、moe.txt PC端图片,然后将上面的PHP文件修改如下:

<?php

// 判断当前设备是否为移动设备的函数
function is_mobile() {
    $user_agent = $_SERVER['HTTP_USER_AGENT']; // 获取用户代理字符串
    $mobile_agents = array('Android', 'iPhone', 'Windows Phone', 'BlackBerry', 'SymbianOS'); // 定义移动设备关键词数组

    // 遍历移动设备关键词数组,检查用户代理字符串中是否包含这些关键词
    foreach ($mobile_agents as $mobile_agent) {
        if (stripos($user_agent, $mobile_agent) !== false) {
            return true; // 如果找到关键词,返回true表示是移动设备
        }
    }
    return false; // 如果没有找到关键词,返回false表示不是移动设备
}

// 从指定的txt文件中随机获取一条图片链接的函数
function get_random_image($filename) {
    $image_urls = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); // 读取txt文件的每一行,存储到一个数组中
    if (count($image_urls) > 0) {
        $random_index = array_rand($image_urls); // 从数组中随机选择一个索引
        return $image_urls[$random_index]; // 返回选中的图片链接
    } else {
        return false; // 如果数组为空,返回false表示没有图片链接
    }
}

// 直接输出图片的函数
function output_image($image_url) {
    $headers = get_headers($image_url, 1); // 获取图片链接的HTTP头信息
    if (isset($headers['Content-Type'])) {
        header('Content-Type: ' . $headers['Content-Type']); // 设置响应的Content-Type头部信息
    }
    echo file_get_contents($image_url); // 读取并输出图片内容
}

$is_mobile = is_mobile(); // 判断当前设备是否为移动设备
$filename = $is_mobile ? 'mpm.txt' : 'moe.txt'; // 根据设备类型选择相应的txt文件
$image_url = get_random_image($filename); // 从txt文件中随机获取一条图片链接

if ($image_url) {
    output_image($image_url); // 输出图片
} else {
    echo "No images found in the txt file."; // 如果没有图片链接,输出错误信息
}

?>

API分类

有可能我们需要一个自适应API去当作我们网站的背景,还需要一个只返回横屏图片的API作为文章的封面

对于这种需求,我们只需要在网站目录中创建两个文件夹A、B,将自适应API网站目录下的文件 (index.php, mpm.txt, moe.txt) 放入文件A,同理将只返回横屏API网站目录下文件放入文件夹B

当前网站目录结构如下

网站目录
|_index.php
|_A (文件夹)
| |_index.php
| |_mpm.txt
| |_moe.txt
|_B (文件夹)

|_index.php  
|_img.txt

假设网站域名为 example.com,当我们访问 example.com/A 就是访问的自适应图片API,访问 example.com/B 就是访问的横屏API

参考:

随机图片API搭建总结教程