PHP随机图片API实现指南(带网页标题显示)
•笔记
2534
0
以下是一个简单的 PHP 随机图片 API 实现,它可以在浏览器标签页显示自定义网页名称,可以从文本文件中读取图片URL列表,随机选择一张图片并返回给用户。
<?php
// 随机图片API - 完整可用版本
// 图片链接文本文件路径
$linksFile = 'image_links.txt';
// 设置网页标题
$pageTitle = "随机图片API";
// 1. 首先处理图片请求
if (isset($_GET['imageonly']) && $_GET['imageonly'] == '1') {
// 检查文件是否存在
if (!file_exists($linksFile)) {
header('HTTP/1.1 404 Not Found');
die('Image links file not found.');
}
// 读取文件内容到数组
$imageUrls = file($linksFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// 检查是否有可用的图片链接
if (empty($imageUrls)) {
header('HTTP/1.1 404 Not Found');
die('No image URLs found in the file.');
}
// 随机选择一个图片URL
$randomImageUrl = trim($imageUrls[array_rand($imageUrls)]);
// 获取图片内容
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36\r\n"
]
]);
$imageData = @file_get_contents($randomImageUrl, false, $context);
if ($imageData === false) {
// 如果获取失败,尝试下一个图片
shuffle($imageUrls);
foreach ($imageUrls as $url) {
$url = trim($url);
$imageData = @file_get_contents($url, false, $context);
if ($imageData !== false) {
$randomImageUrl = $url;
break;
}
}
if ($imageData === false) {
header('HTTP/1.1 503 Service Unavailable');
die('Could not retrieve any image.');
}
}
// 根据内容自动检测MIME类型
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mimeType = $finfo->buffer($imageData);
// 设置正确的Content-Type
header('Content-Type: ' . $mimeType);
// 输出图片内容
echo $imageData;
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo htmlspecialchars($pageTitle); ?></title>
<meta charset="UTF-8">
<style>
body {
font-family: Arial, sans-serif;
text-align: center;
margin: 0;
padding: 20px;
background-color: #f5f5f5;
}
.container {
max-width: 800px;
margin: 0 auto;
background-color: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
img {
max-width: 100%;
max-height: 70vh;
border-radius: 4px;
margin: 20px 0;
border: 1px solid #ddd;
}
.error {
color: red;
padding: 20px;
border: 1px solid #ffcccc;
background-color: #ffeeee;
}
.refresh-btn {
padding: 10px 20px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
margin-top: 10px;
}
.refresh-btn:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1><?php echo htmlspecialchars($pageTitle); ?></h1>
<p>每次刷新都会显示不同的随机图片</p>
<!-- 显示随机图片 -->
<div id="imageContainer">
<img src="?imageonly=1&rand=<?php echo uniqid(); ?>" alt="随机图片" id="randomImage" onerror="imageError()">
</div>
<div>
<button class="refresh-btn" onclick="refreshImage()">换一张</button>
</div>
</div>
<script>
function refreshImage() {
const img = document.getElementById('randomImage');
img.src = "?imageonly=1&rand=" + new Date().getTime();
}
function imageError() {
const container = document.getElementById('imageContainer');
container.innerHTML = '<div class="error">图片加载失败,请点击按钮刷新或检查图片链接</div>' +
'<button class="refresh-btn" onclick="refreshImage()">重新尝试</button>';
}
</script>
</body>
</html>
两种访问模式:
?imageonly=1
参数访问:仅返回图片数据用户友好界面:
防止缓存:
random-image.php
image_links.txt
文件并添加图片URL$pageTitle
变量可以更改网页标题Github:https://github.com/imxhe/random-image