源码介绍
Random-Image是一款开源的随机图片API源码,可以快速搭建一个随机图片程序,完全隐藏图片文件的真实地址,支持调用域名白名单,支持多文件夹分类目录,前端调用支持使用随机数载入。
源码安装方法
下载代码,解压至你域名文件夹根目录
开启 Apache 或者 nginx 的伪静态功能
访问:你的域名/images
其他配置方法:
打开 images.php 文件,添加域名白名单与默认文件夹即可。
<?php error_reporting(E_ERROR); require_once 'imgdata.php'; $karnc = new imgdata(); /** * 遍历获取目录下的指定类型的文件 * @param $path * @param array $files * @return array */ function getfiles($path, $allowFiles, &$files = array()) { if (!is_dir($path)) return null; if (substr($path, strlen($path) - 1) != '/') $path .= '/'; $handle = opendir($path); while (false !== ($file = readdir($handle))) { if ($file != '.' && $file != '..') { $path2 = $path . $file; if (is_dir($path2)) { getfiles($path2, $allowFiles, $files); } else { if (preg_match("/\.(" . $allowFiles . ")$/i", $file)) { $files[] = substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])); } } } } return $files; } /** * 域名白名单校验函数 * @param $domain_list * @return true/false *在下面修改为你的网站域名,在下面列表中的网站才能调用API */ function checkReferer($domain_list = array( 'haremu.com', 'acg.sx' )) { $status = false; $refer = $_SERVER['HTTP_REFERER']; //前一URL if ($refer) { $referhost = parse_url($refer); /**来源地址主域名**/ $host = strtolower($referhost['host']); if ($host == $_SERVER['HTTP_HOST'] || in_array($host, $domain_list)) { $status = true; } } return $status; } //列出指定目录下的图片 $CONFIG = array(); $CONFIG['imageManagerAllowFiles'] = array(".png", ".jpg", ".jpeg", ".gif", ".bmp"); $base_Path = '/picture/'; //图片默认主目录 $category = 'a'; //图片默认分类目录 if ($_GET['folder']) { $folder = trim($_GET['folder']); $CONFIG['imageManagerListPath'] = $base_Path . $folder . '/'; //有GET访问的分类目录 } else { $CONFIG['imageManagerListPath'] = $base_Path . $category . '/'; //无GET访问的默认目录 } $allowFiles = $CONFIG['imageManagerAllowFiles']; $path = $CONFIG['imageManagerListPath']; $allowFiles = substr(str_replace(".", "|", join("", $allowFiles)), 1); //获取文件列表 $path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "" : "/") . $path; $files = getfiles($path, $allowFiles); if (!count($path)) { return "抱歉,没有找到匹配的文件!"; } //获取指定范围的列表 $len = count($files); for ($i = 0, $list = array(); $i < $len; $i++) { $list[] = $files[$i]; } $rand = array_rand($list, 1); $img = $list[$rand]; $imgFile = $_SERVER['DOCUMENT_ROOT'] . (substr($list[$rand], 0, 1) == "/" ? "" : "/") . $img; $imgNot = $_SERVER['DOCUMENT_ROOT'] . '/' . 'nico.gif'; //无授权域名图片 $refer = $_SERVER['HTTP_REFERER']; //前一URL //存在前一URL if ($refer) { if (!checkReferer()) { $karnc->getdir($imgNot); $karnc->img2data(); $karnc->data2img(); die; } else { $karnc->getdir($imgFile); $karnc->img2data(); $karnc->data2img(); die; } } else { //直接访问API地址 $imgWeb = file_get_contents('imgweb.html'); echo $imgWeb; die; } ?>
多文件夹说明: 第二个文件夹无需配置,直接使用 URL 传递参数即可。
比如: 默认文件夹的分类,调用的域名是:“ 你的域名/images ”
其它文件夹的分类,调用是域名是:“ 你的域名/images/文件夹名 ”
注意! 若要使用随机数调用,必须启用 Apache 或者 Nginx 的伪静态功能,否则空白输出。
Nginx 用户需要手动添加 nginx.conf 文件里面的伪静态规则到你的域名配置中去……
rewrite ^/images$ /images.php last; rewrite ^/images/(.*?)$ /images.php?folder=$1 last;
#下面是子目录例子:
rewrite ^/api/images$ /api/images.php last; rewrite ^/api/images/(.*?)$ /api/images.php?folder=$1 last;
Apache伪静态
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^images$ images.php [L,QSA] RewriteRule ^images/(.*?)$ images.php?folder=$1 [L] </IfModule>
使用随机数载入的情况通常在一个页面多次调用随机图的时候,比如首页文章列表,否则图片都是一样的。
随机数载入方式:“ 你的域名/images?随机数 ” ,就是原有 URL 上添加一个英文问号和任意随机数。
示例:
<img src="https://wdzzz.com/api/images"> <img src="https://wdzzz.com/api/images/acg"> <img src="https://wdzzz.com/api/images?d8c196951e5bbf3edd158de4"> <img src="https://wdzzz.com/api/images/acg?9f0d34f8ee6f96b56d8902d1">
资源下载
下载价格5 来云币
VIP 8折、终身VIP免费
立即购买仅学习交流,商用请买正版,一切后果由下载用户自行承担。若侵犯了您的权益,请来信通知Email: server@larjie.com。购买即默认同意我们的政策。
原文链接:https://c.larjie.com/random-image/,转载请注明出处。