function.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: pijh
  5. * Date: 2017/8/20
  6. * Time: 00:33
  7. */
  8. use Illuminate\Support\Arr;
  9. use \Illuminate\Support\Facades\DB;
  10. use Illuminate\Support\Facades\Storage;
  11. if (! function_exists('user_admin_config')) {
  12. function user_admin_config($key = null, $value = null)
  13. {
  14. $session = session();
  15. if (! $config = $session->get('admin.config')) {
  16. $config = config('admin');
  17. $config['lang'] = config('app.locale');
  18. }
  19. if (is_array($key)) {
  20. // 保存
  21. foreach ($key as $k => $v) {
  22. Arr::set($config, $k, $v);
  23. }
  24. $session->put('admin.config', $config);
  25. return;
  26. }
  27. if ($key === null) {
  28. return $config;
  29. }
  30. return Arr::get($config, $key, $value);
  31. }
  32. }
  33. //生成随机码
  34. function create_invite_code() {
  35. $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  36. $rand = $code[rand(0,25)]
  37. .strtoupper(dechex(date('m')))
  38. .date('d')
  39. .substr(time(),-5)
  40. .substr(microtime(),2,5)
  41. .sprintf('%02d',rand(0,99));
  42. for(
  43. $a = md5( $rand, true ),
  44. $s = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ',
  45. $d = '',
  46. $f = 0;
  47. $f < 6;
  48. $g = ord( $a[ $f ] ),
  49. $d .= $s[ ( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F ],
  50. $f++
  51. );
  52. return $d;
  53. }
  54. /**
  55. * 时间格式化(时间戳)
  56. * @param $ptime
  57. * @return false|string
  58. */
  59. function uc_time_ago($ptime)
  60. {
  61. date_default_timezone_set('PRC');
  62. $etime = time() - $ptime;
  63. switch ($etime) {
  64. case $etime <= 60:
  65. $msg = '刚刚';
  66. break;
  67. case $etime > 60 && $etime <= 60 * 60:
  68. $msg = floor($etime / 60) . '分钟前';
  69. break;
  70. case $etime > 60 * 60 && $etime <= 24 * 60 * 60:
  71. $msg = date('Ymd', $ptime) == date('Ymd', time()) ? '今天 ' . date('H:i', $ptime) : '昨天 ' . date('H:i', $ptime);
  72. break;
  73. case $etime > 24 * 60 * 60 && $etime <= 2 * 24 * 60 * 60:
  74. $msg = date('Ymd', $ptime) + 1 == date('Ymd', time()) ? '昨天 ' . date('H:i', $ptime) : '前天 ' . date('H:i', $ptime);
  75. break;
  76. case $etime > 2 * 24 * 60 * 60 && $etime <= 12 * 30 * 24 * 60 * 60:
  77. $msg = date('Y', $ptime) == date('Y', time()) ? date('m-d H:i', $ptime) : date('Y-m-d H:i', $ptime);
  78. break;
  79. default:
  80. $msg = date('Y-m-d H:i', $ptime);
  81. }
  82. return $msg;
  83. }
  84. /**
  85. * 获取IP地址归属地
  86. * @param $ip
  87. * @return string
  88. */
  89. function get_ip_address($ip)
  90. {
  91. if ('127.0.0.1' == $ip) return 'Localhost';
  92. $url = 'http://ip.taobao.com/service/getIpInfo.php?ip=' . $ip;
  93. $ch = curl_init($url);
  94. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  95. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 获取数据返回
  96. $location = curl_exec($ch);
  97. $location = json_decode($location, true);
  98. curl_close($ch);
  99. if (false != $location && 0 === $location['code']) {
  100. return $location['data']['region'] . $location['data']['city'] . $location['data']['county'] . '・' . $location['data']['isp'];
  101. } else {
  102. return 'unknown';
  103. }
  104. }
  105. /**
  106. * 递归查询获取分类树结构
  107. * @param $data
  108. * @param int $pid
  109. * @param int $level
  110. * @param array $tree
  111. * @param string $pidField
  112. * @param string $showField
  113. * @return array
  114. */
  115. function get_tree_list(&$data, $pid = 0, $level = 0, &$tree = [], $pidField = 'pid', $showField = 'name')
  116. {
  117. foreach ($data as $key => &$value) {
  118. if ($value[$pidField] == $pid) {
  119. $value['level'] = $level;
  120. $value['level'] && $value[$showField] = '&nbsp;' . $value[$showField];
  121. $value[$showField] = str_repeat('ㅡ', $value['level']) . $value[$showField];
  122. $tree[] = $value;
  123. unset($data[$key]);
  124. get_tree_list($data, $value['id'], $level + 1, $tree);
  125. }
  126. }
  127. unset($value);
  128. return $tree;
  129. }
  130. /**
  131. * 递归查询获取分类树结构带child
  132. * @param $data
  133. * @param int $pid
  134. * @param int $level
  135. * @param string $pidField
  136. * @return array
  137. */
  138. function get_tree_list_with_child(&$data, $pid = 0, $level = 0, $pidField = 'pid')
  139. {
  140. $tree = [];
  141. foreach ($data as $key => &$value) {
  142. if ($value[$pidField] == $pid) {
  143. $value['level'] = $level;
  144. $value['child'] = get_tree_list_with_child($data, $value['id'], $level + 1);
  145. $tree[] = $value;
  146. unset($data[$key]);
  147. }
  148. }
  149. unset($value);
  150. return $tree;
  151. }
  152. /**
  153. * 打印sql语句,在sql语句之前调用
  154. */
  155. function dump_sql()
  156. {
  157. \DB::listen(function ($query) {
  158. $bindings = $query->bindings;
  159. $i = 0;
  160. $rawSql = preg_replace_callback('/\?/', function ($matches) use ($bindings, &$i) {
  161. $item = isset($bindings[$i]) ? $bindings[$i] : $matches[0];
  162. $i++;
  163. return gettype($item) == 'string' ? "'$item'" : $item;
  164. }, $query->sql);
  165. echo $rawSql . "\n<br /><br />\n";
  166. });
  167. }
  168. function create_guid($namespace = null)
  169. {
  170. static $guid = '';
  171. $uid = uniqid("", true);
  172. $data = $namespace;
  173. $data .= $_SERVER ['REQUEST_TIME']; // 请求那一刻的时间戳
  174. $data .= $_SERVER ['HTTP_USER_AGENT']; // 获取访问者在用什么操作系统
  175. $data .= $_SERVER ['SERVER_ADDR']; // 服务器IP
  176. $data .= $_SERVER ['SERVER_PORT']; // 端口号
  177. $data .= $_SERVER ['REMOTE_ADDR']; // 远程IP
  178. $data .= $_SERVER ['REMOTE_PORT']; // 端口信息
  179. $hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
  180. $guid = substr($hash, 0, 8);
  181. return $guid;
  182. }
  183. function create_order_number()
  184. {
  185. return date('Ymd') . str_pad(mt_rand(1, 999999), 6, '0', STR_PAD_LEFT);
  186. }
  187. /**
  188. * curl 请求
  189. * @param $url
  190. * @param null $header
  191. * @param null $data
  192. * @return mixed
  193. */
  194. function curlRequest($url, $header = null, $data = null)
  195. {
  196. $ch = curl_init();
  197. curl_setopt($ch, CURLOPT_URL, $url);
  198. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  199. curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  200. curl_setopt($ch, CURLOPT_HEADER, 1);
  201. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  202. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  203. if ($data) {
  204. curl_setopt($ch, CURLOPT_POST, 1);
  205. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  206. }
  207. if ($header) {
  208. curl_setopt($ch, CURLOPT_HEADER, $header);
  209. }
  210. $ret = curl_exec($ch);
  211. curl_close($ch);
  212. return $ret;
  213. }
  214. /**
  215. * 数字金额转换成中文大写金额的函数
  216. * @param $num
  217. * @return string
  218. */
  219. function cny($num)
  220. {
  221. $c1 = "零壹贰叁肆伍陆柒捌玖";
  222. $c2 = "分角元拾佰仟万拾佰仟亿";
  223. $num = round($num, 2);
  224. $num = $num * 100;
  225. if (strlen($num) > 10) {
  226. return "数据太长,没有这么大的钱吧,检查下";
  227. }
  228. $i = 0;
  229. $c = "";
  230. while (1) {
  231. if ($i == 0) {
  232. $n = substr($num, strlen($num) - 1, 1);
  233. } else {
  234. $n = $num % 10;
  235. }
  236. $p1 = substr($c1, 3 * $n, 3);
  237. $p2 = substr($c2, 3 * $i, 3);
  238. if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
  239. $c = $p1 . $p2 . $c;
  240. } else {
  241. $c = $p1 . $c;
  242. }
  243. $i = $i + 1;
  244. $num = $num / 10;
  245. $num = (int)$num;
  246. if ($num == 0) {
  247. break;
  248. }
  249. }
  250. $j = 0;
  251. $slen = strlen($c);
  252. while ($j < $slen) {
  253. $m = substr($c, $j, 6);
  254. if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
  255. $left = substr($c, 0, $j);
  256. $right = substr($c, $j + 3);
  257. $c = $left . $right;
  258. $j = $j - 3;
  259. $slen = $slen - 3;
  260. }
  261. $j = $j + 3;
  262. }
  263. if (substr($c, strlen($c) - 3, 3) == '零') {
  264. $c = substr($c, 0, strlen($c) - 3);
  265. }
  266. if (empty($c)) {
  267. return "零元整";
  268. } else {
  269. return $c . "整";
  270. }
  271. }
  272. if (!function_exists('valid_url')) {
  273. /**
  274. * 路径助手函数
  275. * @param $url
  276. * @param null $disk_name
  277. * @param false $temp
  278. * @param null|DateTimeInterface $expiration
  279. * @return string|null
  280. */
  281. function valid_url($url, $disk_name = null, $temp = false, $expiration = null)
  282. {
  283. if (is_null($url)) {
  284. return null;
  285. }
  286. if (filter_var($url, FILTER_VALIDATE_URL)) {
  287. return $url;
  288. }
  289. if ($temp) {
  290. $expiration = $expiration ?: now()->addMinutes(30);
  291. return Storage::disk($disk_name)->temporaryUrl($url, $expiration);
  292. }
  293. return Storage::disk($disk_name)->url($url);
  294. }
  295. }