![](https://img-blog.csdnimg.cn/20210114222726978.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
PHP进阶技术实战
文章平均质量分 63
PHP从未没落,掌握进阶核心技术,才能发挥自身的强大。
优惠券已抵扣
余额抵扣
还需支付
¥69.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
李维山
后端架构师
展开
-
Laravel(Lumen8) + Supervisor 实现多进程redis消息队列
etc/supervisor.d/common-job.ini:(mac brew安装的在/opt/homebrew/etc下)原创 2024-05-23 18:23:35 · 316 阅读 · 0 评论 -
MacOS使用PhpStorm+Xdebug断点调式
MacOS m1 PhpStorm 2024.1 PHP7.4.33 Xdebug v3.1.6 2、phpstrorm设置(这里的域名是在hosts中配置的站点:127.0.0.1 publish.test )原创 2024-05-20 19:05:44 · 278 阅读 · 0 评论 -
【PHP设计模式08】装饰模式
装饰模式,又称装饰器模式 或 装饰者模式 或 油漆工模式,通过创建一个“装饰对象”,在不改变原有类和使用继承的情况下,动态地扩展一个对象的功能,比直接生成子类继承更加灵活,可以通过多个不同的具体装饰类,创建多个不同的行为组合。以上就是装饰模式的基本形式,在实际开发中,往往需要对现有产品扩展新的功能,在不改变原有代码的情况下进行动态扩展,这种情况就可以使用装饰模式来实现。原创 2024-02-27 00:54:01 · 318 阅读 · 0 评论 -
【PHP设计模式07】桥接模式(桥梁模式)
桥接模式,又称桥梁模式,或是柄体模式或接口模式。可将抽象部分与它的具体实现部分分离,使它们都可以独立地变化组合。桥接模式的主要目的是通过组合的方式建立两个类之间的联系,而不是继承,是比多重继承更好的替代方案,核心在于用组合/聚合的方式共享一些能用的方法,解耦抽象和实现。原创 2024-02-26 18:44:57 · 141 阅读 · 0 评论 -
【PHP设计模式06】适配器模式(变压器模式)
【适配器模式】适配器模式,也叫做变压器模式 或者 包装器模式,将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,也可以理解为某种协议,使两个不同的类之间可以通过协议合作来达到某种目的。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。原创 2024-02-25 20:57:00 · 237 阅读 · 2 评论 -
【PHP设计模式00】23种设计模式实战
所谓设计模式,就是特定环境下同类问题的一种解决方案,与语言无关,随着各种各样问题的出现,编程界前辈们已经总结出一些具有共性的问题,及与其对应的解决方案。选择正确的设计模式,使得开发过程更高效、便捷,代码的可重用性、灵活性更高。最近写一些关于PHP设计模式的文章,对常用设计模式进行总结,其中参考了关于设计模式的书籍、前辈的博客,以及自己的实际工作经验与体会。才疏学浅,如有疏漏,敬请交流。................更新中................原创 2024-02-25 15:43:00 · 271 阅读 · 0 评论 -
【PHP设计模式05】建造者模式(生成器模式)
建造者模式,可以强制实行一种分步骤进行的建造过程,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象,客户不必知道产品内部组成的细节。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另一个乘坐建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。它将产品的结构和建造过程对客户端隐藏起来。原创 2024-02-25 00:54:04 · 294 阅读 · 0 评论 -
【PHP设计模式02】工厂方法模式
【工厂方法模式】 工厂方法模式,简称工厂模式。说到工厂,我们可以联想到一个服装厂可以生产出各式各样的衣服,随着市场的需要,也会生产出新的款式的衣服,但是我们并不能预测新款是什么样子,设计师设计出来交给工厂安排到对应生产线上生产就完了。 在编程中与之相似的是,有时候我们在创建对象的过程中,并不能确定类一定创建(实例化)出哪一种类型的对象,我们更希望根据不同参数得到不同的类...原创 2020-08-24 14:35:21 · 247 阅读 · 2 评论 -
【PHP设计模式01】单例模式
【写在前面】 最近写一些关于PHP设计模式的文章,对常用设计模式进行总结,其中参考了关于设计模式的书籍、前辈的博客,以及自己的实际工作经验与体会。才疏学浅,如有疏漏,敬请交流。 所谓设计模式,就是特定环境下同类问题的一种解决方案,与语言无关,随着各种各样问题的出现,编程界前辈们已经总结出一些具有共性的问题,及与其对应的解决方案。选择正确的设计模式,使得开发过程更高...原创 2019-12-09 23:44:25 · 166 阅读 · 1 评论 -
【PHP设计模式03】抽象工厂模式
前面讲的工厂方法模式,每增加一个产品都需要增加对应的工厂,这样就会存在很多工厂,但是在现实生活中的有些时候,人们并不关心产品是由哪个工厂制造的,就像一个服装厂既可以生产男装,也可以生产女装,我们只需造一个服装厂同时生产一个。抽象工厂模式,则为一个产品族提供了统一的创建接口,当需要这个产品族的一系列相关对象时,就可以为此系列的产品族创建一个具体的工厂类来实现该接口。示例:下面以一个服装厂生成衣服为例,服装厂有两个分厂,分别负责生产男装和女装,每增加一个产品都需要增加对应的工厂。原创 2024-02-23 14:57:00 · 331 阅读 · 0 评论 -
【面试宝典】如何对MySQL进行优化?
一、数据库设计所有字段都设置默认值。 尽可能使用较小的整数类型。 尽可能定义字段为NOT NULL,除非该字段需要NULL。 尽可能使用固定大小的记录格式,如CHAR,除非变长字段用VARCHAR。二、数据库使用尽量使用长连接。 使用 EXPLAIN 查看复杂SQL执行方式,进行优化。 使用 LIMIT 语句尽量要跟 ORDER BY 或 DISTINCT 配合,避免一次FULL TABLE SCAN。 使用 TRUNCATE 清空表记录,而不是DELETE。 使用 UNSIGNED原创 2024-01-12 13:06:08 · 317 阅读 · 2 评论 -
【MySQL实战07】数据备份
MySQL数据库备份形式分为物理备份和逻辑备份。原创 2023-02-23 17:30:39 · 397 阅读 · 2 评论 -
【MySQL实战08】误删数据恢复
恢复数据前提条件:在MySQL配置文件my.cnf查看binlog是否开启:show variables like 'log_%';查看binlog保存位置:show variables like '%datadir%';查看当前正在使用的binlog:show master status;。原创 2023-02-24 15:47:49 · 472 阅读 · 0 评论 -
【MySQL实战06】MySQL配置半同步主从复制、读写分离(TP6)
MySQL复制默认是异步复制,Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master Sever就自动返回数据给客户端,但并不知道Slave是否或何时已经接收且已处理,因此存在一定的概率备库与主库的数据是不对等的。在异步复制的机制的情况下,如果Master宕机,事务在Master上已提交,但很可能这些事务没有传到任何的Slave上。假设有Master->Salve故障转移的机制,此时Slave也可能会丢失事务。原创 2023-02-21 14:45:31 · 591 阅读 · 2 评论 -
PHP安全之道学习笔记
不仅在php项目中,在所有网络应用的开发过程中,都会面临着各种各样的安全问题,有些可能是应用软件自身所暴露的安全隐患,也有些是开发人员自身编程原因导致的程序漏洞,这些无疑会对应用的安全性和稳定性造成不良的影响,作为开发人员,应该具备一定的安全防范知识,在开发过程中不断完善安全机制,加固应用程序的运行环境。下面为php开发中的一些安全防范手段,开发语言不尽相同,但有一些思想同样适用。1、屏蔽PHP错误信息在php.ini中设置:; display_errors; Default V原创 2022-04-18 20:44:40 · 4806 阅读 · 0 评论 -
SSH本地连接远程MySQL数据库
场景: 现有一台MySQL-rds服务,地址:lws.rds.com:3306,用户名:lws,密码:123456,数据库:user。 现要在本地连接该服务,对数据进行处理,然而本地ip无法访问远程数据库。 已知有一台服务器A可以连接该数据库服务,ip:8.123.456.7,用户名:root,密码:654321,如何通过这台服务器的ssh隧道连接远程数据库服务。实现: 使用ssh命令将远程数据库服务端口 通过ssh隧道 绑定到本地任意空闲端口,如...原创 2021-11-03 15:17:38 · 1194 阅读 · 1 评论 -
【Docker】Docker下安装PHP扩展
1、进入php容器docker exec -it 5849efd915e3(容器ID) /bin/bash2、初始化php核心扩展docker-php-source extract#移动到目录cd /usr/src/php/ext/ 此时可见php核心扩展库如下:3、启用扩展 示例:安装并启用 bcmath扩展docker-php-ext-install bcmath 此时 php -m 查看扩展安装成功:4、安装pe...原创 2022-02-18 11:10:13 · 1381 阅读 · 0 评论 -
【Docker实战】Docker下安装宝塔并制作LNMP镜像
1、Docker安装CentOS7docker pull centos:72、运行CentOS镜像docker run -itd --name baota -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 3306:3306 -p 8888:8888 --privileged=true -v /home/www:/www/wwwroot centos:7 /usr/sbin/init#注意:-v参数为将本地目录映射到宝塔应用目录下,以保证数据持久原创 2021-08-05 18:48:28 · 670 阅读 · 0 评论 -
【Docker实战】使用Docker Compose构建PHP开发环境
Dokcer Compose 是可以 定义和运行 多容器Docker应用程序 的工具。 我们可以通过 docker-compose up 命令读取yml 配置文件,即可快速创建并启动配置文件中的所有应用程序。1、安装Dokcer Compose github地址:https://github.com/docker/compose/releasessudo curl -L "https://github.com/docker/compose/releases...原创 2021-08-09 11:59:17 · 664 阅读 · 0 评论 -
【Docker实战】CentOS7环境下使用Docker搭建PHP运行环境
相关文章:CentOS7下使用yum安装DockerWin10环境下使用Docker搭建PHP运行环境1、创建私有网络docker network create lnmp 私有网络创建成功:2、安装Nginx 镜像地址:https://hub.docker.com/_/nginx?tab=tags 可以安装最新版Nginx,这里通过搜索标签,拉取Nginx1.18.0 镜像:docker pull nginx:1.18.0...原创 2021-08-02 22:29:53 · 574 阅读 · 2 评论 -
【Docker实战】使用Docker Dockerfile定制Docker镜像
目录1、创建Dockerfile文件2、Dockerfile 常见命令示例3、构建镜像 Dockerfile 是一个用来构建Docker镜像(组合镜像)的文本文件,文本内容包含构建镜像所需的全部命令。使用 doker build命令从Dockerfile文件中读取命令,自动完成镜像构建。1、创建Dockerfile文件#移动到docker目录cd /root/docker/#创建Dockerfile文件夹mkdir Dockerfile#移动目录cd Do...原创 2021-08-04 16:31:25 · 272 阅读 · 0 评论 -
Linux系统下安装Consul服务注册中心组件
1、下载Consul组件,官网地址:https://www.consul.io/downloads.html (下载可以使用uname -a 命令查看服务器系统架构,aarch64为ARM架构。)2、上传到服务器任意目录下,解压、移动:cd /usr/local/src#解压unzip consul_1.10.1_linux_amd64.zip#移动mv consul /usr/bin3、使用consul version 命令检查是否安装成功,如下:4...原创 2021-07-16 17:34:43 · 395 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(十五)微服务
一、什么是微服务 微服务就是将一个复杂的项目进行模块化服务拆分,是一种架构性上的概念,与框架和语言无关。每一个服务可以独立开发部署,服务间可以使用通信协议互相调用,可以方便地对服务进行扩展和重构。 微服务的主要意义在于:流量分压、模块高度自治、服务隔离保护。二、RPC ...原创 2021-07-16 18:56:35 · 1032 阅读 · 3 评论 -
Linux下搭建RabbitMQ服务
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。 系统环境:Linux CentOS 7.6 Erlang:24.0 RabbitMQ:3.8.191、安装Erlang 下载地址:https://www.erlang.org/downlo...原创 2021-07-06 17:12:50 · 255 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(十四)RabbitMQ
1原创 2021-07-08 18:06:47 · 888 阅读 · 2 评论 -
Hyperf 高性能PHP协程框架实战(十三)Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒数百万的消息。 支持通过Kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 Kafka搭建参考文章:Linux下搭建Kafka服务 Composer安装Kafka组件:https://packagist.org/packag...原创 2021-07-05 17:57:03 · 982 阅读 · 1 评论 -
Hyperf 高性能PHP协程框架实战(十二)Redis异步队列
一、Redis异步队列 Composer安装:composer require hyperf/async-queue 配置文件config/autoload/async_queue.php :<?phpdeclare(strict_types=1);return [ 'default' => [ 'driver' => Hyperf\AsyncQueue\Driver\RedisDriver::class, ...原创 2021-07-05 16:23:03 · 2003 阅读 · 6 评论 -
Hyperf 高性能PHP协程框架实战(十一)数据库使用
.原创 2021-07-05 14:20:10 · 1039 阅读 · 2 评论 -
Hyperf 高性能PHP协程框架实战(十)AOP 面向切面编程
概念AOP 为Aspect Oriented Programming的缩写,意为:面向切面编程,通过动态代理等技术实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,也是 Hyperf 中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。用通俗的话来讲,就是在 Hyperf 里可以通过切面(Aspect)介入到任意类的任意方法的执行流程中去,从而改变或加强原方...原创 2021-06-29 16:32:16 · 1192 阅读 · 3 评论 -
Hyperf 高性能PHP协程框架实战(九)事件机制
概念AOP 为Aspect Oriented Programming的缩写,意为:面向切面编程,通过动态代理等技术实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,也是 Hyperf 中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。用通俗的话来讲,就是在 Hyperf 里可以通过切面(Aspect)介入到任意类的任意方法的执行流程中去,从而改变或加强原方...原创 2021-06-29 11:42:20 · 342 阅读 · 1 评论 -
Hyperf 高性能PHP协程框架实战(八) 协程
1原创 2021-05-25 18:57:59 · 650 阅读 · 2 评论 -
ThinkPHP5.0验证器的使用
【创建验证器】 示例:新建 /application/index/validate 目录,用于存放验证器类,新建验证器DemoValidate.php,代码如下:<?phpnamespace app\index\validate;use think\Validate;class DemoValidate extends Validate{ //定义验证规则 protected $rule = [ 'name' => 'requi...原创 2021-04-23 17:26:27 · 239 阅读 · 0 评论 -
ThinkPHP5.0中trait代码复用的使用
自PHP5.4起,PHP实现了一种代码复用的方法,称为 trait。trait为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。trait和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。 ThinkPHP5.0开始采用trait功能来作为一种扩展机制,可以方便的实现一个类库的多继承问题。【使用示例】 在tp5项目中,/thinkphp/library/traits/cont...原创 2021-04-22 16:56:29 · 675 阅读 · 2 评论 -
PHP集成JWT用户身份token验证
1、引入jwt包:composer require firebase/php-jwt2、封装jwt工具类如下:<?phpnamespace app\index\service;use Firebase\JWT\JWT;class JwtService { const jwtKey = "Km4WkO4ofp4HFNb0"; //自定义jwt签发密钥 //生成token public static function create($uid = 666) {原创 2021-04-09 17:00:02 · 343 阅读 · 2 评论 -
【Docker实战】Win10环境下使用Docker搭建PHP运行环境
【创建目录】D:\wnmp\mysql-confD:\wnmp\mysql-logD:\wnmp\nginx-confD:\wnmp\nginx-logD:\wnmp\php71-confD:\wnmp\php71-logD:\wnmp\www\index.php【安装Mysql】安装:docker pull mysql:5.7.33运行容器:docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql原创 2021-04-07 17:24:20 · 854 阅读 · 0 评论 -
PHP框架中env配置文件的实现原理
以Tp5框架为例 入口文件 index.php 中加载了框架引导文件 /thinkphp/start.php start.php中加载了框架基础文件/thinkphp/base.php base.php中加载环境变量配置文件的代码如下:// 加载环境变量配置文件if (is_file(ROOT_PATH . '.env')) { $env = parse_ini_file(ROOT_PATH . '.env', true); f...原创 2021-04-02 10:18:33 · 808 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(七) WebSocket 服务
安装WebSocket服务:composer require hyperf/websocket-server 在配置文件 config/autoload/server.php 文件中,servers下添加WebSocket服务配置ws,如下:'servers' => [ [ 'name' => 'http', 'type' => Server::SERVER_HTTP, ...原创 2021-03-02 14:10:30 · 1797 阅读 · 8 评论 -
Hyperf 高性能PHP协程框架实战(六) 日志输出
安装日志组件:composer require hyperf/logger 日志配置文件位置:config/autoload/logger.php,默认配置如下:<?phpdeclare(strict_types=1);return [ 'default' => [ 'handler' => [ 'class' => Monolog\Handler\StreamHandler::class,...原创 2021-03-01 17:27:30 · 1103 阅读 · 0 评论 -
第三方登录后端校验用户真实性(包含微信、QQ、微博)
移动端第三方登录,往往最后会传递unionid给后端,作为第三方用户的唯一标识,但后端不能轻易相信前端传过来的就是真实的第三方用户,所以需要对第三方用户的真实性进行校验,需要第三方登录的access_token,其中微信多一个openid。 相关官方文档:微信、QQ、微博 封装方法如下:(php语言tp5框架 需要继承Curl工具类 返回值为第三方用户唯一...原创 2020-03-08 23:33:05 · 1383 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(五) 请求与响应
1、获取请求参数 通过use Hyperf\HttpServer\Contract\RequestInterface;获得对应的请求对象RequestInterface $request 如下为获取一些请求参数的示例:<?phpdeclare(strict_types=1);namespace App\Controller;use Hyperf\HttpServer\Contract\RequestInterface;use Hyperf\H...原创 2021-01-23 16:20:27 · 1192 阅读 · 5 评论