report.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <?php
  2. require_once "./SleekDB/SleekDB.php";
  3. require_once "./config.php";
  4. function maskLastSegment($ip) {
  5. $ipaddr = inet_pton($ip);
  6. if (strlen($ipaddr) == 4) {
  7. $ipaddr[3] = chr(0);
  8. } elseif (strlen($ipaddr) == 16) {
  9. $ipaddr[14] = chr(0);
  10. $ipaddr[15] = chr(0);
  11. } else {
  12. return "";
  13. }
  14. return rtrim(inet_ntop($ipaddr),"0")."*";
  15. }
  16. $store = \SleekDB\SleekDB::store('speedlogs', './',[
  17. 'auto_cache' => false,
  18. 'timeout' => 120
  19. ]);
  20. $reportData = [
  21. "key" => sha1(filter_var($_POST['key'], FILTER_SANITIZE_STRING)),
  22. "ip" => maskLastSegment(filter_var($_POST['ip'], FILTER_SANITIZE_STRING)),
  23. "isp" => filter_var($_POST['isp'], FILTER_SANITIZE_STRING),
  24. "addr" => filter_var($_POST['addr'], FILTER_SANITIZE_STRING),
  25. "dspeed" => (double) filter_var($_POST['dspeed'], FILTER_SANITIZE_STRING),
  26. "uspeed" => (double) filter_var($_POST['uspeed'], FILTER_SANITIZE_STRING),
  27. "ping" => (double) filter_var($_POST['ping'], FILTER_SANITIZE_STRING),
  28. "jitter" => (double) filter_var($_POST['jitter'], FILTER_SANITIZE_STRING),
  29. "created" => date('Y-m-d H:i:s', time()),
  30. ];
  31. if (empty($reportData['ip'])) exit;
  32. if (SAME_IP_MULTI_LOGS) {
  33. $oldLog = $store->where('key', '=', $reportData['key'])->fetch();
  34. } else {
  35. $oldLog = $store->where('ip', '=', $reportData['ip'])->orderBy( 'desc', '_id' )->fetch();
  36. }
  37. if (is_array($oldLog) && empty($oldLog)) {
  38. $results = $store->insert($reportData);
  39. if ($results['_id'] > MAX_LOG_COUNT) {
  40. $store->where('_id', '=', $results['_id'] - MAX_LOG_COUNT)->delete();
  41. }
  42. } else {
  43. $id = $oldLog[0]['_id'];
  44. if (SAME_IP_MULTI_LOGS) {
  45. $key = $reportData['key'];
  46. unset($reportData['key']);
  47. $store->where('_id', '=', $id)->update($reportData);
  48. } else {
  49. $ip = $reportData['ip'];
  50. unset($reportData['ip']);
  51. $store->where('_id', '=', $id)->update($reportData);
  52. }
  53. }