Switch language
zh
Switch theme
Light
  • 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/79248015
  • onethink-后台编辑器选择问题

    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
🍀