common.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. /**
  13. * 获取服务器当前时间
  14. * @return string 时间
  15. */
  16. function getCurrentTime(){
  17. return date("Y-m-d H:i:s", time());
  18. }
  19. /**
  20. * 获取分页的查询条件
  21. * @return array 返回一个条件数组
  22. */
  23. function getPaginatiorQuery(){
  24. $query = \think\Collection::make(request()->get());
  25. $query->clean();
  26. $query->delete(config('paginate.var_page'));
  27. return $query->toArray();
  28. }
  29. /**
  30. * 发送HTTP请求方法
  31. * @param string $url 请求URL
  32. * @param array $params 请求参数
  33. * @param string $method 请求方法GET/POST
  34. * @return array $data 响应数据
  35. */
  36. function http($url, $params, $method = 'GET', $header = array(), $multi = false){
  37. $opts = array(
  38. CURLOPT_TIMEOUT => 30,
  39. CURLOPT_RETURNTRANSFER => 1,
  40. CURLOPT_SSL_VERIFYPEER => false,
  41. CURLOPT_SSL_VERIFYHOST => false,
  42. CURLOPT_HTTPHEADER => $header
  43. );
  44. /* 根据请求类型设置特定参数 */
  45. switch(strtoupper($method)){
  46. case 'GET':
  47. $opts[CURLOPT_URL] = $url . '?' . http_build_query($params);
  48. break;
  49. case 'POST':
  50. //判断是否传输文件
  51. $params = $multi ? $params : http_build_query($params);
  52. $opts[CURLOPT_URL] = $url;
  53. $opts[CURLOPT_POST] = 1;
  54. $opts[CURLOPT_POSTFIELDS] = $params;
  55. break;
  56. default:
  57. throw new Exception('不支持的请求方式!');
  58. }
  59. /* 初始化并执行curl请求 */
  60. $ch = curl_init();
  61. curl_setopt_array($ch, $opts);
  62. $data = curl_exec($ch);
  63. $error = curl_error($ch);
  64. curl_close($ch);
  65. if($error) throw new Exception('请求发生错误:' . $error);
  66. return $data;
  67. }
  68. /**
  69. * 解包
  70. * @param array $post
  71. * @return array
  72. */
  73. function decode($post){
  74. return $post;
  75. }
  76. /**
  77. * 生成唯一id(时间戳+随机数)
  78. * @return int
  79. */
  80. function getId(){
  81. return date('y').date('m').date('d').substr(time(),-5).substr(microtime(),2,5).sprintf('%03d',rand(0,999));
  82. }
  83. /**
  84. * 短地址
  85. * @param string $url 需要生成的字符串
  86. * @param string $key 加盐
  87. * @return string
  88. */
  89. function shortCode($url, $key='fuck'){
  90. $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
  91. $urlhash = md5($key . $url);
  92. $len = strlen($urlhash);
  93. //将加密后的串分成4段,每段4字节,对每段进行计算,一共可以生成四组短连接
  94. for ($i = 0; $i < 4; $i++) {
  95. $urlhash_piece = substr($urlhash, $i * $len / 4, $len / 4);
  96. //将分段的位与0x3fffffff做位与,0x3fffffff表示二进制数的30个1,即30位以后的加密串都归零
  97. //此处需要用到hexdec()将16进制字符串转为10进制数值型,否则运算会不正常
  98. $hex = hexdec($urlhash_piece) & 0x3fffffff;
  99. //域名根据需求填写
  100. // $short_url = "http://t.cn/";
  101. $short_url = "";
  102. //生成6位短网址
  103. for ($j = 0; $j < 6; $j++) {
  104. //将得到的值与0x0000003d,3d为61,即charset的坐标最大值
  105. $short_url .= $charset[$hex & 0x0000003d];
  106. //循环完以后将hex右移5位
  107. $hex = $hex >> 5;
  108. }
  109. $short_url_list[] = $short_url;
  110. }
  111. return $short_url_list[rand(0, count($short_url_list)-1)];
  112. }