开发中遇到的一些有用的东西
/** * 批量导入数据 * @router get importData auth:public */ function importData(){ $filename = "sales.csv"; $excelData = array(); $content = trim(file_get_contents($filename)); $excelData = explode("\n", $content); //将这个10W+ 的数组分割成5000一个的小数组。这样就一次批量插入5000条数据。mysql 是支持的 $chunkData = array_chunk($excelData, 5000); $count = count($chunkData); for($i = 0; $i< $count; $i++){ $insertRows = array(); foreach($chunkData[$i] as $value){ $string = mb_convert_encoding(trim(strip_tags($value)), 'utf-8', 'gbk'); $v = explode(',', trim($string)); $row = array(); $row['bankCode'] = $v[0]; $row['drctCode'] = $v[2]; $row['name'] = $v[3]; $insertRows[] = $row; } $result = PubBankCode::open()->addMass($insertRows); } }
//获取某个文件夹下文件的个数 $dir = '/data/downloadFile/showqrcode'; $handler = opendir($dir); $fileCount = count(scandir($dir)) - 2; if($fileCount <=3){ }
//读取文件夹中文件的名称 $imageName = []; $handler = opendir('/data/downloadFile/showqrcode'); //2、循环的读取目录下的所有文件 //其中$filename = readdir($handler)是每次循环的时候将读取的文件名赋值给$filename,为了不陷于死循环,所以还要让$filename !== false。一定要用!==,因为如果某个文件名如果叫’0′,或者某些被系统认为是代表false,用!=就会停止循环*/ while( ($filename = readdir($handler)) !== false ) { //3、目录下都会有两个文件,名字为’.'和‘..’,不要对他们进行操作 if($filename != "." && $filename != ".."){ //4、进行处理 //这里简单的用echo来输出文件名 array_push($imageName, $filename); } } \pool\Memcached::set('imageName', json_encode($imageName)); $imageName = json_decode(\pool\Memcached::get('imageName')); closedir($handler); return $imageName;
//微信服务器向配置服务器发送的信息 public function urlRedirect() { $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; $wechatDemo = new WechatApi(); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); // $orgin_id = $_GET["orgid"]; $fromUsername = (string)$postObj->FromUserName; $Event = trim((string)$postObj->Event); $EventKey = trim((string)$postObj->EventKey); $crateTime = trim((string)$postObj->CreateTime); $flag = $fromUsername.$crateTime; //处理微信重复发送三次响应 if($Event == "subscribe"){ //判断是未关注 if(isset($EventKey) && isset($postObj->Ticket)){ //判断是扫码 $code = explode('_', $EventKey)[1]; $get_flag = \pool\Memcached::get($fromUsername); //通过openId和createTime是可以判断微信的响应是否重复 if(isset($get_flag) && !empty($get_flag)){ if($get_flag == $flag){ echo "success"; \pool\Memcached::delete($fromUsername); exit(); } }else{ \pool\Memcached::set($fromUsername, $flag, 60); } } } }else{ if($Event == "SCAN"){ $get_flag = \pool\Memcached::get($fromUsername); if(isset($get_flag) && !empty($get_flag)){ if($get_flag == $flag){ echo "success"; \pool\Memcached::delete($fromUsername); exit(); } }else{ \pool\Memcached::set($fromUsername, $flag, 60); } }else{ if($Event == "CLICK"){ $key = trim((string)$postObj->EventKey); if($key == "V1001_GOOD"){ $msg = "谢谢点赞"; // $this->sendMessage($fromUsername, $msg); $media_id = "29SlbVhQ7a96HDr4ExW_ROC2vz4s3p7TVXc1Pe5QmYU"; $wechatDemo->sendTextMessage($fromUsername, $msg); } }else{ if($Event == "unsubscribe"){ $msg = "取消关注"; $this->sendMessage($fromUsername, $msg); }else{ echo ""; } } } } // if (count($keyArray) == 1){ //已关注者扫描 // $this->sendMessage($fromUsername, $Event); // }else{ // //未关注者关注后推送事件 // $this->sendMessage($fromUsername, $Event); // } }
/** * 功能:php完美实现下载远程图片保存到本地 * 参数:文件url,保存文件目录,保存文件名称,使用的下载方式 * 当保存文件名称为空时则使用远程文件原来的名称 * @param $url * @param string $filename * @param int $type * @return array */ function saveRemoteImg($url, $filename='',$type=0){ if(trim($url)==''){ return array('file_name'=>'','save_path'=>'','error'=>1); } if(trim($filename)==''){//保存文件名 $ext=strrchr($url,'.'); if($ext!='.gif'&&$ext!='.jpg'){ return array('file_name'=>'','save_path'=>'','error'=>3); } }
//文件保存目录 $save_dir = "/data/downloadFile/showqrcode/"; //创建保存目录 //if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){ // return array('file_name'=>'','save_path'=>'','error'=>5); //} //获取远程文件所采用的方法 if($type){ $ch=curl_init(); $timeout=5; curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout); $img=curl_exec($ch); curl_close($ch); }else{ ob_start(); readfile($url); $img=ob_get_contents(); ob_end_clean(); } //$size=strlen($img); //文件大小 $fp2=@fopen($save_dir.$filename,'a'); fwrite($fp2,$img); fclose($fp2); unset($img,$url); return array('file_name'=>$filename,'save_path'=>$save_dir.$filename,'error'=>0); }
public function valid($data) { $echoStr = $data["echostr"]; //valid signature , option if($this->checkSignature($data)){ echo $echoStr; exit; } } public function responseMsg() { //get post data, May be due to the different environments $postStr = file_get_contents('php://input'); //extract post data if(!empty($postStr)){ /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, the best way is to check the validity of xml by yourself */ libxml_disable_entity_loader(true); $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDATA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDATA[%s]]></Content> <FuncFlag>0</FuncFlag> </xml>"; if(!empty($keyword)){ $msgType = "text"; $contentStr = "Welcome to wechat world!"; $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); echo $resultStr; }else{ echo "Input something..."; } }else{ echo ""; exit; } } private function checkSignature($data) { // you must define TOKEN by yourself if(!defined("TOKEN")){ throw new Exception('TOKEN is not defined!'); } $signature = $data["signature"]; $timestamp = $data["timestamp"]; $nonce = $data["nonce"]; $token = TOKEN; $tmpArr = [$token, $timestamp, $nonce]; // use SORT_STRING rule sort($tmpArr, SORT_STRING); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ return true; }else{ return false; } } public function getSignPackage() { $jsapiTicket = $this->getJsApiTicket(); $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string); $signPackage = [ "appId" => $this->appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ]; return $signPackage; } //获取微信授权url public function getUrlRedict($ref) { $queryParam = [ 'appid='.$this->appId, 'redirect_uri='.urlencode(Url::host().$this->redirectUrl.'?ref='.$ref), 'response_type=code', 'scope='.$this->scope, 'state=enter' ]; return $this->authUrlPrefix.join('&', $queryParam).'#wechat_redirect'; } public function getAuthInfo($code) { $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appId."&secret=".$this->appSecret."&code=".$code."&grant_type=authorization_code"; $openId = json_decode($this->https_request($url))->openid; $res = $this->getweChatInfo($openId); return $res; } private function createNonceStr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for($i = 0; $i < $length; $i++){ $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } private function getJsApiTicket() { // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("jsapi_ticket.json")); if(!empty($data) && $data->expire_time < time()){ $accessToken = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $res = json_decode($this->httpGet($url)); $ticket = !empty($res)? $res->ticket: ''; if($ticket){ $data->expire_time = time() + 7000; $data->jsapi_ticket = $ticket; $fp = fopen("jsapi_ticket.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } }else{ $ticket = $data->jsapi_ticket; } return $ticket; } public function getUserSubscribe($openId) { $accessToken = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token={$accessToken}&openid={$openId}&lang=zh_CN"; $res = json_decode($this->https_request($url), true); return $res; } public function setWechat($appId, $appSecret) { $this->appId = $appId; $this->appSecret = $appSecret; } //通过openId拿到用户信息 public function getweChatInfo($openId) { $accessToken = $this->getAccessToken(); $url = 'https://api.weixin.qq.com/cgi-bin/user/info?access_token='.$accessToken.'&openid='.$openId.'&lang=zh_CN'; $res = json_decode($this->https_request($url, null)); return $res; } //获取临时二维码 public function getTemporaryQrcode($shopId) { $access_token = $this->getAccessToken(); $data = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$shopId.'}}}'; $url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$access_token; $result = json_decode($this->https_request($url, $data), true); $qrcodeUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$result["ticket"]; return $qrcodeUrl; } //生成永久二维码 public function getForeverQrcode($agent_id) { $access_token = $this->getAccessToken(); $data = '{"action_name": "QR_LIMIT_STR_SCENE", "action_info": {"scene": {"scene_str": '.$agent_id.'}}}'; $url = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$access_token; $result = json_decode($this->https_request($url, $data), true); $qrcodeUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=".$result["ticket"]; return $qrcodeUrl; } //获取微信自定义菜单列表 public function getWechatMenuList() { $access_token = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=".$access_token; $res = json_decode($this->https_request($url)); return $res; } //创建微信自定义菜单 public function createWechatMenuList() { $data = file_get_contents("menu_list.json"); $access_token = $this->getAccessToken(); if(!empty($data)){ $url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=".$access_token; $res = $this->https_request($url, $data); return $res; }else{ return false; } } //发送文本消息 public function sendTextMessage($openid, $msg) { $access_token = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token; $data = '{"touser":"'.$openid.'","msgtype":"text", "text": { "content":"'.$msg.'" }'; $res = $this->https_request($url, $data); return $res; } //发送图片消息 public function sendImgMessage($openid, $media_id) { $access_token = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=".$access_token; $data = '{"touser":"'.$openid.'","msgtype":"image", "image": { "media_id":"'.$media_id.'" }'; $res = $this->https_request($url, $data); return $res; } //返回素材列表 public function getAllMaterial($type, $offset, $count) { $access_token = $this->getAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=".$access_token; $data = '{"type":"'.$type.'","offset":"'.$offset.'","count":"'.$count.'"}'; $res = $this->https_request($url, $data); return $res; } private function getAccessToken() { // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 $data = json_decode(file_get_contents("../service/wechat/access_token.json", FILE_USE_INCLUDE_PATH)); if(!empty($data) && $data->expire_time < time()){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appId."&secret=".$this->appSecret; $res = json_decode($this->https_request($url)); $access_token = !empty($res)? $res->access_token: ''; if($access_token){ $data->expire_time = time() + 7000; $data->access_token = $access_token; $fp = fopen("access_token.json", "w"); fwrite($fp, json_encode($data)); fclose($fp); } }else{ $access_token = $data->access_token; } return $access_token; }
//微信上传临时素材 public function add_material($filename){ $file_info=array( 'filename'=> $filename, //国片相对于网站根目录的路径 ); if (class_exists( '\CURLFile' )) {//关键是判断curlfile,官网推荐php5.5或更高的版本使用curlfile来实例文件 $filedata = array ( 'fieldname' => new \CURLFile ( realpath ( $file_info["filename"] ), 'image/jpeg' ) ); } else { $filedata = array ( 'fieldname' => '@' . realpath ( $file_info["filename"] ) ); } $url = 'http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token='.$this->getAccessToken().'&type=image'; $result = json_decode($this->https_request($url, $filedata)); return $result; }
/** * 生成UUID * 允许传入 * * @param array $default 默认的位置值 * @param string $split 分隔符 * @return string */ public static function uuid(array $default = [], $split = '') { $partLength = [8, 4, 4, 4, 12]; foreach($partLength as $i => $length){ if(isset($default[$i])){ $default[$i] = str_pad(substr($default[$i], 0, $length), $length, '0', STR_PAD_LEFT); }else{ $default[$i] = ''; while(strlen($default[$i]) < $length){ $default[$i] .= str_pad(base_convert(mt_rand(0, 65535), 10, 16), 4, '0', STR_PAD_LEFT); } } } ksort($default); return implode($split, $default); }
/** * 移除UUID的分隔符 * @param string $uuid 带分隔符-的UUID,36位 * @return string 移除分隔符后的UUID,32位 */ public static function uuidSeparatorRemove($uuid){ return str_replace('-', '', $uuid); } /** * 给UUID加上分隔符 * @param string $uuid 不带分隔符-的UUID,32位 * @return string 加上分隔符后的UUID,36位 */ public static function uuidSeparatorAdd($uuid){ return self::insertStr($uuid, [8, 12, 16, 20], '-'); }
/** * 在指定位置插入指定字符串 * @param string $str 原字符串 * @param int|array $offset 位置偏移量,单个或数组 * @param string $input 插入的字符串 * @return string 返回新的字符串 */ private static function insertStr($str, $offset, $input) { $newStr = ''; for ($i = 0; $i < strlen($str); $i++){ if (is_array($offset)){//如果插入是多个位置 foreach ($offset as $v){ if ($i == $v){ $newStr .= $input; } } }else{//直接是一个位置偏移量 if ($i == $offset){ $newStr .= $input; } } $newStr .= $str[$i]; } return $newStr; } /** * 生成密码 * * @param string $pwd 密码明文 * @param string $salt 扰乱因子 * @return string */ public static function encrypt($pwd, $salt) { return \md5($salt.$pwd.$salt); } /** * 删除索引数组的键,转换为普通数组 * * @param array $array 要转换的索引数组 * @return array 转换后的普通数组 */ public static function delArrayAssoc($array) { $newArr = []; foreach($array as $value){ $newArr[] = $value; } return $newArr; } /** * 解析JSON为数组,如果字符串为空,返回空数组 * * @param $json * @return mixed */ public static function decodeJSON($json) { if(is_string($json) && !empty($json)){ return json_decode($json, true); }else{ return []; } } /** * 将数据序列化成json,将不对中文进行编码 * * @param $data * @return string */ public static function encodeJSON($data) { if(is_string($data)){ return $data; }else{ return json_encode($data, JSON_UNESCAPED_UNICODE); } }
/** * 平台类型 * * @return string */ public static function deviceType() { //获取USER AGENT $map = [ 'pc' => 'windows nt', 'iphone' => 'iphone', 'ipad' => 'ipad', 'android' => 'android' ]; $agent = \strtolower($_SERVER['HTTP_USER_AGENT']); foreach($map as $type => $flag){ if(\strpos($agent, $flag) !== false){ return $type; } } return 'unknown'; } /** * 判断是否为该终端 * * @param string $flag MicroMessenger, * * @return bool */ public static function isTheAgent($flag) { return (\strpos($_SERVER['HTTP_USER_AGENT'], $flag) !== false); } /** * 简单属性映射,带索引的内容将进行映射 * * @param array $map * @param array $data * @return array */ public static function simpleMap($map, $data) { $list = []; foreach($map as $key => $value){ if(is_int($key)){ $key = $value; } if(isset($data[$key])){ $list[$value] = $data[$key]; } } return $list; } /** * 搜集属性列表,带索引的内容将进行映射,支持复杂的转换规则 * * @param array $map * @param array $data * @param bool $ignoreEmpty * @return array */ public static function map($map, $data, $ignoreEmpty = false) { $result = []; $indexAssoc = false; foreach($map as $n => $v){ if(\is_int($n)){ $n = $v; $indexAssoc = true; } $type = 'string'; \preg_match('/^\((.*)\)(.+)/', $n, $matched); if(\count($matched) > 2){ $type = $matched[1]; $n = $matched[2]; if($indexAssoc){ $v = $n; } } $vns = \explode('.', $v); $value = $data; foreach($vns as $vn){ if(isset($value[$vn])){ $value = $value[$vn]; }elseif(\substr($vn, 0, 1) === '"' && \substr($vn, -1, 1) === '"'){ $value = \substr($vn, 1, -1); }else{ $value = null; break; } } if($value === null && $ignoreEmpty){ continue; } switch($type){ case 'int': $value = intval($value?: 0); break; case 'float': $value = floatval($value?: 0); break; case 'bool': $value = boolval($value); break; default: $value = $value === null? '': $value; break; } $result[$n] = $value; } return $result; } /** * 获取客户端IP,检查代理(代理通常可伪造) * * @return string */ private static function getClientIp() { $ip = null; if(isset($_SERVER)){ if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */ foreach($arr as $ip){ $ip = trim($ip); if($ip != 'unknown'){ break; } } }else{ if(isset($_SERVER['HTTP_CLIENT_IP'])){ $ip = $_SERVER['HTTP_CLIENT_IP']; } } }else{ if(getenv('HTTP_X_FORWARDED_FOR')){ $ip = getenv('HTTP_X_FORWARDED_FOR'); }elseif(getenv('HTTP_CLIENT_IP')){ $ip = getenv('HTTP_CLIENT_IP'); } } if($ip === null){ $ip = self::getShakeIp(); } return $ip; } private static function getShakeIp() { return $_SERVER['REMOTE_ADDR']??getenv('REMOTE_ADDR')?: '0.0.0.0'; } /** * 获取访客的IP地址 * * @param bool $proxy 是否透过代理获取"真实IP"? 警告:该IP可以伪造 * @param bool $long 返回的类型;true:将IP地址转换成整型返回;false:直接返回IP串 * @return string||long */ public static function getIp($proxy = true, $long = false) { if($proxy){ /* 这类IP皆是可伪造的HTTP报文 */ //此处为http报文,可伪造,不可靠 $ip = self::getClientIp(); }else{ $ip = self::getShakeIp(); } return $long? ip2long($ip): $ip; } /** * 将unicode数字编码转为字符 * * @param $dec * @return string */ public static function uniChr($dec) { if($dec < 128){ $utf = chr($dec); }else{ if($dec < 2048){ $utf = chr(192 + (($dec - ($dec % 64)) / 64)); $utf .= chr(128 + ($dec % 64)); }else{ $utf = chr(224 + (($dec - ($dec % 4096)) / 4096)); $utf .= chr(128 + ((($dec % 4096) - ($dec % 64)) / 64)); $utf .= chr(128 + ($dec % 64)); } } return $utf; } /** * 产生随机字符 * * @param $length * @param int $mask * @return string */ public static function randString($length, $mask = JT_CHAR_NUMBER) { $randomString = ""; $type = []; foreach([1, 2, 4, 8] as $t){ if($t & $mask){ $type[] = $t; } } while($length){ $c = ''; switch($type[array_rand($type)]){ case JT_CHAR_NUMBER: $c = chr(mt_rand(48, 57)); break; case JT_CHAR_LOWERCASE: $c = chr(mt_rand(97, 122)); break; case JT_CHAR_UPPERCASE: $c = chr(mt_rand(65, 90)); break; case JT_CHAR_ZN_CH: $c = self::uniChr(mt_rand(0x4e00, 0x9fa5)); break; } $randomString .= $c; $length--; } return $randomString; }
/** * 获取当前网站所用的域名 * @return string */ public static function getDomain(){ return $_SERVER['HTTP_HOST']; } /** * 绝对定位到当前主机 * @return string */ public static function getHost(){ return 'http'.((isset($_SERVER['SERVER_PORT_SECURE']) && (int)$_SERVER['SERVER_PORT_SECURE'])?'s':'').'://'.$_SERVER['HTTP_HOST']; } /** * 获取当前访问页面的完整URL * @return string */ public static function getUrl(){ return 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']; } /** * 获取浏览器版本 * @return string */ public static function getBrowserVersion(){ $httpUserAgent = $_SERVER["HTTP_USER_AGENT"]; if(strpos($httpUserAgent, 'MSIE 8.0')){ return 'IE8'; }if(strpos($httpUserAgent, 'MSIE 9.0')){ return 'IE9'; }else if(strpos($httpUserAgent, 'MSIE 7.0')){ return 'IE7'; }else if(strpos($httpUserAgent, 'MSIE 6.0')){ return 'IE6'; }else if(strpos($httpUserAgent, 'Firefox/3')){ return 'FIREFOX3'; }else if(strpos($httpUserAgent, 'Firefox/2')){ return 'FIREFOX2'; }else if(strpos($httpUserAgent, 'Chrome')){ return 'CHROME'; }else if(strpos($httpUserAgent, 'Safari')){ return 'SAFARI'; }else if(strpos($httpUserAgent, 'Opera')){ return 'OPERA'; }else{ return $httpUserAgent; } } /** * 获取浏览器名称 * @return string */ public static function getBrowser() { $userAgent = strtolower($_SERVER["HTTP_USER_AGENT"]); $browser = "其他"; //判断是否是myie if(strpos($userAgent, "myie")){ $browser = "蚂蚁浏览器"; } //判断是否是Netscape if(strpos($userAgent, "netscape")){ $browser = "网景浏览器"; } //判断是否是Opera if(strpos($userAgent, "opera")){ $browser = "欧朋浏览器"; } //判断是否是netcaptor if(strpos($userAgent, "netcaptor")){ $browser = "netCaptor"; } //判断是否是TencentTraveler if(strpos($userAgent, "tencenttraveler")){ $browser = "腾讯TT浏览器"; } //判断是否是微信浏览器 if(strpos($userAgent, "micromessenger")){ $browser = "微信浏览器"; } //判断是否是QQ浏览器 if(strpos($userAgent, "mqqbrowser")){ $browser = "QQ浏览器"; } //判断是否是UC浏览器 if(strpos($userAgent, "ucbrowser") || strpos($userAgent, "ucweb")){ $browser = "UC浏览器"; } //判断是否是Firefox if(strpos($userAgent, "firefox")){ $browser = "火狐浏览器"; } //判断是否是ie if(strpos($userAgent, "msie") || strpos($userAgent, "trident")){ $browser = "IE浏览器"; } //判断是否是chrome内核浏览器 if(strpos($userAgent, "chrome")){ $browser = "谷歌浏览器"; } return $browser; } /** * 获取用户USER_AGENT信息,判断终端平台系统 * @return string */ public static function getPlatform(){ //$browserPlatform = ''; $Agent = strtolower($_SERVER['HTTP_USER_AGENT']); if(strstr($Agent, 'win') && strstr($Agent, 'nt 5.1')){ $browserPlatform = "Windows XP"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 6.1')){ $browserPlatform = "Windows 7"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 6.2')){ $browserPlatform = "Windows 8"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 6.3')){ $browserPlatform = "Windows 8"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 6.4')){ $browserPlatform = "Windows 8"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 10.0')){ $browserPlatform = "Windows 10"; }elseif(strstr($Agent, 'android')){ $browserPlatform = "Android"; }elseif(strstr($Agent, 'iphone')){ $browserPlatform = "iPhone"; }elseif(strstr($Agent, 'mac os')){ $browserPlatform = "Mac OS"; }elseif(strstr($Agent, 'ipad')){ $browserPlatform = "iPad"; }elseif(strstr($Agent, 'ipod')){ $browserPlatform = "iPod"; }elseif(strstr($Agent, 'linux')){ $browserPlatform = "Linux"; }elseif(strstr($Agent, 'unix')){ $browserPlatform = "Unix"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 6.0')){ $browserPlatform = "Windows Vista"; }elseif(strstr($Agent, 'win') && strstr($Agent, '32')){ $browserPlatform = "Windows 32"; }elseif(strstr($Agent, 'win') && strstr($Agent, '95')){ $browserPlatform = "Windows 95"; }elseif(strstr($Agent, 'win') && strstr($Agent, '98')){ $browserPlatform = "Windows 98"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt 5.0')){ $browserPlatform = "Windows 2000"; }elseif(strstr($Agent, 'win') && strstr($Agent, 'nt')){ $browserPlatform = "Windows NT"; }elseif(strstr($Agent, 'win 9x') && strstr($Agent, '4.90')){ $browserPlatform = "Windows ME"; }elseif(strstr($Agent, 'sun') && strstr($Agent, 'os')){ $browserPlatform = "SunOS"; }elseif(strstr($Agent, 'ibm') && strstr($Agent, 'os')){ $browserPlatform = "IBM OS/2"; }elseif(strstr($Agent, 'mac') && strstr($Agent, 'pc')){ $browserPlatform = "Macintosh"; }elseif(strstr($Agent, 'powerpc')){ $browserPlatform = "PowerPC"; }elseif(strstr($Agent, 'aix')){ $browserPlatform = "AIX"; }elseif(strstr($Agent, 'hpux')){ $browserPlatform = "HPUX"; }elseif(strstr($Agent, 'netbsd')){ $browserPlatform = "NetBSD"; }elseif(strstr($Agent, 'bsd')){ $browserPlatform = "BSD"; }elseif(strstr($Agent, 'osf1')){ $browserPlatform = "OSF1"; }elseif(strstr($Agent, 'irix')){ $browserPlatform = "IRIX"; }elseif(strstr($Agent, 'freebsd')){ $browserPlatform = "FreeBSD"; }else{ $browserPlatform = "Other"; } return $browserPlatform; } /** * 根据时间戳获取指定某天起止时间戳 * @param string $time 当天任意时间戳 * @param int $range 前后天数,如后一天为1,前一天为-1 * @return array [开始时间,结束时间] */ public static function getDayRangeTime($time = null, $range = 0){ $time = $time ? $time : RUN_START_TIME; $y = date('Y', $time); $m = date('m', $time); $d = date('d', $time) + $range; return [mktime(0, 0, 0, $m, $d, $y), mktime(23, 59, 59, $m, $d, $y)]; } /** * 根据时间戳获取周起止时间戳 * @param string $time 当天任意时间戳 * @param int $range 前后周数,如下周+1,上周-1 * @return array [开始时间,结束时间] */ public static function getWeekRangeTime($time = null, $range = 0){ $time = $time ? $time : RUN_START_TIME; $y = date('Y', $time); $m = date('m', $time); $d = date('d', $time); $w = date('w', $time) + $range; return [mktime(0, 0, 0, $m, $d-$w+1, $y), mktime(23, 59, 59, $m, $d-$w+7, $y)]; } /** * 根据时间戳获取指定月份起止时间戳 * @param string $time 当月任意时间戳 * @param int $range 前后月份数,如后一月为1,前一月为-1 * @return array [开始时间,结束时间] */ public static function getMonthRangeTime($time = null, $range = 0){ $time = $time ? $time : RUN_START_TIME; $y = date('Y', $time); $m = date('m', $time) + $range; return [mktime(0, 0, 0, $m, 1, $y), mktime(0, 0, 0, $m+1, 1, $y)-1]; }
//h5和Android,ios交互 appPrint: (data) =>{ if(window.BridgeToAndroid){ let dataStr = JSON.stringify(data); window.BridgeToAndroid.printReceipt(dataStr); return false; } if(window.WebViewJavascriptBridge){ window.WebViewJavascriptBridge.send({"tag": "printReceipt", "value": data}); return false; }else{ document.addEventListener('WebViewJavascriptBridgeReady', function(){ window.WebViewJavascriptBridge.send({"tag": "printReceipt", "value": data}); return false; }, false); } }
//url为请求的地址,data为请求发送的数据,如果data为空,则为get请求 public function https_request($url, $data = null) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); if (!empty($data)){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($curl); curl_close($curl); return $output; }