效果演示
本案例使用是分类的第二种:以图片链接进行随机的效果演示,如果你不想自己部署可以直接使用下方由TNT安全团队免费提供的api接口。
https://api.tntsec.com/img/index.php
说明
问: 全部和分类是什么意思?
答: 想要省事就把所有图片全都堆到一个地方,访问接口直接在这个文件中随机抽取一个图片,这就是全部的意思。如果你不嫌麻烦可以把图片分类存放,例如动漫图片放在一起,风景图片放在一起。访问接口输入指定参数就可以查看到指定类型的图片。
全部
第一种:以图片源文件进行随机
第一步:创建一个名为img的文件夹(这个文件里放你需要的图片)
第二步:创建一个名为index.php文件,写入以下代码 (这个文件就是api)
<?php
// 缓存文件
$cacheFile = 'cache.txt';
// 检查缓存文件是否存在且未过期(1小时)
$cacheValid = file_exists($cacheFile) && (time() - filemtime($cacheFile)) < 3600;
if ($cacheValid) {
// 从缓存文件中读取图片URL
$images = file($cacheFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
} else {
// 从img文件夹中读取所有图片
$images = glob('img/*.{jpg,jpeg,png,gif}', GLOB_BRACE);
// 如果没有找到图片,则输出错误信息并退出
if (empty($images)) {
die('没有图片');
}
// 将图片列表写入缓存文件
file_put_contents($cacheFile, implode(PHP_EOL, $images));
}
// 随机选择一个图片(不需要设置随机数种子)
$randomImage = $images[array_rand($images)];
// 重定向到随机图片
header('Location: ' . $randomImage);
exit;
?>
第二种:以图片链接进行随机
第一步:创建一个名为img.txt文件 (在这个文件里放你储存的图片链接,一行一条)
第二步:创建一个名为index.php文件,写入以下代码(这个文件就是api)
<?php
// 放置图片URL的文件
$imageFilePath = 'img.txt';
// 检查文件是否存在
if (!file_exists($imageFilePath)) {
die('缺少所需文件');
}
// 从文件中读取图片URL
$images = file($imageFilePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 如果没有找到图片URL,则输出错误信息并退出
if (empty($images)) {
die('没有图片');
}
// 随机选择一个URL
$randomImage = $images[array_rand($images)];
// 重定向到随机图片
header('Location: ' . $randomImage);
exit;
?>
分类
第一种:以图片源文件进行随机
第一步:创建一个名为img的文件夹
第二步:然后在img文件夹下在创建具体分类的文件夹(每个分类的文件夹里放对应分类的图片)
第三步:创建一个名为index.php文件,写入以下代码(这个文件就是api)
在img文件夹下创建了a、b两个文件夹。假设a文件夹中放的都是动漫图片,b文件夹中放的都是风景图片。
<?php
// 从GET请求中获取img参数,默认为'all'
$img = isset($_GET['img']) ? $_GET['img'] : 'all';
// 文件夹数组,用于根据$img参数选择文件夹
$folders = [
'all' => ['img/a', 'img/b'],
'a' => ['img/a'],
'b' => ['img/b']
];
// 根据$img参数选择文件夹
$selectedFolders = $folders[$img];
// 初始化图片数组
$images = [];
// 遍历选定的文件夹,读取所有图片
foreach ($selectedFolders as $folder) {
$folderImages = glob("$folder/*.{jpg,jpeg,png,gif}", GLOB_BRACE);
if (!empty($folderImages)) {
$images = array_merge($images, $folderImages);
}
}
// 如果没有找到图片,则输出错误信息并退出
if (empty($images)) {
die('没有图片');
}
// 随机选择一个图片(不需要设置随机数种子)
$randomImage = $images[array_rand($images)];
// 重定向到随机图片
header('Location: ' . $randomImage);
exit;
?>
第二种:以图片链接进行随机
第一步:创建一个名为img的文件夹
第二步:然后在img文件夹下在创建具体分类的文件(每个文件中的内容一行一个)
第三步:创建一个名为index.php文件,写入以下代码(这个文件就是api)
在img文件夹下创建了a.txt、b.txt两个文件。假设a.txt文件中放的都是动漫图片链接,b.txt文件中放的都是风景图片链接。
<?php
// 从请求中获取img参数,默认为'all'
$img = isset($_GET['img']) ? $_GET['img'] : 'all';
// 初始化图片路径数组
$imagePaths = [];
// 根据img参数读取对应的文件内容
if ($img === 'all') {
// 如果参数是'all',则读取所有txt文件
$files = ['a.txt', 'b.txt'];
} else {
// 否则只读取对应的txt文件
$files = [$img . '.txt'];
}
// 遍历文件数组,读取图片路径
foreach ($files as $file) {
$filePath = 'img/' . $file;
if (file_exists($filePath)) {
$lines = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (!empty($lines)) {
$imagePaths = array_merge($imagePaths, $lines);
}
}
}
// 如果没有找到图片路径,则输出错误信息并退出
if (empty($imagePaths)) {
die('没有图片');
}
// 随机选择一个图片路径
$randomImagePath = $imagePaths[array_rand($imagePaths)];
// 重定向到随机图片路径
header('Location: ' . $randomImagePath);
exit;
?>
{/tabs-pane}
{tabs-pane label="文件多的时候"}
<?php
// 从请求中获取img参数,默认为'all'
$img = isset($_GET['img']) ? $_GET['img'] : 'all';
// 根据img参数确定要读取的文件列表
$filesToRead = ($img === 'all') ? ['a.txt', 'b.txt'] : [$img . '.txt'];
// 初始化图片路径数组
$imagePaths = [];
// 遍历文件列表,读取图片路径
foreach ($filesToRead as $file) {
$filePath = 'img/' . $file;
if (file_exists($filePath)) {
// 直接从文件读取每一行并添加到imagePaths数组中
$handle = fopen($filePath, 'r');
if ($handle) {
while (($line = fgets($handle)) !== false) {
// 去除行尾的换行符和空白字符,并跳过空行
$line = trim($line);
if (!empty($line)) {
$imagePaths[] = $line;
}
}
fclose($handle);
} else {
// 如果无法打开文件,记录错误(这里简单处理为继续下一个文件)
error_log("无法打开文件: $filePath");
}
} else {
// 如果文件不存在,记录错误(这里简单处理为继续下一个文件)
error_log("文件不存在: $filePath");
}
}
// 如果没有找到图片路径,则输出错误信息并退出
if (empty($imagePaths)) {
die('没有图片');
}
// 随机选择一个图片路径
$randomImagePath = $imagePaths[array_rand($imagePaths)];
// 重定向到随机图片路径
header('Location: ' . $randomImagePath);
exit;
?>
{/tabs-pane}