赛亿官网

common.php 7.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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. /**inet_aton()
  13. * 将ip地址转为整数
  14. */
  15. function print_json($data)
  16. {
  17. echo json_encode($data);
  18. }
  19. function inet_aton($ip = '')
  20. {
  21. $array = array();
  22. $ipn = 0;
  23. if ($ip != '') {
  24. $array = explode('.', $ip);
  25. $arr = array_reverse($array);
  26. $dd = 256;
  27. $ipn = 0;
  28. for ($i = 0; $i < 4; $i ++) {
  29. $ipn += $arr[$i]*pow($dd, $i);
  30. }
  31. }
  32. return $ipn;
  33. }
  34. /**2017-11-15
  35. * inet_ntoa()
  36. * 将数据库取出来的ip整数形转为ip地址
  37. * 参数说明 $dd=256;第一次对256取余活的ip地址第4个,第二次活的第三个,依次类推
  38. */
  39. function inet_ntoa($ip = '0')
  40. {
  41. $array=array();
  42. $dd=256;
  43. for ($i=4; $i>0; $i--) {
  44. $array[$i] = $ip%$dd;
  45. $ip = intval(floor($ip/$dd));
  46. }
  47. return $array[1].'.'.$array[2].'.'.$array[3].'.'.$array[4];
  48. }
  49. /**
  50. * 数组去首尾空格
  51. */
  52. function trim_value(&$value)
  53. {
  54. if (!is_array($value)) {
  55. $value = trim($value);
  56. } else {
  57. $value = trim_array($value);
  58. }
  59. }
  60. function trim_array($arr)
  61. {
  62. array_walk($arr, 'trim_value');
  63. return $arr;
  64. }
  65. //获取浏览器信息
  66. function browser_info()
  67. {
  68. if (!empty($_SERVER['HTTP_USER_AGENT'])) {
  69. $br = $_SERVER['HTTP_USER_AGENT'];
  70. if (preg_match('/MSIE/i', $br)) {
  71. $br = 'MSIE';
  72. } elseif (preg_match('/Firefox/i', $br)) {
  73. $br = 'Firefox';
  74. } elseif (preg_match('/Edge/i', $br)) {
  75. $br = 'Edge';
  76. } elseif (preg_match('/Chrome/i', $br)) {
  77. $br = 'Chrome';
  78. } elseif (preg_match('/Safari/i', $br)) {
  79. $br = 'Safari';
  80. } elseif (preg_match('/Opera/i', $br)) {
  81. $br = 'Opera';
  82. } else {
  83. $br = 'Other';
  84. }
  85. return $br;
  86. } else {
  87. return 'unknow';
  88. }
  89. }
  90. //获取操作系统
  91. function os_info()
  92. {
  93. if (!empty($_SERVER['HTTP_USER_AGENT'])) {
  94. $os = $_SERVER['HTTP_USER_AGENT'];
  95. if (preg_match('/win/i', $os)) {
  96. $os = 'Windows';
  97. } elseif (preg_match('/mac/i', $os)) {
  98. $os = 'MAC';
  99. } elseif (preg_match('/linux/i', $os)) {
  100. $os = 'Linux';
  101. } elseif (preg_match('/unix/i', $os)) {
  102. $os = 'Unix';
  103. } elseif (preg_match('/bsd/i', $os)) {
  104. $os = 'BSD';
  105. } else {
  106. $os = 'Other';
  107. }
  108. return $os;
  109. } else {
  110. return 'unknow';
  111. }
  112. }
  113. /*无限级分类*/
  114. function make_tree($list, $pk = 'id', $pid = 'pid', $child = 'child', $root = 0)
  115. {
  116. $tree=array();
  117. foreach ($list as $key => $val) {
  118. if ($val[$pid]==$root) {
  119. unset($list[$key]);
  120. if (!empty($list)) {
  121. $child = make_tree($list, $pk, $pid, $child, $val[$pk]);
  122. if (!empty($child)) {
  123. $val['child']=$child;
  124. } else {
  125. $val['child']= array();
  126. }
  127. }
  128. $tree[]=$val;
  129. }
  130. }
  131. return $tree;
  132. }
  133. function obj_tree($list, $pk = 'id', $pid = 'pid', $child = 'child', $root = 0)
  134. {
  135. $tree=array();
  136. foreach ($list as $key => $val) {
  137. if ($val->pid == $root) {
  138. unset($list->$key);
  139. if (!empty($list)) {
  140. $child = obj_tree($list, $pk, $pid, $child, $val[$pk]);
  141. if (!empty($child)) {
  142. $val->child=$child;
  143. } else {
  144. $val->child = array();
  145. }
  146. }
  147. $tree[]=$val;
  148. }
  149. }
  150. return $tree;
  151. }
  152. /**
  153. * 生成缩略图
  154. */
  155. function make_thumb($filename, $width = 364, $height = 168, $mode = 6)
  156. {
  157. $file = ROOT_PATH . 'public' . DS . 'uploads'. DS . $filename;
  158. $ext = pathinfo($file, PATHINFO_EXTENSION);
  159. $thumbname = str_replace('.' . $ext, '', $filename);
  160. $thumbname .='_thumb.' . $ext;
  161. $image = \think\Image::open($file);
  162. $result = $image->thumb($width, $height, $mode)->save(ROOT_PATH . 'public' . DS . 'uploads'. DS . $thumbname);
  163. if ($result) {
  164. return $thumbname;
  165. } else {
  166. return false;
  167. }
  168. }
  169. /**
  170. * 使用递归遍历获取文件夹的大小
  171. */
  172. function get_dir_size($dirname)
  173. {
  174. static $tot; //这里把$tot定义为静态的,表示$tot全局只有这一个变量
  175. $ds = opendir($dirname); //创建一个目录资源, 传入的目录就是资源
  176. while ($file = readdir($ds)) { //从目录中读取到条目
  177. //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
  178. $path = $dirname . "/" . $file;
  179. //判断,如果是 . 或者 ..的目录就过滤掉
  180. if ($file != "." && $file != "..") {
  181. if (is_dir($path)) { //判断如果找到的是目录
  182. get_dir_size($path); //如果得到是文件夹,然后递归调用一次方法传入的$path文件夹路径就是判断得到的文件夹赋值给$dirname
  183. } else {
  184. $tot += filesize($path);
  185. }
  186. }
  187. }
  188. return $tot;
  189. }
  190. /**
  191. * 递归删除文件夹
  192. */
  193. function deldir($path)
  194. {
  195. //如果是目录则继续
  196. if (is_dir($path)) {
  197. //扫描一个文件夹内的所有文件夹和文件并返回数组
  198. $p = scandir($path);
  199. foreach ($p as $val) {
  200. //排除目录中的.和..
  201. if ($val != "." && $val != "..") {
  202. //如果是目录则递归子目录,继续操作
  203. if (is_dir($path . $val)) {
  204. //子目录中操作删除文件夹和文件
  205. deldir($path . $val . '/');
  206. //目录清空后删除空文件夹
  207. @rmdir($path . $val . '/');
  208. } else {
  209. //如果是文件直接删除
  210. unlink($path . $val);
  211. }
  212. }
  213. }
  214. }
  215. }
  216. /**
  217. * 获取指定月份的第一天开始和最后一天结束的时间戳
  218. *
  219. * @param int $y 年份 $m 月份
  220. * @return array(本月开始时间,本月结束时间)
  221. */
  222. function mFristAndLast($y = "", $m = ""){
  223. if ($y == "") $y = date("Y");
  224. if ($m == "") $m = date("m");
  225. $m = sprintf("%02d", intval($m));
  226. $y = str_pad(intval($y), 4, "0", STR_PAD_RIGHT);
  227. $m>12 || $m<1 ? $m=1 : $m=$m;
  228. $firstday = strtotime($y . $m . "01000000");
  229. $firstdaystr = date("Y-m-01", $firstday);
  230. $lastday = strtotime(date('Y-m-d 23:59:59', strtotime("$firstdaystr +1 month -1 day")));
  231. return [ "firstday" => $firstday, "lastday" => $lastday];
  232. }