| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- <?php
- //权限控制
- \think\Hook::add('check_auth','app\\common\\behavior\\AuthenticateBehavior');
- use think\Db;
-
- function structureList($structid,$str){
- $str .= $structid.',';
- if(Db::name('AdminStructure')->where('pid ='.$structid)->find() ){
- $list = Db::name('AdminStructure')->field('id,name,pid')->where('pid ='.$structid)->select();
- foreach($list as $value){
- $str = structureList($value['id'],$str);
- }
- }
- return $str;
- }
-
- /**
- * cookies加密函数
- * @param string 加密后字符串
- */
- function encrypt($data, $key = '5k-72crm')
- {
- $cryptdes = new com\Cryptdes($key);
- return $cryptdes->encrypt($data);
- // $prep_code = serialize($data);
- // $block = mcrypt_get_block_size('des', 'ecb');
- // if (($pad = $block - (strlen($prep_code) % $block)) < $block) {
- // $prep_code .= str_repeat(chr($pad), $pad);
- // }
- // $encrypt = mcrypt_encrypt(MCRYPT_DES, $key, trim($prep_code), MCRYPT_MODE_ECB);
- // return base64_encode($encrypt);
- }
-
- /**
- * cookies 解密密函数
- * @param array 解密后数组
- */
- function decrypt($data, $key = '5k-72crm')
- {
- $cryptdes = new com\Cryptdes($key);
- return $cryptdes->decrypt($data);
- // $str = base64_decode($str);
- // $str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB);
- // $block = mcrypt_get_block_size('des', 'ecb');
- // $pad = ord($str[($len = strlen($str)) - 1]);
- // if ($pad && $pad < $block && preg_match('/' . chr($pad) . '{' . $pad . '}$/', $str)) {
- // $str = substr($str, 0, strlen($str) - $pad);
- // }
- // return unserialize($str);
- }
-
- /**
- * 部门树形数组
- * @param type 0 下属数组, 1包含自己
- */
- function getSubObj($id, $objList, $separate, $is_first = 0) {
- $array = array();
- foreach ($objList as $key => $value) {
- if ($key == 0 && $is_first == 1) {
- if ($value['id'] == 1) {
- $id = 0;
- } else {
- $id = $value['pid'];
- }
- }
- if ($id == $value['pid']) {
- $array[] = array('id' => $value['id'], 'name' => $separate.$value['name']);
- $array = array_merge($array, getSubObj($value['id'], $objList, $separate.'--'));
- }
- }
- return $array;
- }
-
- /**
- * 解析sql语句
- * @param string $content sql内容
- * @param int $limit 如果为1,则只返回一条sql语句,默认返回所有
- * @param array $prefix 替换表前缀
- * @return array|string 除去注释之后的sql语句数组或一条语句
- */
- function parse_sql($sql = '', $limit = 0, $prefix = []) {
- // 被替换的前缀
- $from = '';
- // 要替换的前缀
- $to = '';
- // 替换表前缀
- if (!empty($prefix)) {
- $to = current($prefix);
- $from = current(array_flip($prefix));
- }
- if ($sql != '') {
- // 纯sql内容
- $pure_sql = [];
- // 多行注释标记
- $comment = false;
- // 按行分割,兼容多个平台
- $sql = str_replace(["\r\n", "\r"], "\n", $sql);
- $sql = explode("\n", trim($sql));
- // 循环处理每一行
- foreach ($sql as $key => $line) {
- // 跳过空行
- if ($line == '') {
- continue;
- }
- // 跳过以#或者--开头的单行注释
- if (preg_match("/^(#|--)/", $line)) {
- continue;
- }
- // 跳过以/**/包裹起来的单行注释
- if (preg_match("/^\/\*(.*?)\*\//", $line)) {
- continue;
- }
- // 多行注释开始
- if (substr($line, 0, 2) == '/*') {
- $comment = true;
- continue;
- }
- // 多行注释结束
- if (substr($line, -2) == '*/') {
- $comment = false;
- continue;
- }
- // 多行注释没有结束,继续跳过
- if ($comment) {
- continue;
- }
- // 替换表前缀
- if ($from != '') {
- $line = str_replace('`'.$from, '`'.$to, $line);
- }
- if ($line == 'BEGIN;' || $line =='COMMIT;') {
- continue;
- }
- // sql语句
- array_push($pure_sql, $line);
- }
- // 只返回一条语句
- if ($limit == 1) {
- return implode($pure_sql, "");
- }
- // 以数组形式返回sql语句
- $pure_sql = implode($pure_sql, "\n");
- $pure_sql = explode(";\n", $pure_sql);
- return $pure_sql;
- } else {
- return $limit == 1 ? '' : [];
- }
- }
-
- function sendRequest($url, $params = array() , $headers = array()) {
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_URL, $url);
- if (!empty($params)) {
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
- }
- if (!empty($headers)) {
- curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
- }
- $res = curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- $value = curl_exec($ch);
- if (curl_errno($ch)) {
- $return = array(0, '连接服务器出错', -1);
- } else {
- if (!$value) {
- $return = array(0, '服务器返回数据异常', -1);
- }
- $return = $value;
- }
- curl_close($ch);
- return $return;
- }
-
- /**
- * 验证序列号
- * @param
- * @return
- */
- function checkWkCode($wkcode) {
- $pub = formatPubKey(config('public_key'));
- $openssl_pub = openssl_pkey_get_public($pub);
- // 验签
- $resArr = openssl_public_decrypt(Hex2String($wkcode), $decrypted, $pub);
- if(!$resArr) return false;
- return $decrypted;
- }
-
- function Hex2String($hex){
- $string = '';
- for ($i=0; $i < strlen($hex); $i+=2){
- $string .= chr(hexdec($hex[$i].$hex[$i+1]));
- }
- return $string;
- }
-
- //公钥格式处理
- function formatPubKey($pubKey) {
- $fKey = "-----BEGIN PUBLIC KEY-----\n";
- $len = strlen($pubKey);
- for($i = 0; $i < $len; ) {
- $fKey = $fKey . substr($pubKey, $i, 64) . "\n";
- $i += 64;
- }
- $fKey .= "-----END PUBLIC KEY-----";
- return $fKey;
- }
|