基于PHP搭建私有API随机图服务
既然玩博客,随机图肯定会用到,前前后后用了不少共用的API,我感觉有几点不好的地方
- 服务不可控,随时可能挂掉,而且有的很慢
- 图片不一定喜欢,而且也无法更换
- API资源也不太好找
基于以上三个方面,决定自己搭建一个随机图片API,简单使用,可随时增减照片,服务可用性也更可控
搭建也非常简单,一共二步就搞定了
第一步:宝塔创建网站
我这里域名使用:api.lovelu.top,也可自定义为自己域名,记得添加解析
注意:无需添加反代及伪静态
第二步:初始化目录
- 根目录新建index.php
<?php
const ALLOW_RAW_OUTPUT = false;
// 是否开启 ?raw 选项,可能会消耗服务器较多流量
function has_query($query)
{
return isset($_GET[$query]);
}
if (file_exists(__DIR__ . '/url.csv')) // in the same folder
$imgs_array = file(__DIR__ . '/url.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
else if (file_exists('../url.csv')) // in the parent folder
$imgs_array = file('../url.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
else // for vercel runtime
$imgs_array = file('http://' . $_SERVER['HTTP_HOST'] . '/url.csv', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if (count($imgs_array) == 0) $imgs_array = array('https://http.cat/503');
$id = has_query('id') ? $_GET['id'] : "";
if (strlen($id) > 0 && is_numeric($id)) {
settype($id, 'int');
$len = count($imgs_array);
if ($id >= $len || $id < 0) {
$id = array_rand($imgs_array);
} else {
header('Cache-Control: public, max-age=86400');
}
} else {
header('Cache-Control: no-cache');
$id = array_rand($imgs_array);
}
if (has_query('json')) {
header('Access-Control-Allow-Origin: *');
header('Content-Type: application/json');
echo json_encode(array('id' => $id, 'url' => $imgs_array[$id]));
} else if (has_query('raw')) {
if (!ALLOW_RAW_OUTPUT) {
header('HTTP/1.1 403 Forbidden');
exit();
}
header('Content-Type: image/png');
echo file_get_contents($imgs_array[$id]);
} else {
header('Referrer-Policy: no-referrer');
header('Location: ' . $imgs_array[$id]);
}
exit();
- 根目录新建url.csv
用来存放图片url,一行一个,内容如下
https://img.lovelu.top/random/1.jpg
https://img.lovelu.top/random/2.jpg
初始化好了,如图即可
此时访问你https://api.lovelu.top,就可以看到随机图片了,大家也去试试吧
空空如也!