admin.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace Statistics\Modules;
  3. function admin()
  4. {
  5. $act = isset($_GET['act'])? $_GET['act'] : 'home';
  6. $err_msg = $notice_msg = $suc_msg = $ip_list_str = '';
  7. $action = 'save_server_list';
  8. switch($act)
  9. {
  10. case 'detect_server':
  11. // 创建udp socket
  12. $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  13. socket_set_option($socket, SOL_SOCKET, SO_BROADCAST, 1);
  14. $buffer = json_encode(array('cmd'=>'REPORT_IP'))."\n";
  15. // 广播
  16. socket_sendto($socket, $buffer, strlen($buffer), 0, '255.255.255.255', \Statistics\Web\Config::$ProviderPort);
  17. // 超时相关
  18. $time_start = microtime(true);
  19. $global_timeout = 1;
  20. $ip_list = array();
  21. $recv_timeout = array('sec'=>0,'usec'=>8000);
  22. socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,$recv_timeout);
  23. // 循环读数据
  24. while(microtime(true) - $time_start < $global_timeout)
  25. {
  26. $buf = $host = $port = '';
  27. if(@socket_recvfrom($socket, $buf, 65535, 0, $host, $port))
  28. {
  29. $ip_list[$host] = $host;
  30. }
  31. }
  32. // 过滤掉已经保存的ip
  33. foreach($ip_list as $ip)
  34. {
  35. if(!isset(\Statistics\Lib\Cache::$ServerIpList[$ip]))
  36. {
  37. $ip_list_str .= $ip."\r\n";
  38. }
  39. }
  40. $action = 'add_to_server_list';
  41. break;
  42. case 'add_to_server_list':
  43. if(empty($_POST['ip_list']))
  44. {
  45. $err_msg = "保存的ip列表为空";
  46. break;
  47. }
  48. $ip_list = explode("\n", $_POST['ip_list']);
  49. if($ip_list)
  50. {
  51. foreach($ip_list as $ip)
  52. {
  53. $ip = trim($ip);
  54. if(false !== ip2long($ip))
  55. {
  56. \Statistics\Lib\Cache::$ServerIpList[$ip] = $ip;
  57. }
  58. }
  59. }
  60. $suc_msg = "添加成功";
  61. foreach(\Statistics\Lib\Cache::$ServerIpList as $ip)
  62. {
  63. $ip_list_str .= $ip."\r\n";
  64. }
  65. break;
  66. case 'save_server_list':
  67. if(empty($_POST['ip_list']))
  68. {
  69. $err_msg = "保存的ip列表为空";
  70. break;
  71. }
  72. \Statistics\Lib\Cache::$ServerIpList = array();
  73. $ip_list = explode("\n", $_POST['ip_list']);
  74. if($ip_list)
  75. {
  76. foreach($ip_list as $ip)
  77. {
  78. $ip = trim($ip);
  79. if(false !== ip2long($ip))
  80. {
  81. \Statistics\Lib\Cache::$ServerIpList[$ip] = $ip;
  82. }
  83. }
  84. }
  85. $suc_msg = "添加成功";
  86. foreach(\Statistics\Lib\Cache::$ServerIpList as $ip)
  87. {
  88. $ip_list_str .= $ip."\r\n";
  89. }
  90. break;
  91. }
  92. include ST_ROOT . '/Views/header.tpl.php';
  93. include ST_ROOT . '/Views/admin.tpl.php';
  94. include ST_ROOT . '/Views/footer.tpl.php';
  95. }