common.php 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. //权限控制
  3. \think\Hook::add('check_auth','app\\common\\behavior\\AuthenticateBehavior');
  4. use think\Db;
  5. function structureList($structid,$str){
  6. $str .= $structid.',';
  7. if(Db::name('AdminStructure')->where('pid ='.$structid)->find() ){
  8. $list = Db::name('AdminStructure')->field('id,name,pid')->where('pid ='.$structid)->select();
  9. foreach($list as $value){
  10. $str = structureList($value['id'],$str);
  11. }
  12. }
  13. return $str;
  14. }
  15. /**
  16. * cookies加密函数
  17. * @param string 加密后字符串
  18. */
  19. function encrypt($data, $key = '5k-72crm')
  20. {
  21. $cryptdes = new com\Cryptdes($key);
  22. return $cryptdes->encrypt($data);
  23. // $prep_code = serialize($data);
  24. // $block = mcrypt_get_block_size('des', 'ecb');
  25. // if (($pad = $block - (strlen($prep_code) % $block)) < $block) {
  26. // $prep_code .= str_repeat(chr($pad), $pad);
  27. // }
  28. // $encrypt = mcrypt_encrypt(MCRYPT_DES, $key, trim($prep_code), MCRYPT_MODE_ECB);
  29. // return base64_encode($encrypt);
  30. }
  31. /**
  32. * cookies 解密密函数
  33. * @param array 解密后数组
  34. */
  35. function decrypt($data, $key = '5k-72crm')
  36. {
  37. $cryptdes = new com\Cryptdes($key);
  38. return $cryptdes->decrypt($data);
  39. // $str = base64_decode($str);
  40. // $str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
  41. // $block = mcrypt_get_block_size('des', 'ecb');
  42. // $pad = ord($str[($len = strlen($str)) - 1]);
  43. // if ($pad && $pad < $block && preg_match('/' . chr($pad) . '{' . $pad . '}$/', $str)) {
  44. // $str = substr($str, 0, strlen($str) - $pad);
  45. // }
  46. // return unserialize($str);
  47. }
  48. /**
  49. * 部门树形数组
  50. * @param type 0 下属数组, 1包含自己
  51. */
  52. function getSubObj($id, $objList, $separate, $is_first = 0) {
  53. $array = array();
  54. foreach ($objList as $key => $value) {
  55. if ($key == 0 && $is_first == 1) {
  56. if ($value['id'] == 1) {
  57. $id = 0;
  58. } else {
  59. $id = $value['pid'];
  60. }
  61. }
  62. if ($id == $value['pid']) {
  63. $array[] = array('id' => $value['id'], 'name' => $separate.$value['name']);
  64. $array = array_merge($array, getSubObj($value['id'], $objList, $separate.'--'));
  65. }
  66. }
  67. return $array;
  68. }
  69. /**
  70. * 解析sql语句
  71. * @param string $content sql内容
  72. * @param int $limit 如果为1,则只返回一条sql语句,默认返回所有
  73. * @param array $prefix 替换表前缀
  74. * @return array|string 除去注释之后的sql语句数组或一条语句
  75. */
  76. function parse_sql($sql = '', $limit = 0, $prefix = []) {
  77. // 被替换的前缀
  78. $from = '';
  79. // 要替换的前缀
  80. $to = '';
  81. // 替换表前缀
  82. if (!empty($prefix)) {
  83. $to = current($prefix);
  84. $from = current(array_flip($prefix));
  85. }
  86. if ($sql != '') {
  87. // 纯sql内容
  88. $pure_sql = [];
  89. // 多行注释标记
  90. $comment = false;
  91. // 按行分割,兼容多个平台
  92. $sql = str_replace(["\r\n", "\r"], "\n", $sql);
  93. $sql = explode("\n", trim($sql));
  94. // 循环处理每一行
  95. foreach ($sql as $key => $line) {
  96. // 跳过空行
  97. if ($line == '') {
  98. continue;
  99. }
  100. // 跳过以#或者--开头的单行注释
  101. if (preg_match("/^(#|--)/", $line)) {
  102. continue;
  103. }
  104. // 跳过以/**/包裹起来的单行注释
  105. if (preg_match("/^\/\*(.*?)\*\//", $line)) {
  106. continue;
  107. }
  108. // 多行注释开始
  109. if (substr($line, 0, 2) == '/*') {
  110. $comment = true;
  111. continue;
  112. }
  113. // 多行注释结束
  114. if (substr($line, -2) == '*/') {
  115. $comment = false;
  116. continue;
  117. }
  118. // 多行注释没有结束,继续跳过
  119. if ($comment) {
  120. continue;
  121. }
  122. // 替换表前缀
  123. if ($from != '') {
  124. $line = str_replace('`'.$from, '`'.$to, $line);
  125. }
  126. if ($line == 'BEGIN;' || $line =='COMMIT;') {
  127. continue;
  128. }
  129. // sql语句
  130. array_push($pure_sql, $line);
  131. }
  132. // 只返回一条语句
  133. if ($limit == 1) {
  134. return implode($pure_sql, "");
  135. }
  136. // 以数组形式返回sql语句
  137. $pure_sql = implode($pure_sql, "\n");
  138. $pure_sql = explode(";\n", $pure_sql);
  139. return $pure_sql;
  140. } else {
  141. return $limit == 1 ? '' : [];
  142. }
  143. }
  144. function sendRequest($url, $params = array() , $headers = array()) {
  145. $ch = curl_init();
  146. curl_setopt($ch, CURLOPT_URL, $url);
  147. if (!empty($params)) {
  148. curl_setopt($ch, CURLOPT_POST, true);
  149. curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
  150. }
  151. if (!empty($headers)) {
  152. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  153. }
  154. $res = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  155. $value = curl_exec($ch);
  156. if (curl_errno($ch)) {
  157. $return = array(0, '连接服务器出错', -1);
  158. } else {
  159. if (!$value) {
  160. $return = array(0, '服务器返回数据异常', -1);
  161. }
  162. $return = $value;
  163. }
  164. curl_close($ch);
  165. return $return;
  166. }
  167. /**
  168. * 验证序列号
  169. * @param
  170. * @return
  171. */
  172. function checkWkCode($wkcode) {
  173. $pub = config('public_key');
  174. $openssl_pub = openssl_pkey_get_public($pub);
  175. // 验签
  176. $resArr = openssl_public_decrypt(Hex2String($wkcode), $decrypted, $pub);
  177. if(!$resArr) return false;
  178. return $decrypted;
  179. }
  180. function Hex2String($hex){
  181. $string = '';
  182. for ($i=0; $i < strlen($hex); $i+=2){
  183. $string .= chr(hexdec($hex[$i].$hex[$i+1]));
  184. }
  185. return $string;
  186. }