common.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2006-2016 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: 流年 <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. // 应用公共文件
  12. header('Content-Type:text/html;Charset=utf-8');
  13. /**
  14. * 保存后台用户行为
  15. * @param string $remark 日志备注
  16. */
  17. function insert_admin_log($remark)
  18. {
  19. db('user_log')->insert([
  20. 'user_id' => session('admin_auth.id'),
  21. 'uname' => session('admin_auth.uname'),
  22. 'useragent' => request()->server('HTTP_USER_AGENT'),
  23. 'ip' => request()->ip(),
  24. 'url' => request()->url(true),
  25. 'method' => request()->method(),
  26. 'type' => request()->type(),
  27. 'param' => json_encode(request()->param()),
  28. 'remark' => $remark,
  29. 'create_time' => time(),
  30. ]);
  31. }
  32. /**
  33. * @param $str
  34. * @return string
  35. * 驼峰命名法转下划线风格
  36. */
  37. function to_under_score($str)
  38. {
  39. $array = array();
  40. for ($i = 0; $i < strlen($str); $i++) {
  41. if ($str[$i] == strtolower($str[$i])) {
  42. $array[] = $str[$i];
  43. } else {
  44. if ($i > 0) {
  45. $array[] = '-';//想转什么就可以自己设置
  46. }
  47. $array[] = strtolower($str[$i]);
  48. }
  49. }
  50. $result = implode('', $array);
  51. return $result;
  52. }
  53. /**
  54. * 获取用户真实 IP
  55. */
  56. function getIP()
  57. {
  58. static $realip;
  59. if (isset($_SERVER)){
  60. if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
  61. $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  62. } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
  63. $realip = $_SERVER["HTTP_CLIENT_IP"];
  64. } else {
  65. $realip = $_SERVER["REMOTE_ADDR"];
  66. }
  67. } else {
  68. if (getenv("HTTP_X_FORWARDED_FOR")){
  69. $realip = getenv("HTTP_X_FORWARDED_FOR");
  70. } else if (getenv("HTTP_CLIENT_IP")) {
  71. $realip = getenv("HTTP_CLIENT_IP");
  72. } else {
  73. $realip = getenv("REMOTE_ADDR");
  74. }
  75. }
  76. return $realip;
  77. }
  78. //获取城市所在天气情况
  79. function tianqi($chengshi)
  80. {
  81. $url = 'http://wthrcdn.etouch.cn/weather_mini?city='.urlencode($chengshi);
  82. $html = file_get_contents($url);
  83. $jsondata = gzdecode($html);
  84. $data=json_decode($jsondata,true);
  85. $arr=array();
  86. $arr['chengshi']=$data['data']['city'];
  87. $dangtian=$data['data']['forecast'][0];
  88. $arr['gaowen']= str_replace("高温 ",null,$dangtian['high']);
  89. $arr['diwen']= str_replace("低温 ",null,$dangtian['low']);
  90. $arr['tianqi']=$dangtian['type'];
  91. $arr['fengxiang'] = $dangtian['fengxiang'];
  92. $arr['time'] =date("Y-m-d H:i:s");
  93. return $arr;
  94. }
  95. /**
  96. * 检测管理员是否登录(防止用户重复登录)
  97. * @return integer 0/管理员ID
  98. */
  99. function is_admin_login()
  100. {
  101. $admin = session('admin_auth');
  102. if (empty($admin)) {
  103. return 0;
  104. } else {
  105. return session('admin_auth_sign') == data_auth_sign($admin) ? $admin['id'] : 0;
  106. }
  107. }
  108. /**
  109. * 数据签名认证
  110. * @param array $data 被认证的数据
  111. * @return string 签名
  112. */
  113. function data_auth_sign($data)
  114. {
  115. // 数据类型检测
  116. if (!is_array($data)) {
  117. $data = (array)$data;
  118. }
  119. ksort($data); // 排序
  120. $code = http_build_query($data); // url编码并生成query字符串
  121. $sign = sha1($code); // 生成签名
  122. return $sign;
  123. }