首页
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
Search
1
【PHP】PHPoffice/PHPSpreadsheet读取和写入Excel
1,673 阅读
2
【Layui】控制页面元素展示隐藏
1,520 阅读
3
【Git】No tracked branch configured for branch master or the branch doesn't exist.
1,460 阅读
4
【PHP】PHP实现JWT生成和验证
1,370 阅读
5
精准检测,助力社交管理 —— 微信好友检测服务来袭!
1,278 阅读
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
登录
Search
标签搜索
PHP
函数
方法
类
MySQL
ThinkPHP
JavaScript
OOP
Layui
Web
Server
Docker
Linux
PHPSpreadsheet
PHPoffice
Array
设计模式
Git
排序算法
基础
小破孩
累计撰写
244
篇文章
累计收到
13
条评论
首页
栏目
默认分类
PHP
ThinkPHP
Laravel
面向对象
设计模式
算法
基础
网络安全
Web
HTML
CSS
JavaScript
jQuery
Layui
VUE
uni-app
Database
MySQL
Redis
RabbitMQ
Nginx
Git
Linux
Soft Ware
Windows
网赚
Go
Docker
页面
关于小站
朋友
壁纸
留言
时光之书
笔顺字帖
LayUI手册
搜索到
87
篇与
的结果
2022-06-23
【PHP】魔术方法
__constuct: 构建对象的时被调用;__destruct: 明确销毁对象或脚本结束时被调用;__set: 当给不可访问或不存在属性赋值时被调用__get: 读取不可访问或不存在属性时被调用__isset: 对不可访问或不存在的属性调用isset()或empty()时被调用__unset: 对不可访问或不存在的属性进行unset时被调用__call: 调用不可访问或不存在的方法时被调用__callStatic: 调用不可访问或不存在的静态方法时被调用__sleep: 当使用serialize时被调用,当你不需要保存大对象的所有数据时很有用__wakeup: 当使用unserialize时被调用,可用于做些对象的初始化操作__clone: 进行对象clone时被调用,用来调整对象的克隆行为__toString: 当一个类被转换成字符串时被调用__invoke: 当以函数方式调用对象时被调用__set_state: 当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。__debuginfo: 当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本 <?php class Magic { public $var = 'test'; //构造函数,在创建对象的时候调用 public function __construct() { echo '__construct called'.PHP_EOL; } //某个对象的引用都被删除、对象被销毁、调用exit()后、脚本关闭时被调用 public function __destruct() { echo '__destruct called'.PHP_EOL; } //当给不可访问或不存在属性赋值时被调用 public function __set($name, $value) { echo $name.'-'.$value; echo '__set called'.PHP_EOL; } //读取不可访问或不存在属性时被调用 public function __get($name) { echo $name; echo '__get called'.PHP_EOL; } //调用不可访问或不存在的方法时被调用 public function __call($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo '__call called'.PHP_EOL; } //调用不可访问或不存在的静态方法时被调用 public static function __callStatic($name, $arguments) { echo $name . '-' . implode(',', $arguments); echo '__callStatic called'.PHP_EOL; } //对不可访问或不存在的属性调用isset()或empty()时被调用 public function __isset($name) { echo $name; echo '__isset called'.PHP_EOL; return true; } //对不可访问或不存在的属性进行unset时被调用 public function __unset($name) { echo $name; echo '__unset called'.PHP_EOL; } //serialize时被调用,当你不需要保存大对象的所有数据时很有用 public function __sleep() { echo '__sleep called'.PHP_EOL; return array('var1111111111'); } //unserialize时被调用,可用于做些对象的初始化操作 public function __wakeup() { echo '__wakeup called'.PHP_EOL; $this->var = 'test after wakeup'; } //当一个类被转换成字符串时被调用 public function __toString() { return '__toString called'.PHP_EOL; } //进行对象clone时被调用,用来调整对象的克隆行为 public function __clone() { echo '__clone called'.PHP_EOL; } //当以函数方式调用对象时被调用 public function __invoke() { echo '__invoke called'.PHP_EOL; } //当调用var_export()导出类时,此静态方法被调用。用__set_state的返回值做为var_export的返回值。 public static function __set_state($arr) { return '__set_state called'.PHP_EOL; } //当调用var_dump()打印对象时被调用(当你不想打印所有属性)适用于PHP5.6版本 public function __debuginfo($arr) { echo '__debuginfo called'.PHP_EOL; return array( 'var' => 'test fro __debuginfo' ); } } $m = new Magic(); //__construct()被调用 $m->not_exist_property = test; //__set()被调用 echo $m->not_exist_property;//__get()被调用 $m->abc(1,2,3); //__call()被调用 echo isset($m->not_exist_property); //__isset()被调用,返回bool值 unset($m->not_exist_property); //__unset()被调用 echo $tmp = serialize($m); //__sleep()被调用 unserialize($tmp); //__wakeup()被调用 $m1 = clone $m; //__clone()被调用,对象默认是引用传递,使用clone关键词则可实现对象复制 $m(); //__invoke() eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2); var_dump($m); //最后__destruct()被调用 /* 结果: __construct called not_exist_property-test__set called not_exist_property__get called abc-1,2,3__call called not_exist_property__isset called 1not_exist_property__unset called __sleep called O:5:"Magic":1:{s:13:"var1111111111";N;}__wakeup called __destruct called __clone called __invoke called string(20) "__set_state called " class Magic#1 (1) { public $var => string(4) "test" } __destruct called __destruct called */
2022年06月23日
296 阅读
0 评论
0 点赞
2022-06-23
【PHP】PHP实现链式操作
实现链式操作的核心方法就是 : return $this;下面是例子: /** * 设置是否严格检查字段名 * @access public * @param bool $strict 是否严格检查字段 * @return $this */ public function strict(bool $strict = true) { $this->options['strict'] = $strict; return $this; } /** * 设置自增序列名 * @access public * @param string $sequence 自增序列名 * @return $this */ public function sequence(string $sequence = null) { $this->options['sequence'] = $sequence; return $this; } /** * 设置JSON字段信息 * @access public * @param array $json JSON字段 * @param bool $assoc 是否取出数组 * @return $this */ public function json(array $json = [], bool $assoc = false) { $this->options['json'] = $json; $this->options['json_assoc'] = $assoc; return $this; }
2022年06月23日
243 阅读
0 评论
0 点赞
2022-06-23
【PHP】SPL四种常用的数据结构
spl,指SPL - Standard PHP Library 标准PHP类库 1.栈【先进后出】 <span style="font-size:18px;">$stack = new SplStack(); $stack->push('data1'); $stack->push('data2'); $stack->push('data3'); echo $stack->pop(); //输出结果为 //data3</span><span style="font-size:24px;font-weight: bold;"> </span> 2.队列【先进先出 后进后出】 <span style="font-size:18px;">$queue = new SplQueue(); $queue->enqueue("data1"); $queue->enqueue("data2"); $queue->enqueue("data3"); echo $queue->dequeue(); //输出结果为 //data1</span> 3.堆 <span style="font-size:18px;">$heap = new SplMinHeap(); $heap->insert("data1"); $heap->insert("data2"); echo $heap->extract(); //输出结果为 //data1</span> 4.固定尺寸数组 <span style="font-size:18px;">$array = new SplFixedArray(5); $array[0]=1; $array[3]=3; $array[2]=2; var_dump($array); //输出结果为 // object(SplFixedArray)[1] // public 0 => int 1 // public 1 => null // public 2 => int 2 // public 3 => int 3 // public 4 => null</span>
2022年06月23日
330 阅读
0 评论
0 点赞
2022-06-23
【PHP】PHP实现JWT生成和验证
JWT里面的 encode 和 decode方法进行生成token和验证token /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/6/17 16:14 * @param $uid * @return mixed * @Description:生成token */ public function setToken($uid){ //私钥 $privateKey = <<<EOD -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC8kGa1pSjbSYZVebtTRBLxBz5H4i2p/llLCrEeQhta5kaQu/Rn vuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t0tyazyZ8JXw+KgXTxldMPEL9 5+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4ehde/zUxo6UvS7UrBQIDAQAB AoGAb/MXV46XxCFRxNuB8LyAtmLDgi/xRnTAlMHjSACddwkyKem8//8eZtw9fzxz bWZ/1/doQOuHBGYZU8aDzzj59FZ78dyzNFoF91hbvZKkg+6wGyd/LrGVEB+Xre0J Nil0GReM2AHDNZUYRv+HYJPIOrB0CRczLQsgFJ8K6aAD6F0CQQDzbpjYdx10qgK1 cP59UHiHjPZYC0loEsk7s+hUmT3QHerAQJMZWC11Qrn2N+ybwwNblDKv+s5qgMQ5 5tNoQ9IfAkEAxkyffU6ythpg/H0Ixe1I2rd0GbF05biIzO/i77Det3n4YsJVlDck ZkcvY3SK2iRIL4c9yY6hlIhs+K9wXTtGWwJBAO9Dskl48mO7woPR9uD22jDpNSwe k90OMepTjzSvlhjbfuPN1IdhqvSJTDychRwn1kIJ7LQZgQ8fVz9OCFZ/6qMCQGOb qaGwHmUK6xzpUbbacnYrIM6nLSkXgOAwv7XXCojvY614ILTK3iXiLBOxPu5Eu13k eUz9sHyD6vkgZzjtxXECQAkp4Xerf5TGfQXGXhxIX52yH+N2LtujCdkQZjXAsGdm B2zNzvrlgRmgBrklMTrMYgm1NPcW+bRLGcwgW2PTvNM= -----END RSA PRIVATE KEY----- EOD; $payload = [ 'iss'=>'xiaopohai', //签发人(官方字段:非必需) 'exp'=>time()+3600*24*7, //过期时间(官方字段:非必需) 'aud'=>'everyone', //受众(官方字段:非必需) 'nbf'=>time(), //生效时间(官方字段:非必需) 'iat'=>time(), //签发时间(官方字段:非必需) 'userInfo'=>[ 'id' =>$uid, ], ]; $token = JWT::encode($payload,$privateKey,'HS256'); return $token; } /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/6/17 16:01 * @param $token * @return int[] * @Description:验证token */ public function checkToken($token){ try{ //公钥 $publicKey = <<<EOD -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8kGa1pSjbSYZVebtTRBLxBz5H 4i2p/llLCrEeQhta5kaQu/RnvuER4W8oDH3+3iuIYW4VQAzyqFpwuzjkDI+17t5t 0tyazyZ8JXw+KgXTxldMPEL95+qVhgXvwtihXC1c5oGbRlEDvDF6Sa53rcFVsYJ4 ehde/zUxo6UvS7UrBQIDAQAB -----END PUBLIC KEY----- EOD; $res = JWT::decode($token,$publicKey,['HS256']); returnResponse('200','请求成功', $res); }catch (Exception $e) { returnResponse(100,$e->getMessage()); } }学习地址:https://github.com/firebase/php-jwt
2022年06月23日
1,370 阅读
0 评论
0 点赞
2022-06-23
【PHP】单点登录(SingleSignOn,SSO)的思路
用到的工具:JWP类, RSA非对称加密类composer require firebase/php-jwt;JWT包含三部分数据:Header:头部,通常头部有两部分信息:1.token类型:JWT2.加密方式:base64(HS256)Payload:载荷,就是有效数据,一般包含下面信息:1.用户身份信息(注意,这里因为采用base64编码,可解码,因此不要存放敏感信息)2.注册声明:如token的签发时间,过期时间,签发人等这部分也会采用base64编码,得到第二部分数据Signature:签名,是整个数据的认证信息。根据前两步的数据,再加上指定的密钥(secret)(不要泄漏,最好周期性更换),通过base64编码生成。用于验证整个数据完整和可靠性RSA非对称加密:需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。将私钥private_key.pem用在服务器端,公钥发放给android跟ios等前端就是将非对称加密的信息传递到JWT里面的做解密验证
2022年06月23日
244 阅读
0 评论
0 点赞
2022-06-23
【PHP】PHP实现创建文件目录
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/12 13:36 * @param $path * @Description:设置路径判断是否存在,不存在创建 */ public function createPath($path){ $Month = date('Ym',time()); $Day = date('d',time()); $path = $this->path.$Month.'/'.$Day.'/'; if(!is_dir($path)){ header("Content-type:text/html;charset=utf-8"); $res = mkdir(iconv("UTF-8", "GBK", $path),0777,true); if(!$res){ $this->createPath(); } } return $path; }
2022年06月23日
220 阅读
0 评论
0 点赞
2022-06-23
【PHP】PHP日志调试方法
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/2 18:01 * @param string $param 参数 * @param string $res 结果 * @param string $status 状态 false失败,true成功 * @Description:记录日志 */ public function superLog($param = '',$res = '',$status = false){ $logController = $this->request->controller(); $logName = $this->request->action(); $status = $status == true ? '成功'.PHP_EOL : '失败'.PHP_EOL; $dateTime = date('Y-m-d H:i:s',time()); $dateDay = substr($dateTime,0,10); //路径处理 $pathlog = "./fastlog/".$dateDay."/".$logController."/"; if(!is_dir($pathlog)){ header("Content-type:text/html;charset=utf-8"); $res = mkdir(iconv("UTF-8", "GBK", $pathlog),0777,true); if(!$res){ self::superLog(); } } //参数处理 if(is_array($param)){ $param = json_encode($param,JSON_UNESCAPED_UNICODE); } if(is_array($res)){ $res = json_encode($res,JSON_UNESCAPED_UNICODE); } error_log($dateTime.'=>'.$logName."\n"."参数:".$param."\n"."结果:".$res."\n".$status,3,$pathlog.$logName.'.txt'); } **便捷使用:** error_log(date('Y-m-d H:i:s',time())."=>aaa\n".print_r($data,true)."\n",3,"./aaa_log.txt");
2022年06月23日
277 阅读
0 评论
0 点赞
2022-06-23
【PHP】通过CURL获取结果集
在PHP调用别人的接口,需要用到curl相关操作,本文章集成了多个操作方法,并在今后的工作中不断完善 /** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2021/4/1 10:39 * @param string $url url地址 * @param bool $params 参数 * @param int $ispost 是否是post请求,默认get * @param int $https 是否是https,默认http * @param int $flbg 返回值是否转成数组,默认不转 * @param int $header 是否传递header值,默认不传,header值格式:$header = ['CLIENT-IP:127.0.0.1','X-FORWARDED-FOR:127.0.0.1']; * @param int $headercontent 是否获取请求的header值内容,默认不获取 * @param int $local 是否使用本地ip进行请求,默认不使用 * @return array|bool|mixed|string * @Description:curl请求 */ public function curl($url, $params = false, $ispost = 0, $https = 0, $flbg = 0, $header = 0,$headercontent = 0,$local = 0){ // $httpInfo = []; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.118 Safari/537.36'); // curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400'); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); if($header){ curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if($headercontent){ curl_setopt($ch, CURLOPT_HEADER, 1); } if($local){ $header = [ 'CLIENT-IP:127.0.0.1', 'X-FORWARDED-FOR:127.0.0.1' ]; curl_setopt($ch, CURLOPT_HTTPHEADER, $header); } if($https){ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 } if($ispost){ curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $params); curl_setopt($ch, CURLOPT_URL, $url); }else{ if($params){ if (is_array($params)) { $params = http_build_query($params); } curl_setopt($ch, CURLOPT_URL, $url . '?' . $params); }else{ curl_setopt($ch, CURLOPT_URL, $url); } } $response = curl_exec($ch); // if($response === FALSE){ // echo "CURL Error: " . curl_error($ch); // return false; // } // $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // $httpInfo = array_merge($httpInfo, curl_getinfo($ch)); if($headercontent){ //对返回的结果进行字符串处理 if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == '200') { $headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $headers = substr($response, 0, $headerSize); $body = substr($response, $headerSize); return [$headers,$body]; //body内容是图片 } } curl_close($ch); if ($flbg) { $response = json_decode($response, true); } return $response; } 上面的用本地请求的场景是,被curl请求接口做了IP限制,如果本地不可以用,可以使用下面的方法需要一个有效的代理ip和端口号,有的还需要用户名密码,代码如下:curl_setopt($ch, CURLOPT_PROXY, "http://39.156.69.79:8080");窍门:一般情况下是不需要代理,但是伪造的ip不能用,就ping一下你扒取接口的网址,然后用这个网址的ip做伪造。百分百成功。如遇类似问题不能解决,欢迎留言讨论。
2022年06月23日
205 阅读
0 评论
0 点赞
2022-06-23
【PHP】$_SERVER详解
## $_SERVER详解 ## > 以 "http://local.sdd.com/public/index.php/fast" 这个地址为例; $_SERVER['SCRIPT_NAME']; //当前脚本的路径 /public/index.php dirname($_SERVER['SCRIPT_NAME']); //dirname() 返回路径中的目录部分 /public $_SERVER['SCRIPT_FILENAME']; //当前脚本执行的绝对路径 D:/phpstudy_pro/WWW/sdd/public/index.php $_SERVER['HTTP_HOST']; //获取当前域名 local.sdd.com $_SERVER['SERVER_NAME']; //输出配置文件httpd.conf中的ServerName,一般情况下与HTTP_HOST值相同 local.sdd.com $_SERVER['SystemRoot']; //当前服务器的操作系统的目录 C:\WINDOWS $_SERVER['SERVER_SOFTWARE']; //服务器软件配置信息 Apache/2.4.39 (Win64) OpenSSL/1.1.1b mod_fcgid/2.3.9a mod_log_rotate/1.02 $_SERVER['SERVER_PORT']; //服务器端口 80 $_SERVER['REMOTE_PORT']; //用户连接到服务器时所使用的端口 58222 $_SERVER['SERVER_ADDR']; //服务器的ip地址 127.0.0.1 $_SERVER['REMOTE_ADDR']; //浏览网页的用户ip。 127.0.0.1 $_SERVER['DOCUMENT_ROOT']; //当前运行脚本所在的根目录 D:/phpstudy_pro/WWW/sdd $_SERVER['REQUEST_SCHEME']; //服务器通信协议,是http或https。 http $_SERVER['SERVER_ADMIN']; //服务器管理员信息 admin@example.com $_SERVER['REQUEST_METHOD']; //请求数据的方式 GET $_SERVER['REQUEST_URI']; //当前脚本路径,根目录之后的目录 /public/index.php/fast $_SERVER['PHP_SELF']; //当前正在执行脚本的文件名 /public/index.php/fast $_SERVER['REQUEST_TIME']; //得到请求开始时的时间戳。 1616986524 $_SERVER['HTTP_COOKIE']; //获取浏览器的cookie信息。 authId=u%2B4BNnh9IsFDM%2BM%7C1617241258%7C7b4GM396cJIXMeM%2BS3v0tszZx%2FKx; shownum=10 $_SERVER['HTTP_CONNECTION']; //当前请求的连接情况 close $_SERVER['HTTP_USER_AGENT']; //获取用户相关信息,包括用户浏览器、操作系统等信息 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36 $_SERVER['HTTP_ACCEPT']; //当前请求的ACCEPT头部信息 text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 $_SERVER['HTTP_ACCEPT_LANGUAGE']; //返回用户默认的语言设置,后面的q值表示用户对该语言的喜好程度 zh-CN,zh;q=0.9
2022年06月23日
269 阅读
0 评论
0 点赞
2022-06-23
【PHP】民族数组
["汉族","蒙古族","回族","藏族","维吾尔族","苗族","彝族","壮族","布依族","朝鲜族","满族","侗族","瑶族","白族","土家族", "哈尼族","哈萨克族","傣族","黎族","傈僳族","佤族","畲族","高山族","拉祜族","水族","东乡族","纳西族","景颇族","柯尔克孜族", "土族","达斡尔族","仫佬族","羌族","布朗族","撒拉族","毛南族","仡佬族","锡伯族","阿昌族","普米族","塔吉克族","怒族", "乌孜别克族", "俄罗斯族","鄂温克族","德昂族","保安族","裕固族","京族","塔塔尔族","独龙族","鄂伦春族","赫哲族","门巴族","珞巴族","基诺族"];
2022年06月23日
252 阅读
0 评论
0 点赞
2022-06-21
【PHP】根据身份证号码获取 性别,年龄,出生日期 的信息
//18位身份证取性别,倒数第二位奇数是男,偶数是女; $sex = substr($idcard, (strlen($idcard)==18 ? -2 : -1), 1) % 2 ? '1' : '2'; //取身份证年月日; $birthday = strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, 8); //身份证年月日转换成时间戳 $birthdays = strtotime(strlen($idcard)==15 ? ('19' . substr($idcard, 6, 6)) : substr($idcard, 6, 8)); //取当天日期; $today = strtotime('today'); //用时间戳相减算出年龄; $diff = floor(($today-$birthdays)/86400/365); //取出年龄值; $age = strtotime(substr($idcard,6,8).'+'.$diff.'years')>$today?($diff+1):$diff;
2022年06月21日
484 阅读
0 评论
0 点赞
2022-06-21
【PHP】CURL调用https请求的接口
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 加上这两行,完美解决
2022年06月21日
326 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP导出Excel所需要的表头上方的字母超过26位的解决方法
/** * @Author: 小破孩嫩 * @Email: 3584685883@qq.com * @Time: 2020/12/23 16:08 * @param int $column_num * @return mixed * @Description:获取表格列数的字母 */ public function getMaxColumn(int $column_num) { try{ if(empty($column_num)){ throw new Exception('column_num:列数为空~'); } if(!is_int($column_num)){ throw new Exception('column_num:参数类型错误~'); } if($column_num > 26*26 || $column_num < 0){ throw new Exception('最大列数:676列,最小列数:1列'); } $column_word = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']; //生成循环次数 $num = ceil($column_num/26); for($c = 0; $c < $num; $c++) { $first_word = $column_word[$c-1]; foreach($column_word as $key => $val){ if($c >= 1){ $word = $first_word.$column_word[$key]; }else{ $word = $column_word[$key]; } $column[] = $word; } } for($a = 0; $a < $column_num; $a++){ $new_column[] = $column[$a]; } return $new_column; }catch (Exception $e){ returnResponse(100,$e->getMessage()); } }
2022年06月21日
297 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP获取数组中重复value的key值
/** * @Author:小破孩 * @Time: 2020/8/7 17:14 * @param $array * @return array * @Description:获取数组重复value的key值 */ function getKeyByArrayValue($array){ $keyarr= []; $resultkey = []; foreach ($array as $k => $v) { if (in_array($v, $keyarr)) { //在数组中搜索键值$v,并返回它的键名 $resultkey[] = array_search($v,$keyarr); $resultkey[] = $k; }else{ $keyarr[] = $v; } } return $resultkey; }
2022年06月21日
264 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP实现网页转PDF - MPDF扩展
**PHP版本和扩展** mPDF >=7.0支持PHP^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0 PHP 7.3支持,因为mPDF v7.1.7 PHP 7.4支持,因为mPDF v8.0.4 PHPmbstring和gd必须加载扩展程序。 > 一些高级功能可能需要额外的扩展,例如zlib对于输出和嵌入式资源(如字体)的压缩,bcmath用于生成条形码或xml用于字符集转换和SVG处理。 **安装** composer require mpdf/mpdf **使用:** /** * @Author:小破孩 * @Time: 2020/8/10 19:04 * @param $url 网页地址 * @param $hetongming pdf存表的原名 * @return mixed|string * @throws \Mpdf\MpdfException * @Description:网页转PDF */ function htmlTopdf($url,$hetongming){ $mpdf = new \Mpdf\Mpdf(['mode'=>'utf-8','format'=>'A4','useSubstitutions'=>true,'useAdobeCJK'=>true,'autoScriptToLang'=>true,'autoLangToFont'=>true,'mgl'=>15,'mgr'=>15,'mgt'=>16,'mgb'=>16,'mgh'=>9,'mgf'=>9, 'orientation'=>'P']); $page = file_get_contents($url); $pwd = 'PDF_TY'.setCode();//修改文档的密码 // $pwds = setPwd($pwd); //查看密码 $mpdf->SetProtection(array(),'',$pwd,128); $mpdf->WriteHTML($page); $pdf_name = setNumber(); $name = "./Uploads/pdf/".$pdf_name.".pdf"; $mpdf->Output( $name ,'F'); $urls = "/Uploads/pdf/".$pdf_name.".pdf"; $pdf_filesize = filesize($name); $img_number = savePdf($hetongming,$pwd,$pdf_filesize,$urls); return $img_number; } 参考资料: > github:https://github.com/mpdf/mpdf > manual:https://mpdf.github.io/
2022年06月21日
271 阅读
0 评论
0 点赞
2022-06-21
【PHP】PHP生成随机 数,字符串
/** * @Author:小破孩 * @Time: 2020/7/15 17:39 * @param string $length 默认10 * @return string * @Description:生成数字和字母混合的邀请码 */ function setCode($length='10'){ $key=''; $pattern = ['1','2','3','4','5','6','7','8','9','0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']; for($i=0;$i<$length;$i++) { $key .= $pattern[mt_rand(0,35)]; //生成php随机数 } return $key; } // 生成随机字符串 private function randomString($len = 32) { $string = ''; $char = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; for ($i = 0; $i < $len; $i++) { $string .= $char[mt_rand(0, strlen($char) - 1)]; } return $string; } const MINIWORD = ['a','b','c','d','e','f','g','h','k','m','n','p','q','r','t','w','x','y','z'];//'l',,'i','j','s','o','u','v' const NUMS = ['2', '3', '5', '6', '7', '8', '9'];//'4', '1','0', /** * Author: 小破孩 * Email: 3584685883@qq.com * Time: 2021/12/29 10:26 * @param int $length * @return string * Description:核销码 */ public function setVerificationCode(int $length = 4):string { $dictionary =array_merge(self::MINIWORD,self::NUMS); shuffle($dictionary); $codeArrKey = array_rand($dictionary,$length); $code = ''; for($i = 0; $i < count($codeArrKey); $i++){ $code .= $dictionary[$i]; } return $code; } /** * Author: 小破孩 * Email: 3584685883@qq.com * Time: 2021/12/29 10:16 * @param int $length default 6 * @return int * Description:设置验证码 */ public function setSmsCode(int $length = 6):int { if($length == 6){ return mt_rand(100000,999999); } return mt_rand(1000,9999); }
2022年06月21日
242 阅读
0 评论
0 点赞
2022-06-21
【PHP】扩展 qrcode 二维码生成
**一、执行命令安装** composer require dh2y/think-qrcode **二、require安装** thinkphp5.0 安装 "require": { "dh2y/think-qrcode":"1.*" }, thinkphp5.1 安装 "require": { "dh2y/think-qrcode":"2.*" }, **三、autoload psr-4标准安装** a) 进入vendor/dh2y目录 (没有dh2y目录 mkdir dh2y) b) git clone c) 修改 git clone下来的项目名称为think-qrcode d) 添加下面配置 "autoload": { "psr-4": { "dh2y\\qrcode\\": "vendor/dh2y/think-qrcode/src" } }, e) php composer.phar update **添加配置文件** return [ 'cache_dir' => 'uploads'.DS.'qrcode', //缓存地址 'background'=> 'static/image/icon_cover.png' //背景图 ]; **使用方法** $code = new QRcode(); $code_path = $code->png($register_url) //生成二维码 ->logo('static/image/avatar-m.jpg') //生成logo二维码 ->background(180,500) //给二维码加上背景 ->text($role,20,['center',740],'#ff4351') //添加文字水印 ->text($nick_name,20,['center',780],'#000000') ->getPath(); //获取二维码生成的地址
2022年06月21日
238 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP地理位置计算
<?php /** *求两个已知经纬度之间的距离,单位为米 *@param lng1,lng2 经度 *@param lat1,lat2 纬度 *@return float 距离,单位米 **/ function getdistance($lng1,$lat1,$lng2,$lat2){ //将角度转为狐度 $radLat1=deg2rad($lat1);//deg2rad()函数将角度转换为弧度 $radLat2=deg2rad($lat2); $radLng1=deg2rad($lng1); $radLng2=deg2rad($lng2); $a=$radLat1-$radLat2; $b=$radLng1-$radLng2; $s=2*asin(sqrt(pow(sin($a/2),2)+cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137*1000; return intval($s); } function distanceConvert($s){ $s = intval($s); if($s <= 0){ return '附近'; }elseif($s > 0 && $s <= 1000){ return $s.'m'; }elseif($s > 1000 && $s <= 2000){ return '<2km'; }elseif($s > 2000 && $s <= 3000){ return '<3km'; }elseif($s > 3000 && $s <= 4000){ return '<4km'; }elseif($s > 4000 && $s <= 5000){ return '<5km'; }elseif($s > 5000){ return '>5km'; } } /** * 根据条件获取商户列表 * @param string $lng * @param string $lat * @param string $city_id * @param string $district_id * @param string $type_id * @param string $search * @return mixed */ //如果存在经纬度则考虑范围5公里内数据,如果不存在经纬度,则不考虑 public function GetShopList($navigationId = 0,$page = 1,$size =10 ,$lng = '', $lat ='', $city_id = '',$district_id = '',$type_id = '',$search = '') { $field = 'id,province_id,city_id,district_id,navigation_id,type_id,name,phone,address,logo,stime,etime,rule,activity,discount,latitude,longitude,status,token,sort,description,gmt_created'; $where = array( 'is_deleted' => 0, 'is_show' => 1, 'navigation_id'=>$navigationId, ); //判断城市,县区,分类是否存在 if(!empty($city_id)){ $where['city_id|province_id'] = $city_id; } if(!empty($district_id)){ $where['district_id'] = $district_id; } if(!empty($type_id)){ $where['type_id'] = $type_id; } if(!empty($search)){ $where['name'] = array('like',"%{$search}%"); } $offset = ($page * $size) - ($size - 1); //如果存在经纬度,就根据经纬度查询5公里范围内数据 if(!empty($lng) && !empty($lat)) { // //求出半径 // $radius = 5;//半径范围,单位km // $rangeLat = 180 / pi() * $radius / 6372.797;//纬度范围 // $rangeLng = $rangeLat / cos($lat * pi() / 180.0); //经度范围 // $maxLat = $lat + $rangeLat; //x1 // $minLat = $lat - $rangeLat; //x0 // $maxLng = $lng + $rangeLng; //y1 // $minLng = $lng - $rangeLng; //y0 // // $where['latitude'] = array(array('lt',$maxLat),array('gt',$minLat)); // $where['longitude'] = array(array('lt',$maxLng),array('gt',$minLng)); $list = $this->where($where)->field($field)->order("abs(longitude - {$lng}) + abs(latitude - {$lat})")->limit($offset,$size)->select(); }else{ $list = $this->where($where)->field($field)->order('sort asc')->limit($offset,$size)->select(); } //记录错误日志 if ($list === false) { wLog('GetShopList error! sql:' . $this->getLastSql(), $this->errorFile); wLog('GetShopList error! errorInfo:' . $this->error, $this->errorFile); } //wLog('GetShopList sql:' . $this->getLastSql(), $this->errorFile); return $list; }
2022年06月19日
225 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP身份证验证类
<?php /** *身份证号处理函数 */ /** * 功能:根据身份证号,自动返回生日 * @param stirng $IDCard 身份证号 * @return Ambigous <string, NULL> */ function getBrithday ($idCard) { if (strlen($idCard) == 18) { $birthday = substr($idCard, 6, 4) . '-' . substr($idCard, 10, 2) . '-' . substr($idCard, 12, 2); } elseif (strlen($idCard) == 15) { $birthday = "19" . substr($idCard, 6, 2) . '-' . substr($idCard, 8, 2) . '-' . substr($idCard, 10, 2); } else { $birthday = null; } return $birthday; } /** * 功能:根据身份证号,自动返回性别 * @param string $cid 身份证号 * @param number $comm 返回的性别类型 * @return string 男/女 1/0 */ function getSex ($cid, $comm = 0) { $cid = getIDCard($cid); $sexint = (int) substr($cid, 16, 1); if ($comm > 0) { return $sexint % 2 === 0 ? '女' : '男'; } else { return $sexint % 2 === 0 ? '0' : '1'; } } /** * 功能:把15位身份证转换成18位 * @param string $idCard * @return newid or id */ function getIDCard ($idCard) { // 若是15位,则转换成18位;否则直接返回ID if (15 == strlen($idCard)) { $w = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1); $a = array("1","0","X","9","8","7","6","5","4","3","2"); $s = 0; $idCard18 = substr($idCard, 0, 6) . "19" . substr($idCard, 6); $idCard18_len = strlen($idCard18); for ($i = 0; $i < $idCard18_len; $i ++) { $s = $s + substr($idCard18, $i, 1) * $w[$i]; } return $idCard18.$a[$s % 11]; } else { return $idCard; } } /** * 根据身份证号返回年龄 * @param string $id 身份证号 * @return string|number */ function getAge($id){ //过了这年的生日才算多了1周岁 if(empty($id)) return ''; $date=strtotime(substr($id,6,8)); //获得出生年月日的时间戳 $today=strtotime('today'); //获得今日的时间戳 $diff=floor(($today-$date)/86400/365); //得到两个日期相差的大体年数 //strtotime加上这个年数后得到那日的时间戳后与今日的时间戳相比 $age=strtotime(substr($id,6,8).' +'.$diff.'years')>$today?($diff+1):$diff; return $age; }
2022年06月19日
333 阅读
0 评论
0 点赞
2022-06-19
【PHP】PHP生成唯一ID
<?php header("Content-Type: text/html; charset=UTF-8"); date_default_timezone_set("PRC"); // error_reporting(0); // 生成ID:Unix时间戳+毫秒+微妙+四位随机数字(20位数字,2028/06/15 前可存入MySQL,数据类型:BIGINT) $id = microtime(); $id = substr($id, 11) . substr($id, 2, 6) . mt_rand(1000, 9999); //循环里面可用 public function setUUID(){ $currentTimestamp = microtime(true); $uuid = self::generateUUIDInner(); while (in_array($uuid, self::$generatedUUIDs)) { $uuid = self::generateUUIDInner(); } self::$generatedUUIDs[] = $uuid; self::$lastTimestamp = $currentTimestamp; return $uuid; } private static function generateUUIDInner() { $milliseconds = floor(microtime(true) * 1000); $randomPart = mt_rand(100, 999); $uuid = date('YmdHis').substr(strval($milliseconds), -3).$randomPart; return $uuid; echo "Generated UUID inside: ".$uuid."\n"; die; }
2022年06月19日
288 阅读
0 评论
0 点赞
1
...
3
4
5