复制
收藏
提问
研究

<?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

18f5d5cc7
1个月前
全网
文档
学术
百科
知识库
时间不限
自动
参考了48个来源并总结
查看步骤
全网检索信息
PHP
随机图片
API
图片API
服务器
编程
找到“博客园”、“github”、“github”48网站资料
回答完成
回答研究模式
更简洁一些

这段代码是一个名为“倾丞本地随机图片API”的PHP脚本,它支持多种方式返回图片数据。以下是代码的主要功能和组成部分的概述:

  1. Curl获取远程数据模块:定义了一个名为get_curl的函数,用于通过Curl获取远程数据。该函数设置了Curl选项,如不验证SSL证书、获取数据并返回。如果请求为空,则返回false1

  2. 设置区域:在代码中有一个设置区域,用户可以定义API名称、API域名、是否开启恶意IP拦截功能、Base64数据输出次数限制以及图片文件的存储路径。1

  3. 随机图片选择:通过glob函数获取指定文件夹中所有支持的图片格式的文件路径,并使用array_rand函数从这些文件中随机选择一个图片文件。1

  4. 生成返回的图像URL:将随机选择的图片文件路径与API域名结合,生成一个完整的图片URL。1

  5. 反爬虫、反扫描器模块:获取用户UA信息,并与预定义的恶意USER_AGENT列表进行比较,以判断是否为恶意访问。如果检测到恶意UA,将终止脚本执行。1

  6. 用户访问次数统计:通过浏览器cookie记录同一用户的访问次数,如果访问次数超过限制,将触发恶意IP地址访问的检测。1

  7. 禁止恶意IP地址访问:如果开启了恶意IP拦截功能,并且用户的访问次数超过限制,将从Kos工具箱获取恶意IP黑名单,并检查用户IP是否在黑名单中。如果是,则终止脚本执行。1

  8. XML返回函数:定义了一个名为arrayXml的函数,用于将数组转换为XML格式的字符串。该函数允许用户指定XML的包装标签和是否将标签转换为大写。1

代码中还包含了一些注释,提供了对各个部分功能的解释和使用说明。13456789

如何确保图片API的图片质量和版权问题?

确保图片API的图片质量和版权问题,首先需要从合法的图库获取图片资源。推荐使用如wallhaven.cc、Pixbay、Pexels等免费图库,这些图库提供的图片通常具有较高的质量和版权保障。1 此外,还需注意图片的存储和调用方式,确保图片在传输和显示过程中的清晰度和完整性。

关于版权问题,需要避免侵犯他人的版权。可以通过以下策略来规避版权风险:

  1. 使用明确标注为免费或公共领域的图片。
  2. 确保图片的使用符合其授权协议。
  3. 在使用图片时,注明图片来源和作者,尊重原创者的权益。
  4. 避免使用未经授权的图片,尤其是商业用途。
  5. 考虑购买图片版权或与图片作者协商授权使用。1112

在使用倾丞本地随机图片API时,如何实现图片的自动更新和维护?

倾丞本地随机图片API支持多种方式返回图片数据,可以实现图片的自动更新和维护。以下是一些实现方法:

  1. 定期更新图片库:可以设置一个定时任务,定期从图库或其他图片源下载新图片,更新本地图片库。
  2. 使用版本控制:通过版本控制系统(如Git)管理图片资源,每次更新后提交更改,确保图片库的版本控制和历史记录。
  3. 自动化脚本:编写自动化脚本,定期检查图片库中的图片数量和质量,自动替换低质量或重复的图片。
  4. 用户反馈机制:提供用户反馈机制,让用户报告问题图片或推荐新图片,根据用户反馈进行图片库的更新和维护。
  5. 监控和分析:利用监控工具分析API的使用情况,根据访问量和用户行为数据,优化图片库的内容和结构。2

除了反爬虫和反扫描器模块,还有哪些安全措施可以提高API的安全性?

提高API安全性除了反爬虫和反扫描器模块外,还可以采取以下措施:

  1. User-Agent检测:检查请求头中的User-Agent信息,阻止非正常用户代理的访问。2125
  2. IP限制:对访问频率过高的IP地址进行限制,防止恶意访问。
  3. 验证码:在关键操作中加入验证码,防止自动化工具的攻击。
  4. robots.txt限制:通过robots.txt文件限制爬虫的访问范围。
  5. 数据加密:对传输的数据进行加密,防止数据在传输过程中被截获。
  6. WAF(Web应用防火墙):使用WAF检测和拦截恶意请求,保护API安全。2628
  7. API密钥管理:为API请求设置密钥,并对密钥进行严格管理,防止密钥泄露。
  8. 访问日志监控:记录和分析API的访问日志,及时发现和处理异常访问行为。
  9. 安全审计:定期对API进行安全审计,发现并修复潜在的安全漏洞。

如何在不同的设备和屏幕尺寸上实现图片的自适应显示?

在不同的设备和屏幕尺寸上实现图片的自适应显示,可以采用以下方法:

  1. 使用CSS媒体查询:通过媒体查询(Media Queries)根据不同的屏幕尺寸应用不同的样式规则。3031
  2. 百分比宽度:设置图片的宽度为百分比,使其根据容器宽度自动调整大小。
  3. max-width属性:使用max-width属性限制图片的最大宽度,使其在小屏幕上不会超出容器。
  4. srcset和sizes属性:使用HTML的srcset和sizes属性,为不同分辨率的屏幕提供不同尺寸的图片。34
  5. 使用框架和库:利用Bootstrap等前端框架提供的响应式设计工具,实现图片的自适应显示。32
  6. 背景图片自适应:使用CSS的background-size属性,使背景图片自动适应容器尺寸。36
  7. 流体网格布局:采用流体网格布局技术,使页面元素根据屏幕宽度自动调整布局。35
  8. 视口单位(vw/vh):使用视口宽度(vw)和视口高度(vh)单位,使图片大小与视口尺寸成比例。

如果想将图片API部署在不同的服务器上,需要做哪些调整和优化?

将图片API部署在不同的服务器上,需要考虑以下调整和优化:

  1. 服务器选择:根据API的访问量和性能需求,选择合适的服务器类型和配置。
  2. 负载均衡:使用负载均衡技术,将
你觉得结果怎么样?
PHP Curl获取数据的方法
如何使用PHP实现反爬虫功能
PHP中Base64编码的用途和限制
如何使用PHP处理用户访问API次数限制
PHP中如何实现恶意IP地址拦截
PHP XML数据格式转换方法 这些推荐问题基于您提供的PHP代码片段,涵盖了代码中使用的关键技术和可能的查询焦点,如Curl数据获取、反爬虫技术、Base64编码、用户访问限制、IP拦截以及XML数据转换。
相关内容8

倾丞本地随机图片API1

API介绍 支持8种方式返回图片数据,适用于本地图片API需求。

RpicAPI3

自建随机图片API项目 设备自适应,可自定义存储链接。

本地随机图片创建4

创建本地图片库 通过index.php和photos文件夹实现图片随机选择。

简单建立API6

本地API建设 解决外链API不稳定或速度慢的问题。

随机图片API应用7

API稳定性提升 通过GitHub存储和CDN加速实现。

图片链接创建9

图片URL生成 使用picGo等工具批量生成图片链接。

倾丞(Jochen)1

API作者 创建了倾丞本地随机图片API

瑾忆(自醉)1

API作者 与倾丞共同开发了该API

以上内容由AI搜集生成,仅供参考

在线客服