php-trait-的优先级
<?php trait Demo1{ public function test(){ return __METHOD__; } } trait Demo2{ public function test(){ return __METHOD__; } } class Demo0{ public function test(){ return __METHOD__; } } class Demo extends Demo0{ use Demo1,Demo2{ Demo1::test insteadof Demo2; // tait1中的test方法优先于trait2中的test方法(如果不这么设置,同名的方法会导致报错) Demo2::test as demo2test; // trait2 的test方法别名为 trait2test } } $obj = new demo(); $obj->test();// Demo1::test $obj->demo2test();// Demo2::test trait ,当前类,父类优先级: 当前类方法 > trait 的方法 > 父类的方法 如果当前类引用了两个 trait, 并且这两个 trait 中有同名方法,则会报错, 可以使用 insteadof 指定使用哪个trait的方法, 此外还可以用 as 来设置别名, 从而供当前类使用正则表达式-cheat-sheet-from-github
转载自: https://github.com/niklongstone/regular-expression-cheat-sheet.git Regular Expression Cheat Sheet - PCRE Anchor Description Example Valid match Invalid ^ start of string or line ^foam foam bath foam \A start of string in any match mode \Afoam foam bath foam $ end of string or line finish$ finish finnish \Z end of string, or char before last new line in any match mode finish\Z finish finnish \z end of string, in any match mode.openssl-加密函数
后台使用密码保存时, 使用 md5, 不可解密; 如今想给一个登录 token 加密, 原始做法是用 md5+一定数量的字符串, 并且在缓存(或数据库)中保存这个键值对; 如果不想在后台保存 token 信息, 可以把 token信息(包括过期时间,用户账号等) 使用 open_ssl 加密, 然后要在后台要验证的时候, 再解密出来 例如 <?php $key = 'key123456789';//加密字符串的密码, 类似于md5加盐 $method = 'AES-128-CBC';// 加密方法 $arr = ['user_id'=>1, 'expire_time'=>60*60]; // 用户id为1, 有效期为1h $str = json_encode($arr); $secret_str = openssl_encrypt($str,$method,$key);// 加密字符串 $secret_str = urlencode($secret_str);// 加密字符串 var_dump($secret_str);// jRX%2BtqOyhHVOzHX7cFI0usMUs7qKH4uEaOqKkdBQ2A08C1FmRRGXWFBfCleJPu3i $origin_str = urldecode($secret_str); $origin_str = openssl_decrypt($origin_str,$method,$key);// 解密字符串 var_dump($origin_str);// {"user_id":1,"expire_time":3600} var_dump(json_decode($origin_str));// ["user_id"=>1,"expire_time"=>3600] // 加密 openssl_encrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string &$tag = NULL [, string $aad = "" [, int $tag_length = 16 ]]]]] ) : string // 解密 openssl_decrypt ( string $data , string $method , string $key [, int $options = 0 [, string $iv = "" [, string $tag = "" [, string $aad = "" ]]]] ) : string // data // The encrypted message to be decrypted.nginx-反向代理
正向代理是 客户端向指定的服务器发起请求, 客户是隐藏的; 反向代理, 则是隐藏了多个服务器, 由代理服务器决定向(集群服务器组)哪个服务器发起请求 参考自: https://blog.csdn.net/tsummerb/article/details/79248015onethink-后台编辑器选择问题
public function adminArticleEdit($data){ $res= $this->getConfig(); // var_dump($res); $res['editor_type']=2; $this->assign('addons_data', $data); // $this->assign('addons_config', $this->getConfig()); $this->assign('addons_config', $res); $this->display('content'); } }phpqrcode-生成的图片转为-base64-格式输出
原文见: https://www.pusonglin.cn/work/1619.html 项目中需要用到phpqrcode生成二维码,但是通过QRcode::png()生成的是显示输出当前的照片流,这样就不适用于列表显示多个二维码的需求了。网上也有相关的一些解决方案:通过把照片流缓存,然后进行base64编码。 找到生成图片用到了QRimage类的png方法,去除里面的:Header(“Content-type: image/png”);即可。 class QRimage { //---------------------------------------------------------------------- public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE) { $image = self::image($frame, $pixelPerPoint, $outerFrame); if ($filename === false) { // Header("Content-type: image/png"); ImagePng($image); } else { if($saveandprint===TRUE){ ImagePng($image, $filename); header("Content-type: image/png"); ImagePng($image); }else{ ImagePng($image, $filename); } } ImageDestroy($image); } 如此,不再让输出端整个页面变为图片类型,解决方案并不完美,但是能达到我的目的即可。 附调用端代码: <?php global $_W,$_GPC; function getqrcode($url){ require_once MODULE_ROOT.'/lib/phpqrcode_web.php'; $value = $url; //二维码内容 $errorCorrectionLevel = 'L'; //容错级别 $matrixPointSize = 5; //生成图片大小 //生成二维码图片 ob_start(); QRcode::png($value,false,$errorCorrectionLevel, $matrixPointSize, 2); $imgstr = base64_encode(ob_get_contents()); ob_end_clean(); return $imgstr; } //调用查看结果 include $this->template('web/test'); ?正则表达式-----必须含有大写字母和数字
原文见:https://blog.csdn.net/u011974797/article/details/71479456 要求:由数字和字母组成,并且要同时含有数字和字母,且长度要在8-16位之间。 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$ 分开来注释一下: ^ 匹配一行的开头位置 (?![0-9]+$) 预测该位置后面不全是数字 (?![a-zA-Z]+$) 预测该位置后面不全是字母 [0-9A-Za-z] {8,16} 由8-16位数字或这字母组成 $ 匹配行结尾位置 注:(?!xxxx) 是正则表达式的负向零宽断言一种形式,标识预该位置后不是xxxx字符。 附: 要求:可以包含数字、字母、下划线,并且要同时含有数字和字母,且长度要在8-16位之间。 ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z_]{8,16}$HTML+CSS底部footer两种固定方式
原文见: https://blog.csdn.net/xianglikai1/article/details/78411615 网页常见的底部栏(footer)目前有两种: 一、永久固定,不管页面的内容有多高,footer一直位于浏览器最底部,适合做移动端底部菜单,这个比较好实现; <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <style> body { padding-bottom: 50px; } .footer { position: fixed; left: 0px; bottom: 0px; width: 100%; height: 50px; background-color: #eee; z-index: 9999; } </style> </head> <body> 内容,可以大量复制看效果<br /> <div class="footer">固定在底部</div> </body> </html> 二、相对固定,当页面内容高度不沾满浏览器高度,footer显示在浏览器底部,且不会出现滚动条,如果页面内容高度超出浏览器高度,footer则相对与内容的最底部,并且自动出现滚动条; <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <meta charset="utf-8" /> <style type="text/css"> * { margin: 0px; padding: 0px; } html, body { height: 100%; } .fastadmin-隐藏后台登陆地址
我们都知道后台/admin是我们最常用的登录入口,方便的同时也留下了隐患,如果你刚好使用了admin/123456这种账号密码的方式,会导致我们的后台完全暴露在外。 因此我们建议修改后台的登录入口,达到隐藏后台登录入口的效果。 原文见:https://forum.fastadmin.net/thread/7640 操作步骤 1、首页修改application/config.php中deny_module_list的值,其中默认已经有common,我们添加admin,改成['common', 'admin'] 2、然后修改项目public目录下的admin.php,将其改名为admin_d75KABNWt.php,我们可以将admin.php其中的admin改成任意随机的字符串,越长越好。 登录后台 通过以上的修改后,我们不能再通过[www.yoursite.com/admin](http://www.yoursite.com/admin)的形式登录后台了,此时我们可以采用[www.yoursite.com/admin_d75KABNWt.php](http://www.yoursite.com/admin_d75KABNWt.php),其中admin_d75KABNWt.php就是我们任意修改的名称。 请保护好你后台的登录入口,千万别到处去粘贴,如果有泄漏后台入口,请再次尝试修改即可。 安全建议 通过上面的隐藏后台入口地址,我们已经加好了第一道门,以下是FastAdmin给大家的安全建议,为我们后台添加更多的安全防护。 1、定期修改后台管理的登录入口和超级管理员密码,越复杂越好。 2、开启后台登录验证码,开启方式:修改application/config.php底部中login_captcha,将它的值改为true 3、修改后台超级管理员用户名,默认是admin,建议修改,修改方式直接在权限管理->管理员管理中修改 4、移除冗余的管理员,早期FastAdmin中默认添加了几个管理员用于权限划分,建议删除。fastadmin-忘记后台账号密码
https://forum.fastadmin.net/thread/43 数据库修改两个字段 密码:c13f62012fd6a8fdf06b3452a94430e5 密码盐:rpR6Bv 登录密码是123456
Recent Posts
Tags
- apache 4
- axios 1
- benchmark 1
- c 1
- canvas 1
- centos 3
- channel 1
- crontab 1
- css 2
- docker 4
- fail2ban 1
- frp 1
- gin 1
- github 1
- go 26
- goaccess 1
- goroutine 1
- http 1
- https 1
- jetbrains 1
- jquery 1
- js 2
- linux 20
- mermaid 1
- mysql 10
- nginx 3
- node 1
- php 43
- prisma 1
- react 8
- server 1
- ssh 2
- tarojs 1
- tcp/ip 1
- token 1
- ubuntu 1
- ufw 1
- unit-test 1
- vmware 1
- vscode 1
- vue 12
- yum 1
- 域名 3
- 安全 2
- 微信 3
- 算法 3