- 博客(49)
- 收藏
- 关注
原创 Nginx反向代理、负载均衡理解及实践
可以看到正向和反向代理中代理服务器的位置是不同的,正向代理针对的是客户端,如VPN对用户来说是有感知的,如连接的是美国节点还是俄罗斯节点,而反向代理针对的是真实服务器,对用户来说是无感知的,如我们访问百度永远都是只需要输入baidu.com,而其背后有多少台服务器、具体访问的是哪个服务器我们是无感知的,这里把请求分配到具体服务器的操作就是nginx反向代理做的事情,它可以根据各种规则把请求分配到不同的服务器,这时就实现了负载均衡。nginx也需要此库。......
2022-08-13 15:52:24
1054
原创 PHP基于xlswriter支持无限表头层级Excel导出
本章介绍基于PHP扩展xlswriter的Vtiful\Kernel\Excel类可以支持无限层级的复杂表头导出!废了九牛二虎之力,终于把这个功能类写完了…后续会持续更新优化准备xlswriter扩展windows系统:到PECL网站下载符合自己本地PHP环境的ddl文件下载地址,并复制到PHP的扩展目录ext文件夹下,修改php.ini文件,加上这行extension=xlswriter打开phpinfo()验证扩展是否安装成功Linux系统:pecl install xlswrite
2022-04-30 21:25:42
4368
2
原创 MySQL解决唯一索引列与逻辑删除冲突问题
需求:如数据表 users ,列分别为id,user_name,age,create_at,delete_at要实现以user_name(用户名)为唯一索引,并支持软删除,以delete_at(删除时间)不为空为标识;问题:同一个表中会存在多条user_name相同的行,与唯一索引冲突;解决方案:以 user_name 和 delete_at 建立组合唯一索引alter table users add unique index uidx(user_name,delete_at);当dele
2022-04-19 23:10:48
2270
2
原创 MySQL主从复制、主主复制【MySQL 5.7,Docker】
环境准备我们需要准备两台Mysql,因为这里用Docker,所有只需准备两台Mysql容器;Docker安装Mysql:1.拉取镜像docker pull mysql:5.72.启动两个容器(一主一从)#-p 12345:3306 容器内3306端口映射至外部12345端口#--name mysql_master 容器命名#-v /docker/mysql_master/conf:/etc/mysql/conf.d -v /docker/mysql_master/logs:/logs -v
2022-04-17 00:18:19
327
原创 Docker Swarm集群搭建记录
一、简介Docker Swarm 是Docker官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker资源。二、名词解释swarm:集群的管理和编排。docker可以初始化一个swarm集群,其它节点可以加入。node:每一个docker主机就是一个docker节点,分为 manager 节点和 worker 节点。manager node:负责执行容器的编排和集群的管理工作,保持并维护swar.
2022-04-16 20:36:30
2579
原创 Docker分分钟搭建Redis高可用集群
本例中创建3主3从的Redis集群使用Docker搭建Redis集群分分钟搞定,废话少说,开搞!1.先删除当前运行的所有容器,保证环境干净docker rm -f $(docker ps -aq)2.创建一个网卡可先使用 ip addr 命令查看docker0的ip地址,用以子网地址的参考docker network create redis --subnet 172.38.0.0/163.查看创建的网卡列表docker network ls查看redis网卡的详细信息:docke
2022-04-16 17:39:16
206
原创 Docker网络
理解Docker网络(Docker0)我们每启动一个docker容器,docker就会给docker容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0,用的是桥接模式,使用的技术是evth-pair技术。evth-pair 就是一对的虚拟设备接口,他们都是成对出现的,一端连着协议,一端彼此相连,实现通信。正因为有这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备如下图:容器1和容器2是共用的一个路由器docker0,所有的容器在不指定网络的情况下,都是dock
2022-04-16 17:34:48
773
原创 Nginx常用命令
开机可先验证nginx配置文件是否正确方法一:进入nginx安装目录sbin下,输入命令./nginx -t方法二:在启动命令 -c 前加 -t启动格式:nginx安装目录地址 -c nginx配置文件地址例:[root@LinuxServer sbin]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf停止停止有三种方式,获取nginx进程号:[root@LinuxServer ~]#ps -ef|gr
2022-02-12 23:48:19
6544
原创 Laravel使用事件Event
第一种创建方式:这种方式较为传统,按流程一步步创建,如果后续有新的监听,需要手动创建并进行关联第一步:创建一个事件,如用户登录php artisan make:event UserLogin第二步:为事件创建监听,如给管理员发送邮件(一个事件可以有多个监听)php artisan make:listener EmailAdminUserLogin --event=UserLogin第三步:系统中注册事件和监听的关系在 app/Providers/EventServiceProvider
2022-01-12 11:59:06
846
原创 Laravel之日志文件分日期
1.修改 config/logging.phpchannels数组的 single、daily、slack 加 ‘permission’ => 0666, 即日志文件的权限。2. .env文件LOG_CHANNEL = dailyLOG_LEVEL = debug如果需要记录sql日志:1.config/logging.php的channels数组中加'sql' => [ 'driver' => env('LOG_CHANNEL', 'stac
2021-09-24 14:15:23
569
原创 Laravel之自定义路由
自定义路由文件可方便我们项目的模块化路由文件位置:routes框架默认的路由文件为 web.php我们可在同级目录创建自己的路由文件,例:admin.php路由文件创建后需注册才能生效,在 app/Providers/RouteServiceProvider.php 文件中 map() 函数增加:public function map(){ $this->mapApiRoutes(); $this->mapWebRoutes(); $this->
2021-09-12 00:22:13
395
原创 Laravel之数据库迁移文件
数据库迁移文件可快速方便的为我们创建数据表迁移文件位置:app/database/migrations创建迁移文件:php artisan make:migration 文件名(如create_user_table)运行所有未执行的迁移文件:php artisan migrate运行单个迁移文件,例:php artisan migrate --path=/database/migrations/2021_08_30_072323_create_user_table.php回
2021-09-12 00:14:36
734
原创 Laravel之模型观察者
模型观察者可以实现当绑定的模型发生增删改查等操作时做出相应的操作。模型观察文件位置:app/Observers创建模型观察者:php artisan make:observer TestObserver -m 监听的模型名模型观察者创建后需要注册,在 app/Providers/AppServiceProvider.php (服务提供者)文件中:public function boot(){ //注册监听 //被监听的模型(模型观察者) User::observ
2021-09-11 23:22:30
473
原创 Laravel框架之队列
队列可用来执行发送邮件、短信、推送等,还可用来做高并发时将库存放入队列中,来防止超卖的情况,还可用来创建订单时将订单加入延时队列中用来自动更改订单为过期状态。使用队列可以异步执行消耗时间的任务,降低请求的响应时间队列文件的位置:app/Jobs创建队列(如创建一个发送邮件的队列文件):php artisan make:job SendEmail注意:队列文件更改后要重启队列才能生效队列重启:php artisan queue:restart监听队列(只有监听状态队列才能正常运行
2021-09-11 23:04:28
1241
原创 Laravel框架之验证器
验证器用来验证传来的参数是否符合规定控制器中使用验证器,例如:public function store(Request $request){ $param = $request->all(); $rules = [ 'name' => 'required|max:50', 'file_id' => 'required|numeric', 'type' => 'required|numer
2021-09-11 16:59:56
539
原创 laravel框架之中间件
中间件文件存放位置:app/Http/Middleware创建中间件文件:php artisan make:middleware 中间件文件名使用中间件前需注册中间件:注册中间件文件位置:app/Http/Kernel.php在 $routeMiddleware 数组中定义中间件名及位置中间件可用做用户访问各功能路由前的验证,如验证登陆状态,用户状态等,合理使用中间件的使用非常重要;比如有一个活动,中间件可用来验证活动时间等(handel为内置函数):接下来是路由中使用中
2021-09-11 16:45:12
585
原创 Laravel框架之异常处理
当Laravel项目运行出错时,为了更好的定位错误位置,需要更改异常处理文件;文件位置:app/Exceptions/Handler.php重写 render() 函数public function render($request, Exception $exception){ if ($exception instanceof ValidationException) { //验证其错误 return response(['code' => -1, '
2021-09-09 23:05:00
678
原创 Laravel框架之自定义命令及定时任务
Laravel自定义命令文件在目录:app/Console/Commads创建自定义命令文件:php artisan make:command Testprotected $signature = ‘test:show’;则此文件的自定义命令为test:show,可接受参数test:show {param},规定参数后参数必传protected $description = ‘此处为命令描述’;handle() 函数为命令执行内容public function h
2021-09-09 22:58:56
855
原创 Laravel框架之常用命令
创建控制器:php artisan make:controller 控制器名(可拼接文件夹如user/UserController)创建模型:php artisan make:model 模型名创建数据库迁移文件:php artisan make:migration 文件名(如create_user_table)执行数据库迁移文件:php artisan migrate (运行所有未执行的迁移)运行单个迁移文件: php artisan migrate --path=/datab..
2021-09-09 22:28:02
214
原创 PHP极光推送使用模板
php借入第三方推送:极光推送流程及使用先下载PHP版本的官方SDK:点击下载创建PHP极光推送类(CI框架为例):<?phpuse JPush\Client as JPush;require_once(APPPATH . 'third_party/JPush/autoload.php');class JGPush { private $app_key; //极光appKey private $master_secret; //极光秘钥 private $
2021-05-31 13:04:37
285
1
转载 mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre的问题
mysql报错如下:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘sss.month_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by问题出现的原因:MySQL 5
2021-05-13 16:03:44
298
1
原创 mysql遇见Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre问题
具体报错如下:Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘sss.month_id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by问题出现的原因:MySQL 5.7.
2021-05-09 23:02:24
643
原创 如何将Redis数据库从一台服务器移动到另一台服务器?
现有两台Linux服务器A,B需求:将A上的Redis数据库迁移至B上的Redis流程如下:A服务器操作:A$ redis-cli127.0.0.1:6379> CONFIG GET dir1) "dir"2) "/var/lib/redis/"127.0.0.1:6379> SAVEOK这确保了dump.rdb完全是最新的,并向我们展示了它的存储位置(/var/lib/redis/dump.rdb(在这种情况下)。dump.rdb也会定期自动写入磁盘。接下来,将其复制到
2021-05-09 21:12:16
2033
1
原创 PHP处理编码问题,编码转UTF-8
function ConvertToUTF8($text){ $encoding = mb_detect_encoding($text, mb_detect_order(), false); if($encoding == "UTF-8") { $text = mb_convert_encoding($text, 'UTF-8', 'UTF-8'); } $out = iconv(mb_detect_encoding($text,
2021-05-07 22:47:36
119
原创 使用lsyncd技术使两台linux服务器上的项目实现同步
下面开始详细讲解配置过程及过程中可能遇到的问题:现有两台linux主机:192.168.1.10 //主机器192.168.1.11 //辅机器以下操作均在主机器上进行:安装apt-get install lsyncdapt install rsync查看安装版本lsyncd -version创建必要文件夹mkdir /etc/lsyncdmkdir /var/log/lsyncdtouch /var/log/lsyncd/lsyncd.{log,status}配置免
2021-04-20 14:14:31
398
1
原创 PHP截取字符串特定字符前后内容
获取指定字符串前的内容$AAA = '123_45678';$result = substr($AAA,0,strrpos($AAA,"_"));echo $result;//输出123获取指定字符串后的内容$AAA = '123_45678';$result = substr($AAA,strripos($AAA,"_")+1);echo $result;//输出45678
2021-03-22 14:53:37
1261
原创 sql like问题,搜索内容不带空格,数据库数据带空格
有如下数据表:idname1张三 李四2aa bb cc需求:当搜索aabb时查询出数据库name字段去空格后包含aabb的行实现:SELECT * from tabel_name where REPLACE(name,' ','') LIKE '%aabb%'
2021-03-18 13:10:43
1536
原创 PHP RSA加密
例如在对接支付的业务中,我们的参数有时需要进行RSA加密,以下是php进行RSA加密的方法:private function _rsa_encryption($paramStr){ $pri_key = openssl_pkey_get_private($this->secret); openssl_private_encrypt($paramStr, $encryptData, $pri_key); openssl_free_key($pri_key); re
2021-01-30 11:53:24
326
原创 PHP正则判断字符串必须是数字和英文的组合
在设置密码的场景中,我们要对用户输入的密码做限制,以下是具体的限制内容和写法:1.长度不能小于8位2.必须是英文和数字的组合$pwd = $_POST['pwd'];if (strlen($pwd) < 8){ return '密码长度不能小于八位';}//全数字情况if(preg_match("/^\d*$/",$pwd)){ return '密码必须包含字母';}//全英文情况if(preg_match("/^[a-z]*$/i",$pwd)){
2020-12-26 11:54:40
2088
原创 PHP foreach实用写法
在过去使用foreach的写法中,通常是 foreach($data as $key => $val)来获取二维数组中一维数组的信息。下面的使用方法在很多场景中很实用:$data = [ ['996','icu'], ['a','b'], ['c','d'] ];//$p1 对应一维数组的第一个元素,$p2 对应一维数组的第二个元素foreach ($data as $key => [$p1,$p2]) { print_r($p1);}//运行结果:99
2020-12-11 16:39:00
362
原创 php 二维数组以某个元素值排序
现有二维数组:$array = array( array( 'id' => 1, 'total' => 12 ), array( 'id' => 2, 'total' => 13 ), array(
2020-11-26 10:29:49
312
原创 MySQL使用left join 无法统计数量为0的问题解决
现有两张数据表:表1:agent_table(代理表)ag_idag_name1张三2李四3欢仔表2:user_table(用户表)u_idu_nameu_ag_id1用户122用户223用户334用户43需求为查询每个代理下的用户数量;当我们使用连表查询'select ag.ag_name,count(u_id) as total fromagent_table ag left join
2020-11-18 15:25:50
2122
原创 MySQL数据库按时间分表的查询方法
分表规则:按月分表,每个月一张表,表的字段和类型都相同。 如 test_table_202011查询方法:$start_date = strtotime('2020-01-01 00:00:00'); //开始时间戳$end_date = strtotime('2020-07-01 23:59:59'); //截至时间戳$month_begin = date('Ym', $start_date); //开始年月$month_end = date('Ym', $end_date);
2020-11-16 15:15:04
5422
原创 PHP面试题汇总及相应解析
1. redis和memcached的区别和使用场景https://blog.youkuaiyun.com/u010398838/article/details/79995636区别1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;2、Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储;3、虚拟内存–Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘;4、过
2020-08-19 16:09:35
254
原创 线上支付支付宝个人支付接入流程详解
一直以为想做线上支付必须要有营业执照,害得我和很多个人开发者一样,绕了很多圈子。尝试过一些第三方的接入(不稳定,担心跑路)。原来支付宝是有个人支付接口的,利用支付宝的“当面付”接口就可实现个人版的线上支付,实时直接进入个人账户。我需要在网站上实现一个打赏功能,首先需要在 支付宝开发者中心 申请一个网页&移动应用,如图然后需要在能力列表添加“当面付”功能,签约的时候营业执照没有红色*...
2020-04-26 14:21:53
3863
原创 图片延迟加载3种实现方式
定义:延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前,视口外的图像不会加载。这与图像预加载相反,在长网页上使用延迟加载将使网页加载更快。在某些情况下,它还可以帮助减少服务器负载。举个例子来说明,当打开淘宝首页的时候,只有在浏览器窗口里的图片才会被加载,当你滚动首页向下滑的时候,进入视口内的图片才会被加载,而其它从未进入视口的图像不会也不会加载。那么延迟加载有什么好处:首...
2019-07-31 16:05:03
458
原创 php 实现图片质量压缩
php实现图片压缩,可以设置只压缩质量,不改变宽高,也可以设置改变宽高,压缩比是自定义的 /** * 调用部分 * $url:图片路径 $dst_img:图片保存路径及保存的文件名 $quality:图片的质量 为数字 越小图片的大小就越小 */ $url = '图片路径'; $dst_img = '图片保存路径 如:./img/test...
2019-07-26 18:35:11
1141
原创 PHP cURL使用多线程爬取网页内容
把要爬取的网页的url放到一个数组里,本文以爬取豆瓣租房信息为例,在豆瓣搜索租房查看网页布局后再参考代码更好,具体代码如下:$j = -25;for ($i = 0; $i < ‘要爬取前几页的页数’; $i++) { $get_start = $j = $j +25; $urls[$i] = "https://www.douban.com/group/".‘城市分组名’...
2019-07-22 09:10:49
360
原创 PHP cURL使用代理IP爬取页面
话不多说直接上完整代码:$curl = curl_init();$user_agent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";$url = "https://www.douban.com/"; //访问豆...
2019-07-19 15:28:23
703
1
原创 Git的简单操作
前提条件是本地已下载安装配置好git;本文只操作master分支。1. 初始化本地仓库在一个已有并准备作为仓库的文件夹下打开Git Bash Here使用命令:git init来初始化仓库,执行完成后会在文件夹中创建.git文件夹,表示已初始化成功。2. 克隆线上仓库的文件到本地仓库使用命令:git clone < url >把线上文件拉到本地文件夹中。3. 提交文件到线...
2019-07-06 12:02:33
98
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人