common.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. <?php
  2. use think\Db;
  3. function requestPost($url , $post_data = array() ){
  4. // 1. 初始化一个cURL会话
  5. $ch = curl_init();
  6. // 2. 设置请求选项, 包括具体的url
  7. curl_setopt($ch, CURLOPT_URL, $url);
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  9. // 设置请求为post类型
  10. curl_setopt($ch, CURLOPT_POST, 1);
  11. // 添加post数据到请求中
  12. curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
  13. curl_setopt($ch, CURLOPT_HEADER, 0);
  14. // 3. 执行一个cURL会话并且获取相关回复
  15. $response = curl_exec($ch);
  16. // 4. 释放cURL句柄,关闭一个cURL会话
  17. curl_close($ch);
  18. return $response;
  19. }
  20. function requestGet($url , $msg = ''){
  21. // 1. 初始化一个cURL会话
  22. $ch = curl_init();
  23. //设置选项,包括URL
  24. curl_setopt($ch, CURLOPT_URL, $url);
  25. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  26. curl_setopt($ch, CURLOPT_HEADER, 0);
  27. //执行并获取HTML文档内容
  28. $response = curl_exec($ch);
  29. // 4. 释放cURL句柄,关闭一个cURL会话
  30. curl_close($ch);
  31. return $response;
  32. }
  33. function http_curl($url,$type='get',$res='json',$arr=''){
  34. $headers = array();
  35. //根据API的要求,定义相对应的Content-Type
  36. array_push($headers, "Content-Type".":"."application/x-www-form-urlencoded; charset=UTF-8;application/json");
  37. $curl = curl_init();
  38. curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $type);
  39. curl_setopt($curl, CURLOPT_URL, $url);
  40. curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
  41. curl_setopt($curl, CURLOPT_FAILONERROR, false);
  42. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  43. curl_setopt($curl, CURLOPT_HEADER, false);
  44. $output = curl_exec($curl);
  45. curl_close($curl);
  46. if($res=='json'){
  47. if($output === false){
  48. //请求失败,返回错误信息
  49. return curl_error($curl);
  50. }else{
  51. //请求成功,返回信息
  52. return json_decode($output,true);
  53. }
  54. }
  55. }
  56. function curl_get($url)
  57. {
  58. $ch = curl_init();
  59. curl_setopt($ch, CURLOPT_URL, $url);
  60. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  61. $output = curl_exec($ch);
  62. curl_close($ch);
  63. if($output === false){
  64. return curl_error($ch);
  65. }else{
  66. return json_decode($output,true);
  67. }
  68. }
  69. // 获取模板区域
  70. function get_city_area()
  71. {
  72. $field=['id','pid','name'];
  73. $list=Db::name('china_area')->where('pid',0)->field($field)->select();
  74. foreach ($list as $k=>&$v){
  75. $v['children']= Db::name('china_area')->where('pid',$v['id'])->field($field)->select();
  76. }
  77. return $list;
  78. }
  79. //判断字段存在并不为空
  80. function isset_full($arr, $key)
  81. {
  82. if (isset($arr[$key]) && !empty($arr[$key])) {
  83. return true;
  84. } else {
  85. return false;
  86. }
  87. }
  88. //判断字段存在并不为空 并且等于验证值
  89. function isset_full_check($arr, $key,$check_val)
  90. {
  91. if (isset($arr[$key]) && !empty($arr[$key]) && $arr[$key] == $check_val) {
  92. return true;
  93. } else {
  94. return false;
  95. }
  96. }
  97. /**
  98.  * 把返回的数据集转换成Tree
  99.  * @param array $list 要转换的数据集
  100.  * @param string $pk 自增字段(栏目id)
  101.  * @param string $pid parent标记字段
  102.  * @return array
  103.  */
  104. function make_tree($list,$pk='id',$pid='pid',$child='children',$root=0){
  105. if(is_object($list)) $list = $list->toArray();
  106. $tree=array();
  107. $packData=array();
  108. foreach ($list as $data) {
  109. $packData[$data[$pk]] = $data;
  110. }
  111. foreach ($packData as $key =>$val){
  112. if($val[$pid]==$root){//代表跟节点
  113. $tree[]=& $packData[$key];
  114. }else{
  115. $packData[$val[$pid]][$child][]=& $packData[$key]; //找到其父类
  116. }
  117. }
  118. return $tree;
  119. }
  120. /**
  121. * 用于测试打印数组数据
  122. **/
  123. function p($arr)
  124. {
  125. header('content-type:text/html;charset=utf-8');
  126. echo '<pre>';
  127. print_r($arr);
  128. echo '</pre>';
  129. }
  130. /**
  131. * 返回JSON统一格式
  132. *
  133. * @param int $code 返回状态
  134. * @param string $msg 返回提示信息
  135. * @param array $data 返回对象
  136. * @return array
  137. */
  138. function V($code, $msg, $data = array())
  139. {
  140. return array('code' => $code, 'msg' => $msg, 'data' => $data);
  141. }
  142. /**
  143. * 格式化表格导入的时间为php时间
  144. **/
  145. function excel_time_conversion($data){
  146. // excel软件中的日期是从 1900-01-01 开始计算的
  147. //但是php 是从 1970-01-01开始计算的。
  148. //这两者间有一个天数差 25569
  149. $d = 25569; // excel和php之间相差的时间
  150. $t = 24 * 60 * 60; // 一天24小时
  151. return gmdate('Y-m-d', ($data - $d) *$t);
  152. }
  153. /**
  154. * @desc 时间生成
  155. * @param $type 1、本日 2、本周 3、本月 4、本年 5、上个月 6、指定月份
  156. * @return array
  157. */
  158. function mk_time($type,$date){
  159. switch($type){
  160. case 1://本日
  161. $start = mktime(0,0,0,date('m'), date('d'), date('Y'));
  162. $end = mktime(23,59,59,date('m'),date('d'),date('Y'));
  163. break;
  164. case 2://本周
  165. $date_w = date('w');
  166. if($date_w == 0) $date_w = 7;
  167. $start = mktime(0,0,0,date('m'),date('d')-$date_w+1,date('Y'));
  168. $end = mktime(23,59,59,date('m'),date('d')-$date_w+7,date('Y'));
  169. break;
  170. case 3://本月
  171. $start = mktime(0,0,0,date('m'),1,date('Y'));
  172. $end = mktime(23,59,59,date('m'),date('t'),date('Y'));
  173. break;
  174. case 4://本年
  175. $start = mktime(0,0,0,1,1,date('Y'));
  176. $end = mktime(0,0,0,12,31,date('Y'));
  177. break;
  178. case 5://上个月
  179. $start = strtotime(date('Y-m-01 00:00:00',strtotime('-1 month')));
  180. $end = strtotime(date("Y-m-d 23:59:59", strtotime(-date('d').'day')));
  181. break;
  182. case 6://指定月份
  183. $y = $date[0];
  184. $m = $date[1];
  185. $d = date('t', strtotime($y.'-'.$m));
  186. $start = strtotime($y.'-'.$m);
  187. $end = mktime(23,59,59,$m,$d,$y);
  188. break;
  189. default:
  190. $t = mk_time(1,[]);
  191. $start = $t['start'];
  192. $end = $t['end'];
  193. break;
  194. }
  195. return array('start' => $start, 'end' => $end);
  196. }
  197. /**
  198. * 生成log文件
  199. * @param $dir
  200. * @param $content
  201. */
  202. function user_log($dir,$content){
  203. $log_dir=dirname($_SERVER['DOCUMENT_ROOT']).'/runtime/'.$dir;
  204. if(!is_dir($log_dir)){
  205. mkdir($log_dir,0777,true);
  206. }
  207. $filename=date('Y-m-d').'.log';
  208. if(is_array($content)){
  209. $content=json_encode($content,JSON_UNESCAPED_UNICODE);
  210. }
  211. file_put_contents($log_dir.'/'.$filename,date('Y-m-d H:i:s ').$content.PHP_EOL,FILE_APPEND);
  212. }
  213. /**
  214. * 获取订单号
  215. **/
  216. function get_order_sn($user_id)
  217. {
  218. $rand = $user_id < 9999 ? mt_rand(100000, 99999999) : mt_rand(100, 99999);
  219. $order_sn = date('Yhis') . $rand;
  220. $id = str_pad($user_id, (24 - strlen($order_sn)), '0', STR_PAD_BOTH);
  221. return $order_sn . $id;
  222. }
  223. /**
  224. * +----------------------------------------------------------
  225. * 生成随机字符串
  226. * +----------------------------------------------------------
  227. * @param int $length 要生成的随机字符串长度
  228. * @param string $type 随机码类型:0,数字+大小写字母;1,数字;2,小写字母;3,大写字母;4,特殊字符;-1,数字+大小写字母+特殊字符
  229. * +----------------------------------------------------------
  230. * @return string
  231. * +----------------------------------------------------------
  232. */
  233. function randCode($length = 5, $type = 0)
  234. {
  235. $arr = array(1 => "0123456789", 2 => "abcdefghijklmnopqrstuvwxyz", 3 => "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 4 => "~@#$%^&*(){}[]|");
  236. if ($type == 0) {
  237. array_pop($arr);
  238. $string = implode("", $arr);
  239. } elseif ($type == "-1") {
  240. $string = implode("", $arr);
  241. } else {
  242. $string = $arr[$type];
  243. }
  244. $count = strlen($string) - 1;
  245. $code = '';
  246. for ($i = 0; $i < $length; $i++) {
  247. $code .= $string[rand(0, $count)];
  248. }
  249. return $code;
  250. }
  251. /**
  252. * 生成随机昵称/用户名
  253. **/
  254. function generate()
  255. {
  256. $tou = array('快乐', '冷静', '醉熏', '潇洒', '糊涂', '积极', '冷酷', '深情', '粗暴', '温柔', '可爱', '愉快', '义气', '认真', '威武', '帅气', '传统', '漂亮', '自然', '专一', '听话', '昏睡', '狂野', '等待', '搞怪', '幽默', '魁梧', '活泼', '开心', '高兴', '超帅', '留胡子', '坦率', '直率', '轻松', '痴情', '完美', '精明', '无聊', '有魅力', '丰富', '繁荣', '饱满', '炙热', '暴躁', '碧蓝', '俊逸', '英勇', '健忘', '故意', '无心', '土豪', '朴实', '兴奋', '幸福', '淡定', '不安', '阔达', '孤独', '独特', '疯狂', '时尚', '落后', '风趣', '忧伤', '大胆', '爱笑', '矮小', '健康', '合适', '玩命', '沉默', '斯文', '香蕉', '苹果', '鲤鱼', '鳗鱼', '任性', '细心', '粗心', '大意', '甜甜', '酷酷', '健壮', '英俊', '霸气', '阳光', '默默', '大力', '孝顺', '忧虑', '着急', '紧张', '善良', '凶狠', '害怕', '重要', '危机', '欢喜', '欣慰', '满意', '跳跃', '诚心', '称心', '如意', '怡然', '娇气', '无奈', '无语', '激动', '愤怒', '美好', '感动', '激情', '激昂', '震动', '虚拟', '超级', '寒冷', '精明', '明理', '犹豫', '忧郁', '寂寞', '奋斗', '勤奋', '现代', '过时', '稳重', '热情', '含蓄', '开放', '无辜', '多情', '纯真', '拉长', '热心', '从容', '体贴', '风中', '曾经', '追寻', '儒雅', '优雅', '开朗', '外向', '内向', '清爽', '文艺', '长情', '平常', '单身', '伶俐', '高大', '懦弱', '柔弱', '爱笑', '乐观', '耍酷', '酷炫', '神勇', '年轻', '唠叨', '瘦瘦', '无情', '包容', '顺心', '畅快', '舒适', '靓丽', '负责', '背后', '简单', '谦让', '彩色', '缥缈', '欢呼', '生动', '复杂', '慈祥', '仁爱', '魔幻', '虚幻', '淡然', '受伤', '雪白', '高高', '糟糕', '顺利', '闪闪', '羞涩', '缓慢', '迅速', '优秀', '聪明', '含糊', '俏皮', '淡淡', '坚强', '平淡', '欣喜', '能干', '灵巧', '友好', '机智', '机灵', '正直', '谨慎', '俭朴', '殷勤', '虚心', '辛勤', '自觉', '无私', '无限', '踏实', '老实', '现实', '可靠', '务实', '拼搏', '个性', '粗犷', '活力', '成就', '勤劳', '单纯', '落寞', '朴素', '悲凉', '忧心', '洁净', '清秀', '自由', '小巧', '单薄', '贪玩', '刻苦', '干净', '壮观', '和谐', '文静', '调皮', '害羞', '安详', '自信', '端庄', '坚定', '美满', '舒心', '温暖', '专注', '勤恳', '美丽', '腼腆', '优美', '甜美', '甜蜜', '整齐', '动人', '典雅', '尊敬', '舒服', '妩媚', '秀丽', '喜悦', '甜美', '彪壮', '强健', '大方', '俊秀', '聪慧', '迷人', '陶醉', '悦耳', '动听', '明亮', '结实', '魁梧', '标致', '清脆', '敏感', '光亮', '大气', '老迟到', '知性', '冷傲', '呆萌', '野性', '隐形', '笑点低', '微笑', '笨笨', '难过', '沉静', '火星上', '失眠', '安静', '纯情', '要减肥', '迷路', '烂漫', '哭泣', '贤惠', '苗条', '温婉', '发嗲', '会撒娇', '贪玩', '执着', '眯眯眼', '花痴', '想人陪', '眼睛大', '高贵', '傲娇', '心灵美', '爱撒娇', '细腻', '天真', '怕黑', '感性', '飘逸', '怕孤独', '忐忑', '高挑', '傻傻', '冷艳', '爱听歌', '还单身', '怕孤单', '懵懂', '迷你', '鲜艳', '飞快', '真实', '清新', '可耐');
  257. $do = array("的", "爱", "", "与", "给", "扯", "和", "用", "方", "打", "就", "迎", "向", "踢", "笑", "闻", "有", "等于", "保卫", "演变");
  258. $wei = array('嚓茶', '凉面', '便当', '毛豆', '花生', '可乐', '灯泡', '哈密瓜', '野狼', '背包', '眼神', '缘分', '雪碧', '人生', '牛排', '蚂蚁', '飞鸟', '灰狼', '斑马', '汉堡', '悟空', '巨人', '绿茶', '自行车', '保温杯', '大碗', '墨镜', '魔镜', '煎饼', '月饼', '月亮', '星星', '芝麻', '啤酒', '玫瑰', '大叔', '小伙', '哈密瓜,数据线', '太阳', '树叶', '芹菜', '黄蜂', '蜜粉', '蜜蜂', '信封', '西装', '外套', '裙子', '大象', '猫咪', '母鸡', '路灯', '蓝天', '白云', '星月', '彩虹', '微笑', '摩托', '板栗', '高山', '大地', '大树', '电灯胆', '砖头', '楼房', '水池', '鸡翅', '蜻蜓', '红牛', '咖啡', '机器猫', '枕头', '大船', '诺言', '钢笔', '刺猬', '天空', '飞机', '大炮', '冬天', '洋葱', '春天', '夏天', '秋天', '冬日', '航空', '毛衣', '豌豆', '黑米', '玉米', '眼睛', '老鼠', '白羊', '帅哥', '美女', '季节', '鲜花', '服饰', '裙子', '白开水', '秀发', '大山', '火车', '汽车', '歌曲', '舞蹈', '老师', '导师', '方盒', '大米', '麦片', '水杯', '水壶', '手套', '鞋子', '自行车', '鼠标', '手机', '电脑', '书本', '奇迹', '身影', '香烟', '夕阳', '台灯', '宝贝', '未来', '皮带', '钥匙', '心锁', '故事', '花瓣', '滑板', '画笔', '画板', '学姐', '店员', '电源', '饼干', '宝马', '过客', '大白', '时光', '石头', '钻石', '河马', '犀牛', '西牛', '绿草', '抽屉', '柜子', '往事', '寒风', '路人', '橘子', '耳机', '鸵鸟', '朋友', '苗条', '铅笔', '钢笔', '硬币', '热狗', '大侠', '御姐', '萝莉', '毛巾', '期待', '盼望', '白昼', '黑夜', '大门', '黑裤', '钢铁侠', '哑铃', '板凳', '枫叶', '荷花', '乌龟', '仙人掌', '衬衫', '大神', '草丛', '早晨', '心情', '茉莉', '流沙', '蜗牛', '战斗机', '冥王星', '猎豹', '棒球', '篮球', '乐曲', '电话', '网络', '世界', '中心', '鱼', '鸡', '狗', '老虎', '鸭子', '雨', '羽毛', '翅膀', '外套', '火', '丝袜', '书包', '钢笔', '冷风', '八宝粥', '烤鸡', '大雁', '音响', '招牌', '胡萝卜', '冰棍', '帽子', '菠萝', '蛋挞', '香水', '泥猴桃', '吐司', '溪流', '黄豆', '樱桃', '小鸽子', '小蝴蝶', '爆米花', '花卷', '小鸭子', '小海豚', '日记本', '小熊猫', '小懒猪', '小懒虫', '荔枝', '镜子', '曲奇', '金针菇', '小松鼠', '小虾米', '酒窝', '紫菜', '金鱼', '柚子', '果汁', '百褶裙', '项链', '帆布鞋', '火龙果', '奇异果', '煎蛋', '唇彩', '小土豆', '高跟鞋', '戒指', '雪糕', '睫毛', '铃铛', '手链', '香氛', '红酒', '月光', '酸奶', '银耳汤', '咖啡豆', '小蜜蜂', '小蚂蚁', '蜡烛', '棉花糖', '向日葵', '水蜜桃', '小蝴蝶', '小刺猬', '小丸子', '指甲油', '康乃馨', '糖豆', '薯片', '口红', '超短裙', '乌冬面', '冰淇淋', '棒棒糖', '长颈鹿', '豆芽', '发箍', '发卡', '发夹', '发带', '铃铛', '小馒头', '小笼包', '小甜瓜', '冬瓜', '香菇', '小兔子', '含羞草', '短靴', '睫毛膏', '小蘑菇', '跳跳糖', '小白菜', '草莓', '柠檬', '月饼', '百合', '纸鹤', '小天鹅', '云朵', '芒果', '面包', '海燕', '小猫咪', '龙猫', '唇膏', '鞋垫', '羊', '黑猫', '白猫', '万宝路', '金毛', '山水', '音响', '尊云', '西安');
  259. $tou_num = rand(0, 331);
  260. $do_num = rand(0, 19);
  261. $wei_num = rand(0, 327);
  262. $type = rand(0, 1);
  263. if ($type == 0) {
  264. $username = $tou[$tou_num] . $do[$do_num] . $wei[$wei_num];
  265. } else {
  266. $username = $wei[$wei_num] . $tou[$tou_num];
  267. }
  268. return $username ? $username : '';
  269. }
  270. /**
  271. * 生成汉字
  272. **/
  273. function getChar(){
  274. $num = characters('12345',1);
  275. $b = '';
  276. for ($i=0; $i<$num; $i++) {
  277. // 使用chr()函数拼接双字节汉字,前一个chr()为高位字节,后一个为低位字节
  278. $a = chr(mt_rand(0xB0,0xD0)).chr(mt_rand(0xA1, 0xF0));
  279. // 转码
  280. $b .= iconv('GB2312', 'UTF-8', $a);
  281. }
  282. return $b;
  283. }
  284. /**
  285. * 随机数
  286. * $data字符串
  287. * $number 抽取的个数
  288. */
  289. function characters($data,$number){
  290. $ran = str_shuffle($data);
  291. return substr($ran, 0, $number);
  292. }
  293. /**
  294. * 友好的时间展示
  295. * @param int $time 时间戳
  296. * @param string $format 默认显示格式化方式
  297. * @return string 返回时间,错误时返回为空字符串
  298. */
  299. function diy_friend_date($time, $format='Y-m-d')
  300. {
  301. if (!$time)
  302. return '';
  303. $nowtime = time();
  304. if ($time > $nowtime){
  305. return date($format, $time);
  306. }
  307. $Y = date('Y', $time);//年份
  308. $z = date('z', $time);//当前的第几天
  309. $nowY = date('Y', $nowtime);
  310. $nowz = date('z', $nowtime);
  311. if ($z > $nowz){
  312. $nowz += 365;
  313. }
  314. $diffz = $nowz - $z;//获取差异天
  315. $diffs = $nowtime - $time;//获取差异秒
  316. if ($diffz >= 365){
  317. return ($nowY-$Y).'年前';
  318. } elseif ($diffz >= 30){
  319. return floor($diffz / 30).'个月前';
  320. } elseif ($diffz >= 7){
  321. return floor($diffz / 7).'个星期前';
  322. } elseif ($diffz >= 3){
  323. return $diffz.'天前';
  324. } elseif ($diffz >= 2){
  325. return '前天';
  326. } elseif ($diffz >= 1) {
  327. return '昨天';
  328. } elseif ($diffs >= 3600) {
  329. return floor($diffs / 3600).'小时前';
  330. } elseif ($diffs >= 300) {
  331. return floor($diffs / 60).'分钟前';
  332. } else {//五分钟内
  333. return '刚刚'.$diffs.'秒';
  334. }
  335. }
  336. /**
  337. * 根据生日计算年龄
  338. * @param integer $birthday : 用户生日
  339. * @param integer $type
  340. * @return false|string
  341. */
  342. function birthday_age($birthday, $type = 0)
  343. {
  344. if (!$birthday) {
  345. if ($type == 1) return '1';
  346. return '1岁';
  347. }
  348. $eighteen_years = 31536000 * 18; // 十八年秒数
  349. if (time() - $birthday < $eighteen_years) {
  350. if ($type == 1) return '18';
  351. return '18岁';
  352. }
  353. // 判断如果首位是-的话, 就返回0
  354. if (substr($birthday, 0, 1) == '-') {
  355. if ($type == 1) return '0';
  356. return '0岁';
  357. }
  358. $birthday = date("Y-m-d", $birthday);
  359. list($year, $month, $day) = explode("-", $birthday);
  360. $new_year = date("Y") - $year;
  361. $year_diff = $new_year > 0 ? $new_year : 0;
  362. $month_diff = date("m") - $month;
  363. $day_diff = date("d") - $day;
  364. if ($year_diff > 0 && ($day_diff < 0 || $month_diff < 0)) {
  365. $year_diff--;
  366. }
  367. if ($type == 1) return $year_diff;
  368. return $year_diff . "岁";
  369. }
  370. /**
  371. * 根据计算年龄生日
  372. * @param array $search
  373. * @return array
  374. */
  375. function age_birthday($search)
  376. {
  377. $year = date('Y');
  378. $month = date('m');
  379. $day = date('d');
  380. $max_birth = '';
  381. $min_birth = '';
  382. // 用户输入了最小年龄和最大年龄
  383. if (isset($search['age_min']) && isset($search['age_max'])) {
  384. $min = min($search['age_min'], $search['age_max']);
  385. $max = max($search['age_min'], $search['age_max']);
  386. # 计算最大年龄的最早出生日期
  387. $max_year = $year - $max - 1;
  388. $max_birth = date('Y-m-d', strtotime("+1 day", strtotime($max_year . '-' . $month . '-' . $day)));
  389. # 计算最小年龄的最后出生日期
  390. $min_year = $year - $min;
  391. $min_birth = $min_year . '-' . $month . '-' . $day;
  392. } elseif (isset($search['age_min']) && !isset($search['age_max'])) { //用户只输入了最小年龄
  393. # 计算最大年龄的最早出生日期
  394. $max_year = $year - $search['age_min'] - 1;
  395. $max_birth = date('Y-m-d', strtotime("+1 day", strtotime($max_year . '-' . $month . '-' . $day)));
  396. # 计算最小年龄的最后出生日期
  397. $min_year = $year - $search['age_min'];
  398. $min_birth = $min_year . '-' . $month . '-' . $day;
  399. } elseif (!isset($search['age_min']) && isset($search['age_max'])) { // 用户只输入了最大年龄
  400. # 计算最大年龄的最早出生日期
  401. $max_year = $year - $search['age_max'] - 1;
  402. $max_birth = date('Y-m-d', strtotime("+1 day", strtotime($max_year . '-' . $month . '-' . $day)));
  403. # 计算最小年龄的最后出生日期
  404. $min_year = $year - $search['age_min'];
  405. $min_birth = $min_year . '-' . $month . '-' . $day;
  406. }
  407. return [
  408. 'min' => $min_birth,
  409. 'max' => $max_birth,
  410. ];
  411. }
  412. /**
  413. * 违禁词过滤
  414. **/
  415. function forbid_word($str_info)
  416. {
  417. $word = config('site.forbid_word');
  418. if(!$word){
  419. return true;
  420. }
  421. $result = 0;
  422. // $arr = @explode('|', $word);
  423. $arr = array_filter(explode('|', $word));
  424. foreach ($arr as $key => $value) {
  425. if (strstr($str_info, $value)) {
  426. $result = 1;
  427. }
  428. }
  429. if ($result == 1) {
  430. return true;
  431. }
  432. return false;
  433. }
  434. /**
  435. * 一维数组转为二维数组
  436. *
  437. * @param array $arr
  438. * @param string $str1
  439. * @param string $str2
  440. * @return array
  441. */
  442. function get_one_two_array($arr, $str1, $str2)
  443. {
  444. $item = [];
  445. foreach ($arr as $k => $v) {
  446. $item[] = [
  447. $str1 => $k,
  448. $str2 => $v,
  449. ];
  450. }
  451. return $item;
  452. }
  453. /**
  454. * 填充零
  455. **/
  456. function filling_method($input,$number){
  457. $pad_length = strlen((string)$number);
  458. if($pad_length == 1){
  459. $pad_length = $pad_length+2;
  460. }
  461. if($pad_length == 2){
  462. $pad_length = $pad_length+1;
  463. }
  464. $pad_string = "0";
  465. return str_pad($input,$pad_length,$pad_string,STR_PAD_LEFT);
  466. }
  467. /**
  468. * 秒转换为天
  469. *
  470. * @param integer $remain_time
  471. */
  472. function get_stay_time($remain_time, $is_hour = 1, $is_minutes = 1)
  473. {
  474. if($remain_time >= 60){
  475. $day = floor($remain_time / (3600*24));
  476. $day = $day > 0 ? $day.'天' : '';
  477. $hour = floor(($remain_time % (3600*24)) / 3600);
  478. $hour = $hour > 0 ? $hour.'小时' : '';
  479. if($is_hour && $is_minutes) {
  480. $minutes = floor((($remain_time % (3600*24)) % 3600) / 60);
  481. $minutes = $minutes > 0 ? $minutes.'分钟' : '';
  482. return $day.$hour.$minutes;
  483. }
  484. if($hour) {
  485. return $day.$hour;
  486. }
  487. return $day;
  488. }
  489. return $remain_time.'秒';
  490. }
  491. /**
  492. * 事务开始
  493. *
  494. * @return void
  495. */
  496. function db_start()
  497. {
  498. Db::startTrans();
  499. }
  500. /**
  501. * 事务提交
  502. *
  503. * @return void
  504. */
  505. function db_commit()
  506. {
  507. Db::commit();
  508. }
  509. /**
  510. * 事务回滚
  511. *
  512. * @return void
  513. */
  514. function db_rollback()
  515. {
  516. Db::rollback();
  517. }
  518. /**
  519. * 抛出响应异常(返回信息)
  520. *
  521. * @param string $msg 记录日志的错误信息, 如果returnMsg不配置, 则也为返回错误信息
  522. * @param integer $type: 1.不记录日志只返回错误信息, 2.事务回退,记录日志并返回错误信息, 3.记录日志并返回错误信息
  523. * @param Throwable|null $e 异常, 可为null
  524. * @param string $returnMsg 返回错误信息, 可不配置, 默认为msg
  525. * @param string $code 错误码
  526. * @param array $headers 头部信息
  527. * @param mixed $data 返回数据
  528. */
  529. function except($msg = '', $type = 1, $e = null, $returnMsg = '', $code = 0, array $header = [], $data = null)
  530. {
  531. $type == 1 && mexcept($msg, $code, $header, $data);
  532. $type == 2 && db_rollback();
  533. // 返回信息
  534. $returnMsg && $msg = $returnMsg;
  535. mexcept($msg, $code, $header, $data);
  536. }
  537. /**
  538. * 抛出异常(真正)
  539. *
  540. * @param string $msg
  541. * @param integer $code
  542. * @param array $headers
  543. * @param mixed $data
  544. * @return void
  545. */
  546. function mexcept($msg = '', $code = 0, $headers = [], $data = null)
  547. {
  548. $time = (int)request()->server('REQUEST_TIME') ?: time();
  549. abort(json(compact('code', 'msg', 'data', 'time'), null, $headers));
  550. }