php刷新过于频繁自动加ip黑名单

本文阅读 1 分钟
首页 PHP笔记 正文
  1. <?php
  2. $ip = get_client_ip_extend();//获取当前访问者的ip
  3. $logFilePath = '/ippath/';//日志记录文件保存目录
  4. $fileht = '.htaccess2';//被禁止的ip记录文件
  5. $allowtime = 60;//防刷新时间
  6. $allownum = 10;//防刷新次数
  7. $allowRefresh = 120;//在允许刷新次数之后加入禁止ip文件中
  8. if (!file_exists($fileht)) {
  9. file_put_contents($fileht, '');
  10. }
  11. $filehtarr&nbsp;=&nbsp;@file($fileht);
  12. if (in_array($ip&nbsp;.&nbsp;&quot;\r\n&quot;,&nbsp;$filehtarr)) {
  13. $message = '警告:你的IP已经被禁止了!';
  14. if ($type === 'API') {
  15. return $message;
  16. }
  17. $this-&gt;error($message);
  18. }
  19. //加入禁止ip
  20. $time = time();
  21. $fileforbid&nbsp;=&nbsp;$logFilePath . 'forbidchk.dat';
  22. if (file_exists($fileforbid)) {
  23. if ($time&nbsp;-&nbsp;filemtime($fileforbid) > 30) {
  24. @unlink($fileforbid);
  25. } else {
  26. $fileforbidarr&nbsp;=&nbsp;@file($fileforbid);
  27. if ($ip&nbsp;==&nbsp;substr($fileforbidarr[0], 0, strlen($ip))) {
  28. if ($time&nbsp;-&nbsp;substr($fileforbidarr[1], 0, strlen($time)) > 120) {
  29. @unlink($fileforbid);
  30. } else if ($fileforbidarr[2]&nbsp;&gt;&nbsp;$allowRefresh) {
  31. file_put_contents($fileht,&nbsp;$ip . "rn", FILE_APPEND);
  32. @unlink($fileforbid);
  33. } else {
  34. $fileforbidarr[2]++;
  35. file_put_contents($fileforbid,&nbsp;$fileforbidarr);
  36. }
  37. }
  38. }
  39. }
  40. //防刷新
  41. $str = '';
  42. $file&nbsp;=&nbsp;$logFilePath . 'ipdate.dat';
  43. if (!file_exists($logFilePath)&nbsp;&amp;&amp;&nbsp;!is_dir($logFilePath)) {
  44. mkdir($logFilePath, 0777);
  45. }
  46. if (!file_exists($file)) {
  47. file_put_contents($file, '');
  48. }
  49. $uri&nbsp;=&nbsp;$_SERVER['REQUEST_URI'];//获取当前访问的网页文件地址
  50. $checkip&nbsp;=&nbsp;md5($ip);
  51. $checkuri&nbsp;=&nbsp;md5($uri);
  52. $yesno = true;
  53. $ipdate&nbsp;=&nbsp;@file($file);
  54. foreach ($ipdate&nbsp;as&nbsp;$k => $v) {
  55. $iptem&nbsp;=&nbsp;substr($v, 0, 32);
  56. $uritem&nbsp;=&nbsp;substr($v, 32, 32);
  57. $timetem&nbsp;=&nbsp;substr($v, 64, 10);
  58. $numtem&nbsp;=&nbsp;substr($v, 74);
  59. if ($time&nbsp;-&nbsp;$timetem < $allowtime) {
  60. if ($iptem&nbsp;!=&nbsp;$checkip) {
  61. $str&nbsp;.=&nbsp;$v;
  62. } else {
  63. $yesno = false;
  64. if ($uritem&nbsp;!=&nbsp;$checkuri) {
  65. $str&nbsp;.=&nbsp;$iptem . $checkuri&nbsp;.&nbsp;$time . "rn";
  66. } else if ($numtem&nbsp;&lt;&nbsp;$allownum) {
  67. $str&nbsp;.=&nbsp;$iptem . $uritem&nbsp;.&nbsp;$timetem . ($numtem + 1) . "rn";
  68. } else {
  69. if (!file_exists($fileforbid)) {
  70. $addforbidarr&nbsp;=&nbsp;array($ip . "rn", time() . "rn", 1);
  71. file_put_contents($fileforbid,&nbsp;$addforbidarr);
  72. }
  73. file_put_contents($logFilePath&nbsp;.&nbsp;&#39;forbided_ip.log&#39;,&nbsp;$ip . '--' . date('Y-m-d H:i:s', time()) . '--' . $uri . "rn", FILE_APPEND);
  74. //$timepass&nbsp;=&nbsp;$timetem + $allowtime&nbsp;-&nbsp;$time;
  75. $message = '警告:不要刷新的太频繁!';
  76. if ($type === 'API') {
  77. return $message;
  78. }
  79. $this-&gt;error($message);
  80. }
  81. }
  82. }
  83. }
  84. if ($yesno) {
  85. $str&nbsp;.=&nbsp;$checkip . $checkuri&nbsp;.&nbsp;$time . "rn";
  86. }
  87. file_put_contents($file,&nbsp;$str);
  88. ?>
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

一个html5的多人游戏-暴走大乱斗[baogame]
« 上一篇 06-03
行内元素有哪些?块级元素有哪些? 空(void)元素有那些?行内元素和块级元素有什么区别?
下一篇 » 12-08

发表评论

惪特博客
  • 文章总数:
    18474 篇
  • 评论总数:
    53217 条
  • 标签总数:
    8841 个
  • 总浏览量:
    21063547 次
  • 最后更新:
    2024年12月07日

最多点赞

随便看看

标签TAG