PHP
文章平均质量分 55
PHP实战开发
李维山
后端架构师
展开
-
Laravel(Lumen) 导出表格文件响应跨域问题
而遇到导出表格文件流,这种文件响应,需要这么设置,设置的是。普通响应跨域,在中间件里是这么设置,设置的是。原创 2024-06-26 16:25:01 · 290 阅读 · 0 评论 -
Laravel(Lumen8) + Supervisor 实现多进程redis消息队列
etc/supervisor.d/common-job.ini:(mac brew安装的在/opt/homebrew/etc下)原创 2024-05-23 18:23:35 · 352 阅读 · 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 · 322 阅读 · 0 评论 -
【PHP】安装指定版本Composer
【代码】【PHP】安装指定版本Composer。原创 2024-05-01 21:39:42 · 1032 阅读 · 1 评论 -
【PHP设计模式08】装饰模式
装饰模式,又称装饰器模式 或 装饰者模式 或 油漆工模式,通过创建一个“装饰对象”,在不改变原有类和使用继承的情况下,动态地扩展一个对象的功能,比直接生成子类继承更加灵活,可以通过多个不同的具体装饰类,创建多个不同的行为组合。以上就是装饰模式的基本形式,在实际开发中,往往需要对现有产品扩展新的功能,在不改变原有代码的情况下进行动态扩展,这种情况就可以使用装饰模式来实现。原创 2024-02-27 00:54:01 · 329 阅读 · 0 评论 -
【PHP设计模式07】桥接模式(桥梁模式)
桥接模式,又称桥梁模式,或是柄体模式或接口模式。可将抽象部分与它的具体实现部分分离,使它们都可以独立地变化组合。桥接模式的主要目的是通过组合的方式建立两个类之间的联系,而不是继承,是比多重继承更好的替代方案,核心在于用组合/聚合的方式共享一些能用的方法,解耦抽象和实现。原创 2024-02-26 18:44:57 · 162 阅读 · 0 评论 -
【PHP设计模式06】适配器模式(变压器模式)
【适配器模式】适配器模式,也叫做变压器模式 或者 包装器模式,将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作,也可以理解为某种协议,使两个不同的类之间可以通过协议合作来达到某种目的。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。原创 2024-02-25 20:57:00 · 249 阅读 · 2 评论 -
【PHP设计模式00】23种设计模式实战
所谓设计模式,就是特定环境下同类问题的一种解决方案,与语言无关,随着各种各样问题的出现,编程界前辈们已经总结出一些具有共性的问题,及与其对应的解决方案。选择正确的设计模式,使得开发过程更高效、便捷,代码的可重用性、灵活性更高。最近写一些关于PHP设计模式的文章,对常用设计模式进行总结,其中参考了关于设计模式的书籍、前辈的博客,以及自己的实际工作经验与体会。才疏学浅,如有疏漏,敬请交流。................更新中................原创 2024-02-25 15:43:00 · 281 阅读 · 0 评论 -
【PHP设计模式05】建造者模式(生成器模式)
建造者模式,可以强制实行一种分步骤进行的建造过程,将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象,客户不必知道产品内部组成的细节。由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另一个乘坐建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。它将产品的结构和建造过程对客户端隐藏起来。原创 2024-02-25 00:54:04 · 307 阅读 · 0 评论 -
【PHP设计模式03】抽象工厂模式
前面讲的工厂方法模式,每增加一个产品都需要增加对应的工厂,这样就会存在很多工厂,但是在现实生活中的有些时候,人们并不关心产品是由哪个工厂制造的,就像一个服装厂既可以生产男装,也可以生产女装,我们只需造一个服装厂同时生产一个。抽象工厂模式,则为一个产品族提供了统一的创建接口,当需要这个产品族的一系列相关对象时,就可以为此系列的产品族创建一个具体的工厂类来实现该接口。示例:下面以一个服装厂生成衣服为例,服装厂有两个分厂,分别负责生产男装和女装,每增加一个产品都需要增加对应的工厂。原创 2024-02-23 14:57:00 · 337 阅读 · 0 评论 -
PHP安全之道学习笔记
不仅在php项目中,在所有网络应用的开发过程中,都会面临着各种各样的安全问题,有些可能是应用软件自身所暴露的安全隐患,也有些是开发人员自身编程原因导致的程序漏洞,这些无疑会对应用的安全性和稳定性造成不良的影响,作为开发人员,应该具备一定的安全防范知识,在开发过程中不断完善安全机制,加固应用程序的运行环境。下面为php开发中的一些安全防范手段,开发语言不尽相同,但有一些思想同样适用。1、屏蔽PHP错误信息在php.ini中设置:; display_errors; Default V原创 2022-04-18 20:44:40 · 4812 阅读 · 0 评论 -
Docker下如何使用php的composer
1、进入php容器docker exec -it cb6c1fe83bff(php容器ID) bash2、安装composercurl -sS https://getcomposer.org/installer | phpmv composer.phar /usr/local/bin/composer#换阿里云源(可选)composer config -g repo.packagist composer https://mirrors.aliyun.com/composerex原创 2021-08-18 16:58:32 · 1806 阅读 · 0 评论 -
【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 · 1401 阅读 · 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 · 682 阅读 · 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 · 675 阅读 · 0 评论 -
【Docker实战】Docker基础命令示例与详解
相关文章:CentOS7环境下使用Docker搭建PHP运行环境查找镜像:docker searchdocker search nginx拉取镜像:docker pulldocker pull nginx:1.18.0查看全部镜像:docker imagesdocker images #输出参数说明REPOSITORY:镜像的仓库源TAG:镜像的标签IMAGE ID:镜像IDCREATED:镜像创建时间SIZE:镜像大小删除镜像:docker rmidocke.原创 2021-08-04 11:35:14 · 196 阅读 · 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 · 583 阅读 · 2 评论 -
MacOS M1使用Homebrew搭建PHP运行环境
相关文章:MacOS M1安装Homebrew1、安装Nginx#安装brew install nginx#开启sudo nginx 此时浏览器访问http://localhost:8080/如下,Nginx安装成功: Nginx的默认配置文件在/opt/homebrew/etc/nginx/nginx.conf,把默认端口改为80,如下:#user nobody;worker_processes auto;error...原创 2021-07-25 22:42:45 · 1277 阅读 · 4 评论 -
教你用PHP爬取王者荣耀英雄皮肤高清壁纸(附源码)
午饭后看到一篇文章关于“用Python爬取王者荣耀官网的英雄皮肤图片”,于是顺手用PHP也写了一个,在这里给大家分享一下,贴出源码://下载王者荣耀皮肤图片public function heroSkinDownload(){ $heroApi = 'https://pvp.qq.com/web201605/js/herolist.json'; $heroArr = json_decode(Curl::get($heroApi),true); foreach ($...原创 2021-07-15 13:06:24 · 674 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(十五)微服务
一、什么是微服务 微服务就是将一个复杂的项目进行模块化服务拆分,是一种架构性上的概念,与框架和语言无关。每一个服务可以独立开发部署,服务间可以使用通信协议互相调用,可以方便地对服务进行扩展和重构。 微服务的主要意义在于:流量分压、模块高度自治、服务隔离保护。二、RPC ...原创 2021-07-16 18:56:35 · 1042 阅读 · 3 评论 -
Hyperf 高性能PHP协程框架实战(十四)RabbitMQ
1原创 2021-07-08 18:06:47 · 911 阅读 · 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 · 999 阅读 · 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 · 2021 阅读 · 6 评论 -
Hyperf 高性能PHP协程框架实战(十一)数据库使用
.原创 2021-07-05 14:20:10 · 1050 阅读 · 2 评论 -
Hyperf 高性能PHP协程框架实战(十)AOP 面向切面编程
概念AOP 为Aspect Oriented Programming的缩写,意为:面向切面编程,通过动态代理等技术实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,也是 Hyperf 中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。用通俗的话来讲,就是在 Hyperf 里可以通过切面(Aspect)介入到任意类的任意方法的执行流程中去,从而改变或加强原方...原创 2021-06-29 16:32:16 · 1222 阅读 · 3 评论 -
Hyperf 高性能PHP协程框架实战(九)事件机制
概念AOP 为Aspect Oriented Programming的缩写,意为:面向切面编程,通过动态代理等技术实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,也是 Hyperf 中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。用通俗的话来讲,就是在 Hyperf 里可以通过切面(Aspect)介入到任意类的任意方法的执行流程中去,从而改变或加强原方...原创 2021-06-29 11:42:20 · 356 阅读 · 1 评论 -
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 · 1117 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(八) 协程
1原创 2021-05-25 18:57:59 · 665 阅读 · 2 评论 -
PHP解决买小鸡算法问题
问题:一百文买一百只鸡,公鸡5文一只,母鸡3文一只,小鸡1文3只,问有公鸡、母鸡、小鸡各多少只(在每一种都必须有的情况下)?代码:public function buyChick() { $totalFee = 100; //总金额 $totalNum = 100; //总只数 $aFee = 5; //公鸡单价 $bFee = 3; //母鸡单价 $cFee = 1/3; //小鸡单价 $maxA = floor(($totalFee - $bFe原创 2021-04-27 15:32:06 · 311 阅读 · 0 评论 -
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 · 246 阅读 · 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 · 684 阅读 · 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 · 348 阅读 · 2 评论 -
linux tar打包大文件并分割传输另一台linux服务器
场景将linux服务器A中的数据文件迁移到linux服务器B,当文件很大的之后,压缩直接传输会出现传输很久,且中间一段暂停,又得重新上传。这时候需要可以将压缩的文件的分割传输然后解压合并。linux服务器A文件压缩tar -czvp -f A.tar.gz A压缩包A分割多个文件包split -b 4000k A.tar.gz B.tar.gz按4000k大小分割A.tar.gz 生成B.tar.gzaxxx这时候,当前目录会生成B.tar.gzaa B.tar.gzab转载 2021-04-09 14:20:11 · 768 阅读 · 0 评论 -
【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 · 880 阅读 · 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 · 820 阅读 · 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 · 1819 阅读 · 8 评论 -
PHP获取远程图片宽、高
使用函数 getimagesize:<?php $remote_png_url = 'http://xxx.png'; $img_data = getimagesize($remote_png_url); print_r($img_data);打印结果如下:Array( [0] => 290 [1] => 69 [2] => 3 [3] => width="290" height="69" [b原创 2021-02-20 17:59:02 · 481 阅读 · 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 · 1201 阅读 · 5 评论 -
Hyperf 高性能PHP协程框架实战(四) 中间件的使用
场景:开发中可能会遇到跨域问题,我们希望每一个请求过来,服务端程序都可以设置允许跨域,这时就可以用到中间件,来拦截请求并做出一些配置。1、生成一个中间件 示例:使用命令生成一个设置跨域的中间件 CorsMiddlewarephp ./bin/hyperf.php gen:middleware Http/CorsMiddleware 此时会自动生成中间件文件: 修改代码,实现设置跨域功能:<?phpdeclare(...原创 2021-01-23 11:49:52 · 464 阅读 · 0 评论 -
Hyperf 高性能PHP协程框架实战(三) 依赖自动注入
目录1、构造函数注入2、@Inject 注解注入 场景:如下有一个用户服务类UserService,类中存在getInfoById()方法,传递用户id获取用户信息。现在要再IndexController中调用该方法。可以使用以下自动注入依赖的方式,避免用new手动实例化。<?phpdeclare(strict_types=1);namespace App\Service;class UserService{ public function getIn...原创 2021-01-23 04:45:06 · 457 阅读 · 0 评论