笔记
猿粪已尽
萌新,学习的道路不断成长
展开
-
二维数组根据某个字段进行分组
二维数组分组原创 2022-08-30 09:16:32 · 457 阅读 · 0 评论 -
hyperf 封装logger
代码】hyperf 封装logger。原创 2022-08-09 14:31:22 · 453 阅读 · 0 评论 -
hyperf2.1中使用中间件方式实现跨域功能
hyperf2.1中使用中间件方式实现跨域功能。原创 2022-08-09 10:39:36 · 632 阅读 · 0 评论 -
MySQL教程之concat以及group_concat的用法
本文中使用的例子均在下面的数据库表tt2下执行:一、concat()函数1、功能:将多个字符串连接成一个字符串。2、语法:concat(str1, str2,...)返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。3、举例:例1:select concat (id, name, score) as info from tt2;中间有一行为null是因为tt2表中有一行的score值为null。例2:在例1的结果中三个字段id,na转载 2022-02-10 18:55:08 · 2622 阅读 · 0 评论 -
2021-10-24
哈哈哈原创 2021-10-24 08:03:07 · 47 阅读 · 0 评论 -
PHP中文转拼音(封装)
<?php/** +------------------------------------------------------ * PHP 汉字转拼音 +------------------------------------------------------ * 使用方法: * $py = new PinYin(); * echo $py->getAllPY("输出汉字所有拼音"); //shuchuhanzisuoyoupinyin .原创 2020-12-29 14:13:40 · 303 阅读 · 3 评论 -
安装Mysql追踪器phpgjx
phpgjx说白了就是一个日志文件读取的基于PHP的软件,能够可视化的读取当前连接的数据库操作的日志进行分析。首先下载phpgjx2.0版本:https://pan.baidu.com/s/154Fhr5csIhyozq4P2khjkg密码:hlz4下载完事儿之后,先配置mysql开启日志文件,mysql的配置文件为:my.ini,打开之后找到[mysqld]这一节点,然后打开日志,并且分配日志的保存路径:general_log=ONgeneral_log_file=D:/wamp/www原创 2020-10-20 10:53:02 · 209 阅读 · 0 评论 -
apache-jmeter压测报告
首先,第一步要先安装好jdk,前往jdk安装。安装好jdk之后,就是配置环境变量,这里以自己的安装路径教学,安装在路径为C:\Program Files\Java\jdk-14.0.2(1)变量名:JAVA_HOME 变量值: C:\Program Files\Java\jdk-14.0.2(2)变量名:CLASSPATH 变量值: .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar 备注:记得前面的".;"(3)变量名:Path 变量值: ...原创 2020-09-10 16:46:48 · 713 阅读 · 0 评论 -
PHP 实现 Websocket 协议
当初作为编程小白的我,刚刚从事后台工作,觉得 http 是个很牛逼的东西,然而后面随着自己深入学习并实践之后,觉得原来和我所想的天壤之别,没大家想象的那么复杂,仅仅是个协议嘛!。后面学习的东西多了,慢慢的就淡定了。今天这里之所以要讲 websocket,而不是其它的协议,从某种意义上来说(请允许我装个逼),更能说明问题,如果你把 websocket 都搞懂了,那么 http 对于你来说,简直就是雕虫小技啊,关于 websocket 的代码,以前我使用 C 和 C++ 写的,但是为了 PHP 的 coder(转载 2020-09-09 11:26:28 · 317 阅读 · 3 评论 -
PHP中使用websocket
在PHP中,开发者需要考虑的东西比较多,从socket的连接、建立、绑定、监听等都需要开发者自己去操作完成,对于初学者来说,难度方面也挺大的,所以本文的思路如下:1、socket协议的简介2、介绍client与server之间的连接原理3、PHP中建立socket的过程讲解4、用一个聊天室作为实例详细讲解在PHP中如何使用socket一、socket协议的简介 WebSocket是什么,有什么优点 WebSocket是一个持久化的协议,这是相对于http非持久化来说的。转载 2020-09-09 11:18:50 · 4506 阅读 · 2 评论 -
TP5多表联查 sun求和,count求数量不正确的解决办法
多表联查count数据来进行统计,会出现重复的数据,这时候在查询中加上distinct来返回不同的值.DB::name(‘member’)->alias(‘a’)->field(‘count( distinct b.id) as followCount,count(distinct c.id) as articleCount,count(distinct d.id) as readBookCount,count(distinct e.id) as commentsCount’)-.原创 2020-09-03 10:18:39 · 2410 阅读 · 1 评论 -
fastadmin 单选框禁止选择
用fastadmin开发,用到单选框,然后给默认值,想让添加商品的时候是无法操作上架的,只有商品规格完善,才可以在修改里去上架商品,一开始是如下写法,怎么都实现不了。{:build_radios('row[is_shelf]', ['1'=>__('上架'),'0'=>__('下架')],'0')}查阅文档,找到了解决办法如下:{:Form::radios('row[is_shelf]', ['1'=>__('上架'),'0'=>__('下架')],'0',['.原创 2020-09-02 15:29:20 · 2859 阅读 · 1 评论 -
记录一次工作中的排序问题(冒泡排序)
今天老板突然说,之前的商家排序,先按照距离排序,然后如果距离相等,就按照商家名称首字母排序。绞尽脑汁,一中午没睡午觉不知道怎么写,想着要把相等的拿出来排序号再插进去吗?那很麻烦啊。一直纠结一中午,下午突然想到冒泡排序可能可以,于是就尝试了一下。果然及解决了问题,下面分享一下代码。 /** * @param $arr * @param $key * @return mixed * 冒泡排序 */ protected function mpSo原创 2020-08-27 15:40:45 · 194 阅读 · 0 评论 -
解决TP5 EXP 查询表达式错误
条件查询 EXP 报错发布于 2019-05-17 11:10:44$where['g.deletetime'] = ['exp', 'is null'];报错信息:Exception in Builder.php line 398查询表达式错误:EXP解决办法:请使用\think\Db::raw("is null")写法:$map['ship_sn'] = ['exp',Db::raw('is null')];...原创 2020-08-26 11:22:14 · 3969 阅读 · 0 评论 -
fastadmin 导出
1:先上效果图2:实现步骤①在对应的js(路径:/public/assets/js/backend/xxx.js)里添加下图代码下面是图中的代码:$(document).on("click", ".btn-export", function () { var ids = Table.api.selectedids(table); var page = table.bootstrapTable('getData'); var all = table.boots转载 2020-07-29 17:29:32 · 3888 阅读 · 4 评论 -
万能web开发文档笔记
https://www.kancloud.cn/logoove/we7/678511原创 2020-07-14 11:24:55 · 104 阅读 · 0 评论 -
TP5进阶学习
https://www.kancloud.cn/mikkle/thinkphp5_study/373344原创 2020-06-15 15:59:44 · 235 阅读 · 0 评论 -
PHP开发中多种方案实现高并发下的抢购、秒杀功能
抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用Redis。重点在于第二个问题.常规写法:查询出对应商品的库存,看是否大于0,然后执行生成订单等操作,但是在判断库存是否大于0处,如果在高并发下就会有问题,导致库存量出现负数正确的实现功能流程:基于redis队列流程:1. 管理员根据goods表中的库存,创转载 2020-06-15 14:44:05 · 1036 阅读 · 0 评论 -
商城秒杀思路
https://www.jianshu.com/p/aa18f15e1bf0https://blog.csdn.net/dabao87/article/details/82414839https://blog.csdn.net/weixin_43620235/article/details/88999368原创 2020-06-09 15:52:09 · 140 阅读 · 0 评论 -
主键不是ID时,表格内置样式toggle无法执行的解决方法
Table.api.formatter.toggle默认使用的是id作为主键,假如这个表格的主键不是id,绑定的数据会变为undefined,从而导致执行失败。打开assets/js/require-table.js文件找到下列代码,并修改:` toggle: function (value, row, index) { var options = $(table).bootstrapTable('getOptions'); //新增这行转载 2020-06-08 15:26:44 · 368 阅读 · 0 评论 -
fastadmin表格
虚无缥缈的云博客园 首页 新随笔 联系 管理 订阅随笔- 245 文章- 0 评论- 5一张图解析FastAdmin中的表格列表的功能大图:1、默认生成的CRUD是没有菜单名称和描述显示的,如果需要显示则可以在后台修改,权限管理->菜单规则,给对应菜单的添加上备注信息后即可显示,支持HTML2、TAB过滤选项卡在一键生成CRUD时,如果表中存在status字段且为ENUM类型,则会生成相应的TAB过滤选项卡,如果需要生成其它字段的过滤...转载 2020-06-04 08:58:18 · 3129 阅读 · 0 评论 -
PHP获取经纬度
#获取百度经纬度(ak=百度ak码)function addressbaidu($address)//$address:地址{ $url='http://api.map.baidu.com/geocoder/v2/?address='.$address.'&output=json&ak=Bsr5iefxHEwQD8iCFTx3GwWOem0ZoSBk'; if($result=file_get_contents($url)) { $arr=...转载 2020-05-21 14:03:57 · 634 阅读 · 0 评论 -
TP5中vendor和extend的区别
composer的会安装到vendor里,自己写的,可以扔extend里通过了解tp5的目录结构,我们知道其中有两个目录是放置扩展类库文件的。extend是放置自定义或者其他类文件的。vendor目录是放置composer类库文件的。当我们的第三方类库文件是下载的,而且类文件目录一层又一层,我们开发当中要按照tp5的命名规范来做效率就会非常的低,而且面向对象编程就是拿来即用,何必还要动手去改类文件的源码。其实tp5给了我们一种方式去实现不用命名空间来加载第三方的类!我..转载 2020-05-20 17:33:34 · 451 阅读 · 0 评论 -
PHP查询附近的人及其距离的实现方法
<?php//获取该点周围的4个点$distance = 1;//范围(单位千米)$lat = 113.873643;$lng = 22.573969;define('EARTH_RADIUS', 6371);//地球半径,平均半径为6371km$dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat)));$dlng = rad2deg($dlng);$dlat = $distan.转载 2020-05-19 21:49:17 · 521 阅读 · 0 评论 -
TP5框架完整学习笔记
安装配置官网下载TP5完整版(初学者学习用的)解压到本地的开发环境phpstudy中,默认的入口文件是public,访问public会看到TP5成功页面。目录介绍一般开发中,代码都是写在application这个文件夹中开发一个项目的时候,通常分为前台和后台,前台一般放在index模块中,后台一般放在admin模块中。也可以自己新建一个模块模块内部,都遵循着MVC...转载 2020-01-02 15:07:24 · 585 阅读 · 0 评论 -
Redis的相关知识总结
一、什么数据可以放缓存不需要实时更新但是又极其消耗数据库的数据。比如网站上商品销售排行榜,这种数据一天统计一次就可以了,用户不会关注其是否是实时的。需要实时更新,但是更新频率不高的数据。比如一个用户的订单列表,他肯定希望能够实时看到自己下的订单,但是大部分用户不会频繁下单。在某个时刻访问量极大而且更新也很频繁的数据。这种数据有一个很典型的例子就是秒杀,在秒杀那一刻,可能有...原创 2019-12-30 18:17:31 · 113 阅读 · 0 评论 -
TP5打印sql的几种方式
获取sql语句getLastSql $res = Db::table('staff')->field('id,salary')->where('id','>',1) ->group('salary')->having('salary > 5000')->select(); $sql = Db::tab...转载 2019-12-26 15:48:23 · 3368 阅读 · 0 评论 -
web框架中的controller、service层、dao层、logic层的联系与作用啊
说下个人目前在用的分布Controller:接受Web请求,分发调用不同的逻辑或服务完成一项事情,返回数据service:做些服务Api接口相关的代码dao:和数据库打交道(对表进行增删改查)logic:自己的业务逻辑相关现在有个PC注册账号的功能 1:初始阶段,controller收到请求,直接在controler里面写数据库连接,进行增删改查,没毛病,可以运行。 2:慢...转载 2019-12-25 18:21:46 · 3260 阅读 · 0 评论 -
PHP设计模式
1.单例模式https://baijunyao.com/article/1592. 简单工厂模式https://baijunyao.com/article/1613.工厂方法模式https://baijunyao.com/article/1624.抽象工厂模式https://baijunyao.com/article/1645.使用简单工厂来优化抽象工厂模式h...转载 2019-11-12 17:36:13 · 144 阅读 · 0 评论 -
服务器端实现接口的token验证
第一步服务端要生成Token值自己编写的生成随机字符串第二步我们将生成的token作为Redis缓存的键来存储我们可以在Redis缓存里面设置token过期的时间。第三步也是我们经常要做的,对token进行验证,判断当前token是否有效给出Redis缓存代码...转载 2019-10-22 15:44:51 · 3201 阅读 · 0 评论 -
三年PHP面试总结
1. PHP方面的问题什么是composer?以及composer是干什么用的?工作原理PHP如何实现静态化你了解设计模式吗?说下你最常用的设计模式观察者模式是如何实现的?工厂模式是如何实现的?适配器模式是如何实现的?……PHP的优化方案说下你了解的session和cookie如何实现不基于session和cookie的用户认证。说下你目前框架所用到的核心概念什么是CSRF攻击,...转载 2019-05-29 14:03:04 · 891 阅读 · 0 评论 -
lamp环境搭建教程
原文链接:https://www.howtoforge.com/apache_php_mysql_on_centos_7_lamphttps://www.cnblogs.com/apro-abra/p/4862285.html在网上搜资料,自己在本地虚拟机上尝试搭建,弄了整整一天一夜,终于弄好了.网上的资料,虽然很多,但大多都是重复的,拿去试了之后,又很多都不能得到正确的结果.最终找到了...转载 2019-06-06 14:30:00 · 1035 阅读 · 0 评论 -
Laravel数据库操作的三种方式
原文链接:https://www.jianshu.com/p/d79962751ebfLaravel提供了3种操作数据库方式:DB facade(原始方式)、查询构造器和Eloquent ORM。数据库的配置文件在config目录下的database.php里。打开这个文件,找到mysql的配置项。配置这里有个env,它其实是调用了laravel根目录下的.env文件,这...转载 2019-06-06 11:18:36 · 228 阅读 · 0 评论 -
PHP 操作 Redis 的基本方法
原文链接:https://learnku.com/articles/229421 redis 的连接 : //实例化redis$redis = new Redis();//连接 $redis->connect('127.0.0.1', 6379);//检测是否连接成功echo "Server is running: " . $redis->ping();// 输出...转载 2019-06-12 17:11:11 · 90 阅读 · 0 评论 -
laravel5 使用redis的个人总结
laravel5 有俩种使用redis的方法,非框架调用和框架调用非框架调用:$redis = new redis(); $result = $redis->connect('127.0.0.1', 6379); $result = $redis->set('test',"11111111111"); //添加key/value记录$result = $r...转载 2019-06-12 15:30:01 · 373 阅读 · 0 评论 -
Redis的命令参考
参考链接:https://blog.csdn.net/weixin_41058118/article/details/78537721http://redisdoc.com/set:添加,如果说已经存在键名,替换setnx:添加,如果说键名已经存在,添加失败键名具有唯一性1,connect描述:实例连接到一个Redis.参数:host: string,port: int返回值...转载 2019-06-12 15:15:31 · 101 阅读 · 0 评论 -
服务器接口反应慢,TTFB等待时间过长解决办法
最近觉得网站打开很慢,总是找不到原因,无论代码优化还是服务器数据库操作都不行,检查问题也始终没找到正确的原因,无意中看了谷歌浏览器里面每个接口的速度,点进去看到一个TTFB,查了一下就是从服务器接收到第一个字节前”所花费的毫秒数。百度了这个TTFB,找到的都是所localhost解析的时间耽误了,所以我直接把localhost换成了IP地址。果然速度立马就很快了。感谢前辈。参考链接:https...原创 2019-05-23 11:54:51 · 9794 阅读 · 0 评论 -
php 在web端读出pdf 与各种文件下载
原文链接:https://www.cnblogs.com/sunxun/p/4470648.html单纯的下载功能实现 1 2 3 4 5 6 7 8 9 10 <?php // 表示调用文本类型为pdf的应用 header('Content-type: applica...转载 2019-05-27 14:00:53 · 1103 阅读 · 0 评论 -
关于tp3.2实现redis做图形验证码的经验总结
最近遇到一个问题,就是跨域会丢失session的问题,然后一开始想到的就是用token做,但是后来做忘记密码这个功能,涉及到的类文件库里面有session,会丢失导致验证一直失败,思路就变了。也是查阅了很多资料,借鉴了很多前辈的经验,经过不断测试,终于解决了这个问题。这里是把tp自带的verify类改写成redis方式实现的。这个可以查看我上一篇文章。一开始是redis 类没有建立。然后我...原创 2019-05-21 17:50:45 · 394 阅读 · 0 评论 -
用Redis替代session改写thinkPHP验证码类
原文链接:https://blog.csdn.net/kunpeng1987/article/details/80259904最近有一个项目,因为后端用的是thinkPHP框架,前端用的VueJS框架,需要用到验证码,由于都是用的API,所以原有的tp框架验证码类采用的session存储方式无法实现需求,需要进行改写。记录一下过程,并分享给大家以供参考。验证码类中主要涉及到两个方法,一个是...转载 2019-05-20 17:56:22 · 479 阅读 · 0 评论