<?php /* API Name:倾丞本地随机图片API Description:支持8种方式返回图片数据--https://blog.qcair.cc/cnapi.html Version:1.0.16 ForPHP:5.6+ Author:倾丞(Jochen)/瑾忆(自醉) Author Url:https://blog.qcair.cc/ Author Email:admin@qcair.cc */ //使用Curl获取远程数据模块 function get_curl($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_URL, $url); $response = curl_exec($ch); curl_close($ch); //-------如果请求为空 if (empty($response)) { return false; } return $response; } //------------设置区域开始------------ $APIname = "QCAPI-CN-Wallpaper"; //此处填写API名称 $domainPrefix = 'api.ixingchen.org.cn'; //API域名设置 $Block_IP = "off"; //开启恶意IP拦截功能则填写on,反之填写off,如果你的网站开启CDN,请先浏览第80-83行后再开启该功能 $base64Times = "10"; //由于Base64转码会消耗服务器资源,此处填写每分钟限制Base64数据输出次数,例如填写10则单用户每分钟只可调用返回数据10次,填写0或负数则不限制每分钟调用次数 $img_Array = glob("images/wallpaper/*.{gif,jpg,png,jpeg,JPG,PNG,GIF,JPEG,webp}",GLOB_BRACE); //这将获得指定文件夹中所有gif,jpg和png,jpeg图像的数组 //------------设置区域结束------------ //从数组中选择随机图像 $imageFile = array_rand($img_Array); //生成返回的图像URL $imageUrl='https://'.$domainPrefix.'/'.$img_Array[$imageFile]; //反爬虫,反扫描器模块 //获取用户UA信息 $UserUA = $_SERVER['HTTP_USER_AGENT']; //将恶意USER_AGENT存入数组 $BAN_UA = array("FeedDemon", "BOT/0.1 (BOT for JCE)", "CrawlDaddy", "Java", "Feedly", "UniversalFeedParser", "ApacheBench", "Swiftbot", "ZmEu", "Indy Library", "oBot", "jaunty", "YandexBot", "AhrefsBot", "MJ12bot", "WinHttp", "EasouSpider", "HttpClient", "Microsoft URL Control", "YYSpider", "Python-urllib", "lightDeckReports Bot", "HTTrack ", "Apache-HttpClient", "Audit ", "DirBuster", "Pangolin", "Nmap", "sqln", "Hydra", "Parser", "Libwww", "BBBike", "sqlmap", "w3af", "OWASP", "Nikto", "Fimap", "Havij", "BabyKrokodil", "Netsparker", "httperf"); function is_BAN_UA($val) { $UserUA = $_SERVER['HTTP_USER_AGENT']; return stripos($UserUA, $val); } $is_BAN_UA_Arr = array_filter($BAN_UA, "is_BAN_UA"); //禁止空USER_AGENT if (!$UserUA) { header("Content-type: text/html; charset=utf-8"); die('您的访问USER_AGENT被系统判定空,已被安全模块拦截!'); } else { //判断是否为恶意UA if (count($is_BAN_UA_Arr)) { header("Content-type: text/html; charset=utf-8"); die('您的访问USER_AGENT被系统判定为恶意用户,已被安全模块拦截!'); } } //根据用户的浏览器cookie确定同一用户访问API次数 if (!isset($_COOKIE['visits'])) $_COOKIE['visits'] = 0; $visits = $_COOKIE['visits'] + 1; setcookie('visits',$visits,time()+50); //禁止恶意IP地址访问(调用Kos工具箱kostool.cn恶意IP黑名单) if ($Block_IP == 'on' && $visits > 240) { $UserIP = $_SERVER["REMOTE_ADDR"]; //普通获取访客真实IP //$UserIP = $_SERVER["HTTP_X_FORWARDED_FOR"]; //腾讯云CDN获取访客真实IP //$UserIP = $_SERVER["HTTP_CF_CONNECTING_IP"]; //CloudflareCDN获取访客真实IP //注:其他CDN获取方法需要自己查看官方文档或输出Header信息后提取头部取值,若无法理解请关闭恶意IP拦截功能以确保API的正常使用 $BanIP = "http://cloudcc.kostool.cn/kos-defense-cc-attack/KosCcBlackIP.txt"; $KosCcBlackIP_path = "./Main/KosCcBlackIP.txt"; //缓存文件不存在或者超过七天就重新更新一次 if (!file_exists($KosCcBlackIP_path) || floor((time() - filemtime($KosCcBlackIP_path)) / 86400) > 7) { $BanIPData = get_curl($BanIP); file_put_contents($KosCcBlackIP_path, $BanIPData); } else { $BanIPData = file_get_contents($KosCcBlackIP_path); } if (!$BanIPData) { die("<strong>Warning:</strong>资源文件不存在或路径名称填写错误," . $APIname . " 运行出错位置 file:" . basename(__FILE__) . " on line " . __LINE__ ); } else { if (stripos($BanIPData, $UserIP)) { http_response_code('444'); header("HTTP/1.1 444 Bad Request"); die(); } } } //XML返回 function arrayXml($array, $wrap='RETURN', $upper=true) { // set initial value for XML string # $xml = ''; // wrap XML with $wrap TAG if ($wrap != null) { $xml = "<$wrap>\n"; } // main loop foreach ($array as $key=>$value) { // set tags in uppercase if needed if ($upper == true) { $key = strtoupper($key); } // append to XML string $xml .= "<$key>" . htmlspecialchars(urldecode(trim($value))) . "</$key>"; } // close wrap TAG if needed if ($wrap != null) { $xml .= "\n</$wrap>\n"; } // retu
这段代码是一个名为“倾丞本地随机图片API”的PHP脚本,它支持多种方式返回图片数据。以下是代码的主要功能和组成部分的概述:
-
Curl获取远程数据模块:定义了一个名为
get_curl
的函数,用于通过Curl获取远程数据。该函数设置了Curl选项,如不验证SSL证书、获取数据并返回。如果请求为空,则返回false
。1 -
设置区域:在代码中有一个设置区域,用户可以定义API名称、API域名、是否开启恶意IP拦截功能、Base64数据输出次数限制以及图片文件的存储路径。1
-
随机图片选择:通过
glob
函数获取指定文件夹中所有支持的图片格式的文件路径,并使用array_rand
函数从这些文件中随机选择一个图片文件。1 -
生成返回的图像URL:将随机选择的图片文件路径与API域名结合,生成一个完整的图片URL。1
-
反爬虫、反扫描器模块:获取用户UA信息,并与预定义的恶意USER_AGENT列表进行比较,以判断是否为恶意访问。如果检测到恶意UA,将终止脚本执行。1
-
用户访问次数统计:通过浏览器cookie记录同一用户的访问次数,如果访问次数超过限制,将触发恶意IP地址访问的检测。1
-
禁止恶意IP地址访问:如果开启了恶意IP拦截功能,并且用户的访问次数超过限制,将从Kos工具箱获取恶意IP黑名单,并检查用户IP是否在黑名单中。如果是,则终止脚本执行。1
-
XML返回函数:定义了一个名为
arrayXml
的函数,用于将数组转换为XML格式的字符串。该函数允许用户指定XML的包装标签和是否将标签转换为大写。1
代码中还包含了一些注释,提供了对各个部分功能的解释和使用说明。13456789
如何确保图片API的图片质量和版权问题?
确保图片API的图片质量和版权问题,首先需要从合法的图库获取图片资源。推荐使用如wallhaven.cc、Pixbay、Pexels等免费图库,这些图库提供的图片通常具有较高的质量和版权保障。1 此外,还需注意图片的存储和调用方式,确保图片在传输和显示过程中的清晰度和完整性。
关于版权问题,需要避免侵犯他人的版权。可以通过以下策略来规避版权风险:
- 使用明确标注为免费或公共领域的图片。
- 确保图片的使用符合其授权协议。
- 在使用图片时,注明图片来源和作者,尊重原创者的权益。
- 避免使用未经授权的图片,尤其是商业用途。
- 考虑购买图片版权或与图片作者协商授权使用。1112
在使用倾丞本地随机图片API时,如何实现图片的自动更新和维护?
倾丞本地随机图片API支持多种方式返回图片数据,可以实现图片的自动更新和维护。以下是一些实现方法:
- 定期更新图片库:可以设置一个定时任务,定期从图库或其他图片源下载新图片,更新本地图片库。
- 使用版本控制:通过版本控制系统(如Git)管理图片资源,每次更新后提交更改,确保图片库的版本控制和历史记录。
- 自动化脚本:编写自动化脚本,定期检查图片库中的图片数量和质量,自动替换低质量或重复的图片。
- 用户反馈机制:提供用户反馈机制,让用户报告问题图片或推荐新图片,根据用户反馈进行图片库的更新和维护。
- 监控和分析:利用监控工具分析API的使用情况,根据访问量和用户行为数据,优化图片库的内容和结构。2
除了反爬虫和反扫描器模块,还有哪些安全措施可以提高API的安全性?
提高API安全性除了反爬虫和反扫描器模块外,还可以采取以下措施:
- User-Agent检测:检查请求头中的User-Agent信息,阻止非正常用户代理的访问。2125
- IP限制:对访问频率过高的IP地址进行限制,防止恶意访问。
- 验证码:在关键操作中加入验证码,防止自动化工具的攻击。
- robots.txt限制:通过robots.txt文件限制爬虫的访问范围。
- 数据加密:对传输的数据进行加密,防止数据在传输过程中被截获。
- WAF(Web应用防火墙):使用WAF检测和拦截恶意请求,保护API安全。2628
- API密钥管理:为API请求设置密钥,并对密钥进行严格管理,防止密钥泄露。
- 访问日志监控:记录和分析API的访问日志,及时发现和处理异常访问行为。
- 安全审计:定期对API进行安全审计,发现并修复潜在的安全漏洞。
如何在不同的设备和屏幕尺寸上实现图片的自适应显示?
在不同的设备和屏幕尺寸上实现图片的自适应显示,可以采用以下方法:
- 使用CSS媒体查询:通过媒体查询(Media Queries)根据不同的屏幕尺寸应用不同的样式规则。3031
- 百分比宽度:设置图片的宽度为百分比,使其根据容器宽度自动调整大小。
- max-width属性:使用max-width属性限制图片的最大宽度,使其在小屏幕上不会超出容器。
- srcset和sizes属性:使用HTML的srcset和sizes属性,为不同分辨率的屏幕提供不同尺寸的图片。34
- 使用框架和库:利用Bootstrap等前端框架提供的响应式设计工具,实现图片的自适应显示。32
- 背景图片自适应:使用CSS的background-size属性,使背景图片自动适应容器尺寸。36
- 流体网格布局:采用流体网格布局技术,使页面元素根据屏幕宽度自动调整布局。35
- 视口单位(vw/vh):使用视口宽度(vw)和视口高度(vh)单位,使图片大小与视口尺寸成比例。
如果想将图片API部署在不同的服务器上,需要做哪些调整和优化?
将图片API部署在不同的服务器上,需要考虑以下调整和优化:
- 服务器选择:根据API的访问量和性能需求,选择合适的服务器类型和配置。
- 负载均衡:使用负载均衡技术,将