From eada97b43f3dc4cb4d257825ab8cfbf13f3aaed8 Mon Sep 17 00:00:00 2001 From: "cn.yimian.xyz" Date: Mon, 28 Dec 2020 23:44:27 +0800 Subject: [PATCH] ini --- functions.php | 596 ++++++++++++++++++++++++++++++++++++++++++++++++++ index.php | 198 +++++++++++++++++ memobird.php | 122 +++++++++++ 3 files changed, 916 insertions(+) create mode 100755 functions.php create mode 100644 index.php create mode 100644 memobird.php diff --git a/functions.php b/functions.php new file mode 100755 index 0000000..90e65f4 --- /dev/null +++ b/functions.php @@ -0,0 +1,596 @@ +connect_error) + { + die("Mysql Connect Failed: " . $conn->connect_error); + } + + return ($conn); +} + +//get table row number::(data_cnnct var,table name) ::(row number) +function db__rowNum($conn,$table,$clmnName="",$value="",$clmnName2="",$value2="") +{ + + $table=db__antisql($table); + $clmnName=db__antisql($clmnName); + $value=db__antisql($value); + $clmnName2=db__antisql($clmnName2); + $value2=db__antisql($value2); + + + if($clmnName=="") $sql = "SELECT COUNT(*) FROM $table"; + elseif($clmnName2=="") $sql = "SELECT COUNT(*) FROM $table where $clmnName='$value'"; + else $sql = "SELECT COUNT(*) FROM $table where $clmnName='$value' AND $clmnName2='$value2'"; + + $row_count = $conn->query($sql); + list($row_num) = $row_count->fetch_row(); + return ($row_num); +} + +//get row data from database::(data_cnnct var, table name,column name, column value)::(row info) +function db__getData($conn,$table,$clmnName="",$value="",$clmnName2="",$value2="", $more = "") +{ + + $table=db__antisql($table); + $clmnName=db__antisql($clmnName); + $value=db__antisql($value); + $clmnName2=db__antisql($clmnName2); + $value2=db__antisql($value2); + + + if($more != "") $sql = "SELECT * FROM $table $more"; + elseif($clmnName=="") $sql = "SELECT * FROM $table"; + elseif($clmnName2=="") $sql = "SELECT * FROM $table where $clmnName='$value'"; + else $sql = "SELECT * FROM $table where $clmnName='$value' AND $clmnName2='$value2'"; + + $result = $conn->query($sql); + //no data + if ($result->num_rows > 0) {}else{return 404;} + + $i=0; + $arr=array(); + while($row = $result->fetch_assoc()) { + $arr[$i++]=$row; + } + return ($arr); +} + + +//fnct for insert a row to database +function db__insertData($conn,$table,$content) +{ + $table=db__antisql($table); + + $key=array_keys($content); + + $key=db__antisql($key); + + $sql="insert INTO $table ("; + + for($i=0;$iquery($sql) === TRUE)) echo "SQL Insert Error: " . $sql . "
" . $conn->error; + +} + + +//fnct for update a row to database without check +function db__updateData($conn,$table,$content,$index) +{ + $key=array_keys($content); + $key=db__antisql($key); + + $sql="UPDATE $table SET "; + + for($i=0;$iquery($sql) === TRUE)) echo "SQL Insert Error: " . $sql . "
" . $conn->error; + +} + + + + +//push row data from database::(data_cnnct var, table name,column name, column value)::(row info) +function db__pushData($conn,$table,$content,$index="",$is_force=1) +{ + if($index) + { + $index_keys=array_keys($index); + + if(count($index_keys)==1) $result=db__rowNum($conn,$table,$index_keys[0],$index[$index_keys[0]]); + + elseif(count($index_keys)==2) $result=db__rowNum($conn,$table,$index_keys[0],$index[$index_keys[0]],$index_keys[1],$index[$index_keys[1]]); + + else return -1; + + if($result>0) db__updateData($conn,$table,$content,$index); + else if($is_force) db__insertData($conn,$table,$content); + + } + else + db__insertData($conn,$table,$content); +} + + +function db__delData($conn, $table, $clmnName, $value) +{ + $value=db__antisql($value); + $clmnName=db__antisql($clmnName); + + $sql = "DELETE FROM $table WHERE $clmnName = '$value'"; + $conn->query($sql); +} + + +//anti sql +function db__antisql($str) +{ + return(str_ireplace("'","",$str)); +} + + +/*****log******/ +function yimian__log($table, $val, $index = "", $cnt = null){ + + if(!isset($cnt)) $cnt = db__connect("log"); + if($index != "") db__pushData($cnt, $table, $val, $index); + else db__pushData($cnt, $table, $val); +} + +/** get from address **/ +function get_from(){ + + if($_SERVER['HTTP_REFERER']) return $_SERVER['HTTP_REFERER']; + elseif($_REQUEST['from']) return $_REQUEST['from']; +} + +function get_from_domain(){ + + $str = str_replace("http://","",get_from()); + $str = str_replace("https://","",$str); + $strdomain = explode("/",$str); + return $strdomain[0]; +} + + +/*****curl*****/ + +function curl__post($url = '', $param) { + + if(empty($url)) { + return false; + } + + $o = ""; + foreach ($param as $k => $v) { + $o .= "$k=".urlencode($v)."&" ; + } + + $postUrl = $url; + $curlPost = substr($o,0,-1); + $ch = curl_init();//初始化curl + curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页 + curl_setopt($ch, CURLOPT_HEADER, 0);//设置header + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 + curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); + $data = curl_exec($ch);//运行curl + curl_close($ch); + + return $data; +} + + + +/* get IP */ +function get_ip(){ + return getIp(); +} +function getIp() +{ + if (isset($_SERVER)) { + if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); + + foreach ($arr as $ip) { + $ip = trim($ip); + + if ($ip != 'unknown') { + $realip = $ip; + break; + } + } + } else if (isset($_SERVER['HTTP_CLIENT_IP'])) { + $realip = $_SERVER['HTTP_CLIENT_IP']; + } else if (isset($_SERVER['REMOTE_ADDR'])) { + $realip = $_SERVER['REMOTE_ADDR']; + } else { + $realip = '0.0.0.0'; + } + } else if (getenv('HTTP_X_FORWARDED_FOR')) { + $realip = getenv('HTTP_X_FORWARDED_FOR'); + } else if (getenv('HTTP_CLIENT_IP')) { + $realip = getenv('HTTP_CLIENT_IP'); + } else { + $realip = getenv('REMOTE_ADDR'); + } + + preg_match('/[\\d\\.]{7,15}/', $realip, $onlineip); + $realip = (!empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'); + return $realip; +} + +/* obs sdk */ +require '/home/lib/huaweicloud-sdk-php-obs/vendor/autoload.php'; +require '/home/lib/huaweicloud-sdk-php-obs/obs-autoloader.php'; + +use Obs\ObsClient; + + +/* obs get video */ +function getVideo($path, $time = 120*60){ + + return obsSign($path, $time); +} + + +/* obs get img */ +function getImg($path, $time = 300){ + + //return str_replace('yimian-image.obs.cn-east-2.myhuaweicloud.com:443','image.yimian.xyz',obsSign($path, $time)); + return obsSign($path, $time); +} + + + + +function obsSign($path, $expires = 300){ + + $obsClient = new ObsClient([ + 'key' => $GLOBALS['huawei_AK'], + 'secret' => $GLOBALS['huawei_SK'], + 'endpoint' => "https://obs.cn-east-2.myhuaweicloud.com", + ]); + + + $resp = $obsClient->createSignedUrl( [ + 'Method' => 'GET', + 'Bucket' => 'yimian-image', + 'Key' => $path, + 'Expires' => $expires + ] ); + + $obsClient -> close(); + return $resp['SignedUrl']; + +} + + + + + +function getImgsInfo($type, $isFast = false){ + + $obsClient = new ObsClient([ + 'key' => $GLOBALS['huawei_AK'], + 'secret' => $GLOBALS['huawei_SK'], + 'endpoint' => "https://obs.cn-east-2.myhuaweicloud.com", + ]); + + $resp = $obsClient -> listObjects([ + 'Bucket' => 'yimian-image', + 'MaxKeys' => 10000, + 'Prefix' => $type.'/', + 'Marker' => $type.'/img' + ]); + + + //ini_set("pcre.backtrack_limit" , -1); ini_set("pcre.recursion_limit" , -1); ini_set("memory_limit" , "1024M"); + + foreach($resp['Contents'] as $index => $val){ + $str .= $val['Key'].' '; + }; + + $obsClient -> close(); + + + preg_match_all('/img_(\S*?)_(\d{2,4})x(\d{2,4})_(\S*?)_(\S*?)_(\S*?).(jpe?g|png|gif|svg)\b/', $str, $arr); + +//echo var_dump($str); + + return $arr; + +} + +/*****gugu*****/ + +function yimian__gugu($body){ + +// $body = iconv("UTF-8","gbk//TRANSLIT",$body); +// $url = "http://open.memobird.cn/home/printpaper"; +// return curl__post($url, array("ak" => $GLOBALS['ggj_ak'], "userID" => $GLOBALS['ggj_userID'], "memobirdID" => $GLOBALS['ggj_memobirdID'], "printcontent" => "T:".base64_encode($body)."", "timestamp" => "".date('Y-m-d H:i:s')."", "useridentifying" => "123333")); + + require 'memobird.php'; + $m = new memobird($GLOBALS['ggj_ak']); + return $m->printPaper( "T:".base64_encode(iconv("UTF-8","gbk//TRANSLIT",$body))."", $GLOBALS['ggj_memobirdID'], $GLOBALS['ggj_userID']); + + + + +} + + +function gugu__send($ak, $userID, $memobirdID, $body){ + + $body = iconv("UTF-8","gbk//TRANSLIT",$body); + $url = "http://open.memobird.cn/home/printpaper"; + return curl__post($url, array("ak" => $ak, "userID" => $userID, "memobirdID" => $memobirdID, "printcontent" => "T:".base64_encode($body)."", "timestamp" => "".time()."")); +} + + + +/** function for mail **/ + +function yimian__mail($to, $subject, $body, $from){ + + + if($from == "") $from = "IoTcat 呓喵酱"; + if($body == "") $body = "额(⊙﹏⊙) 未找到指定的邮件内容耶( •̀ ω •́ )y

更多信息请咨询IoTcat期待你的回应啦~"; + if($subject == "") $subject = "来自IoTcat的一声问候~"; + + $data = array( + 'fromName' => $from, // 发件人名称 + 'from' => "admin@iotcat.xyz", // 发件地址 + 'to' => $to, // 收件地址 + 'replyTo' => "i@iotcat.me", // 回信地址 + 'subject' => $subject, + 'html' => $body + ); + + // 当前请求区域 + // 杭州 + // API地址 + $data['api'] = 'https://dm.aliyuncs.com/'; + // API版本号 + $data['version'] = '2015-11-23'; + // 机房信息 + $data['region'] = 'cn-hangzhou'; + + // AccessKeyId + $data['accessid'] = $GLOBALS['aym_AccessKey']; + // AccessKeySecret + $data['accesssecret'] = $GLOBALS['aym_SecretKey']; + // 是否成功 + return aliyun($data); + +} + + + +//mail alliyun api +function aliyun($param) +{ + // 重新组合为阿里云所使用的参数 + $data = array( + 'Action' => 'SingleSendMail', // 操作接口名 + 'AccountName' => $param['from'], // 发件地址 + 'ReplyToAddress' => "true", // 回信地址 + 'AddressType' => 1, // 地址类型 + 'ToAddress' => $param['to'], // 收件地址 + 'FromAlias' => $param['fromName'], // 发件人名称 + 'Subject' => $param['subject'], // 邮件标题 + 'HtmlBody' => $param['html'], // 邮件内容 + 'Format' => 'JSON', // 返回JSON + 'Version' => $param['version'], // API版本号 + 'AccessKeyId' => $param['accessid'], // Access Key ID + 'SignatureMethod' => 'HMAC-SHA1', // 签名方式 + 'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'), // 请求时间 + 'SignatureVersion' => '1.0', // 签名算法版本 + 'SignatureNonce' => md5(time()), // 唯一随机数 + 'RegionId' => $param['region'] // 机房信息 + ); + // 请求签名 + $data['Signature'] = sign($data, $param['accesssecret']); + // 初始化Curl + $ch = curl_init(); + // 设置为POST请求 + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); + // 请求地址 + curl_setopt($ch, CURLOPT_URL, $param['api']); + // 返回数据 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + // 提交参数 + curl_setopt($ch, CURLOPT_POSTFIELDS, getPostHttpBody($data)); + // 关闭ssl验证 + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); + // 执行请求 + $result = curl_exec($ch); + // 获取错误代码 + $errno = curl_errno($ch); + // 获取错误信息 + $error = curl_error($ch); + // 获取返回状态码 + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + // 关闭请求 + curl_close($ch); + // 成功标识 + $flag = TRUE; + // 如果开启了Debug + if (1) { + // 记录时间 + $log = '[Aliyun] ' . date('Y-m-d H:i:s') . ': ' . PHP_EOL; + // 如果失败 + if ( $errno ) { + // 设置失败 + $flag = FALSE; + $log .= '邮件发送失败, 错误代码:' . $errno . ',错误提示: ' . $error . PHP_EOL; + } + // 如果失败 + if ( 400 <= $httpCode ) { + // 设置失败 + $flag = FALSE; + // 尝试转换json + if ( $json = json_decode($result) ) { + $log .= '邮件发送失败,错误代码:' . $json->Code . ',错误提示:' . $json->Message . PHP_EOL; + } else { + $log .= '邮件发送失败, 请求返回HTTP Code:' . $httpCode . PHP_EOL; + } + } + // 记录返回值 + $log .= '邮件发送返回数据:' . serialize($result) . PHP_EOL; + // 写入文件 + } + yimian__log("log_mail",array("timestamp" => date('Y-m-d H:i:s', time()), "to_" => $param['to'], "from_" => $param['fromName'], "subject" => $param['subject'], "body" => $param['html'], "success" => (($flag)?1:0), "return_" => $log)); + // 返回结果 + //echo $log; + return $flag; +} + + +/** + * 阿里云签名 + * + * @static + * @access private + * + * @param array $param 签名参数 + * @param string $accesssecret 秘钥 + * + * @return string + */ +function sign($param, $accesssecret) +{ + // 参数排序 + ksort($param); + // 组合基础 + $stringToSign = 'POST&' . percentEncode('/') . '&'; + // 临时变量 + $tmp = ''; + // 循环参数列表 + foreach ( $param as $k => $v ) { + // 组合参数 + $tmp .= '&' . percentEncode($k) . '=' . percentEncode($v); + } + // 去除最后一个& + $tmp = trim($tmp, '&'); + // 组合签名参数 + $stringToSign = $stringToSign . percentEncode($tmp); + // 数据签名 + $signature = base64_encode(hash_hmac('sha1', $stringToSign, $accesssecret . '&', TRUE)); + // 返回签名 + return $signature; +} + +/** + * 阿里云签名编码转换 + * + * @static + * @access private + * + * @param string $val 要转换的编码 + * + * @return string|string[]|null + */ +function percentEncode($val) +{ + // URL编码 + $res = urlencode($val); + // 加号转换为%20 + $res = preg_replace('/\+/', '%20', $res); + // 星号转换为%2A + $res = preg_replace('/\*/', '%2A', $res); + // %7E转换为~ + $res = preg_replace('/%7E/', '~', $res); + return $res; +} + +/** + * 阿里云请求参数组合 + * + * @static + * @access private + * + * @param array $param 发送参数 + * + * @return bool|string + */ +function getPostHttpBody($param) +{ + // 空字符串 + $str = ""; + // 循环参数 + foreach ( $param as $k => $v ) { + // 组合参数 + $str .= $k . '=' . urlencode($v) . '&'; + } + // 去除第一个& + return substr($str, 0, -1); +} + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..5805609 --- /dev/null +++ b/index.php @@ -0,0 +1,198 @@ +$val){ + if(!array_key_exists($val['domain'], $domain)){ + $domain[$val['domain']] = Array(); + } + array_push($domain[$val['domain']], $val); +} + + +foreach($domain as $index=>$val){ + $o .= $index.': +'; + + $totalSession = 0; + $usrs = Array(); + foreach($val as $item){ + if($item['sessiontime']){ + $totalSession += $item['sessiontime']; + } + if(!in_array($item['fp'], $usrs)){ + array_push($usrs, $item['fp']); + } + } + $o .= 'Visitors: '.count($usrs).' '; + $o .= 'TSession: '.$totalSession; + $o .= ' +'; +} + + + +$o .= ' +Visitor Statistic + +'; +$fp = Array(); + +foreach($data as $index=>$val){ + if(!array_key_exists($val['fp'], $fp)){ + $fp[$val['fp']] = Array(); + } + array_push($fp[$val['fp']], $val); +} + +foreach($fp as $index=>$val){ + + + $usrInfo = ''; + if(db__rowNum($connAuth, "fip", "fp", $index)){ + $res = db__getData($connAuth, 'fip', 'fp', $index); + $token = $res[count($res)-1]['token']; + $res = db__getData($connAuth, 'token', 'token', $token); + if($res != 404 && $res[count($res)-1]['state']){ + $hash = $res[count($res)-1]['hash']; + $res = db__getData($connAuth, 'account', 'hash', $hash); + $usrInfo .= 'U'.$res[0]['uid'].' N: '.$res[0]['nickname'].' C: '.$res[0]['comments'].' +'; + } + } + + + $web = Array(); + $eeedog = array(); + $totalSession = 0; + foreach($val as $item){ + if(!in_array($item['domain'], $web)){ + $web[$item['domain']] = 0; + } + if($item['domain'] == 'www.eee.dog'){ + $s = substr($item['url'], 19); + $pos = strpos($s, '#'); + if($pos){ + $s = substr($s, 0, $pos); + } + $pos = strpos($s, '?'); + if($pos){ + $s = substr($s, 0, $pos); + } + if(!in_array($s, $eeedog)){ + array_push($eeedog, $s); + } + } + if($item['sessiontime']){ + $web[$item['domain']] += $item['sessiontime']; + $totalSession += $item['sessiontime']; + } + } + if($usrInfo != "" || count($web) > 1 || $totalSession > 20){ + + $o .= $index.': +'; +$o .= $usrInfo; +$o .= $val[0]['platform'].' '; +$o .= $val[0]['language'].' '; +$o .= $val[0]['timezone'].' +'; + $o .= 'web:'; + foreach($web as $d=>$session){ + $o .= $d.'('.$session.') '; + } + + if(count($eeedog)){ + $o .= ' +eeedog: '; + foreach($eeedog as $url){ + $o .= $url .' '; + } + } + + $o .= ' +'; + } +} + + + + + +$o .= ' +API Statistic +'; +$api = Array(); + +foreach($dataApi as $index=>$val){ + if(!array_key_exists($val['api'], $api)){ + $api[$val['api']] = Array(); + } + array_push($api[$val['api']], $val); +} + + +foreach($api as $index=>$val){ + $o .= $index.': +'; + $f = array(); + foreach($val as $item){ + $s = parse_url($item['_from'])['host']; + if(!array_key_exists($s, $f)){ + $f[$s] = 0; + } + $f[$s] ++; + } + $ip = array(); + foreach($val as $item){ + $s = $item['ip']; + if(!array_key_exists($s, $ip)){ + $ip[$s] = 0; + } + $ip[$s] ++; + } +$o .= 'Num:'.count($val).' Host:'.count($f).' Usr:'.count($ip).' +'; + foreach($f as $usr=>$n){ + if($n>20){ + $o .= $usr.'('.$n.')'; + } + } + $o .= ' +'; + +} + + + + + +$o .= '------------------'; + +if($type == 'memobird') yimian__gugu($o); +elseif($type == 'email') yimian__mail('i@iotcat.me', date('Y-m-d').' Ushio Report', str_replace(PHP_EOL, '
', $o), 'Ushio-Report'); +else echo str_replace(PHP_EOL, '
', $o); diff --git a/memobird.php b/memobird.php new file mode 100644 index 0000000..fcc2953 --- /dev/null +++ b/memobird.php @@ -0,0 +1,122 @@ + 'http://open.memobird.cn/home/setuserbind/', + 'printPaper' => 'http://open.memobird.cn/home/printpaper/', + 'getPrintStatus' => 'http://open.memobird.cn/home/getprintstatus/' + ); + + + function __construct($ak){ + $this->ak = $ak; + date_default_timezone_set('PRC'); + } + + public function getUserId($memobirdID,$useridentifying){ + $params=array( + 'ak'=> $this->ak, + 'timestamp'=>date('Y-m-d h:m:s',time()), + 'memobirdID'=>$memobirdID, + 'useridentifying'=>$useridentifying + ); + $paramsString = http_build_query($params); + return $this->curl($this->url['getUserId'],$paramsString); + } + + public function printPaper($printcontent,$memobirdID,$userID){ + $params=array( + 'ak'=> $this->ak, + 'timestamp'=>date('Y-m-d h:m:s',time()), + 'printcontent'=>$printcontent, + 'memobirdID'=>$memobirdID, + 'userID'=>$userID + ); + $paramsString = http_build_query($params); + return $this->curl($this->url['printPaper'],$paramsString); + } + + + //构造printPaper方法中$printcontent格式,多个可以循环并用|拼接 + public function contentSet($type,$content){ + switch($type){ + case 'T': + $ret = $type.':'.base64_encode($this->charsetToGBK($content)."\n");break; + case 'P': + $ret = 'P:'.base64_encode($content); + default: + } + return $ret; + } + + public function getPaperStatus($printcontentID){ + $params=array( + 'ak'=> $this->ak, + 'timestamp'=>date('Y-m-d h:m:s',time()), + 'printcontentID'=>$printcontentID + ); + $paramsString = http_build_query($params); + return $this->curl($this->url['getPrintStatus'],$paramsString); + } + + + /** + * 创建http header参数 + * @param array $data + * @return bool + */ + private function createHttpHeader() { + // + } + /** + * 发起 server 请求 + * @param $action + * @param $params + * @param $httpHeader + * @return mixed + */ + public function curl($action,$params) { + //$action = self::SERVERAPIURL.$action.'.'.$this->format; + //$httpHeader = $this->createHttpHeader(); + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $action); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $params); + //curl_setopt($ch, CURLOPT_HTTPHEADER, $httpHeader); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false); //处理http证书问题 + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_TIMEOUT, 5); + curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $ret = curl_exec($ch); + if (false === $ret) { + $ret = curl_errno($ch); + } + curl_close($ch); + return $ret; + } + + public function charsetToGBK($mixed){ + if (is_array($mixed)) { + foreach ($mixed as $k => $v) { + if (is_array($v)) { + $mixed[$k] = charsetToGBK($v); + } else { + $encode = mb_detect_encoding($v, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5')); + if ($encode == 'UTF-8') { + $mixed[$k] = iconv('UTF-8', 'GBK', $v); + } + } + } + } else { + $encode = mb_detect_encoding($mixed, array('ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5')); + //var_dump($encode); + if ($encode == 'UTF-8') { + $mixed = iconv('UTF-8', 'GBK', $mixed); + } + } + return $mixed; + } + + +}