韩淼燃
最近在更新运维专栏。欢迎大家来点赞,关注。
展开
-
删除多余文件
<?phpfunction my_dir($dir) { $files = []; if(@$handle = opendir($dir)) { while(($file = readdir($handle)) !== false) { if($file != ".." && $file != ".") { .原创 2020-06-28 20:17:24 · 226 阅读 · 0 评论 -
PHP-FPM和Nginx的通信机制
PHP-FPM 介绍CGI 协议与 FastCGI 协议每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。由于 CGI 的机制是每处理一个请求需要 fork 一个 CGI 进...原创 2020-04-08 10:59:44 · 302 阅读 · 0 评论 -
用好Git 和 SVN ,轻松驾驭版本管理
一、Git vs SVNGit 和 SVN 孰优孰好,每个人有不同的体验。Git是分布式的,SVN是集中式的这是 Git 和 SVN 最大的区别。若能掌握这个概念,两者区别基本搞懂大半。因为 Git 是分布式的,所以 Git 支持离线工作,在本地可以进行很多操作,包括接下来将要重磅推出的分支功能。而 SVN 必须联网才能正常工作。Git复杂概念多,SVN简单易上手所有同时掌握 G...原创 2020-04-08 10:41:52 · 319 阅读 · 0 评论 -
PHP与RBAC设计思路,数据表设计与源码讲解
权限系统模块对于互联网产品是一个非常重要的功能,可以控制不同的角色合理的访问不同的资源从而达到安全访问的作用权限控制有哪些模型ACL RBAC 基于角色的访问控制从上图我们可以看出,ACL是用户和权限直接关系的,而RBAC则是通过角色间接关联用户和权限的。所以我们注意到角色是RBAC系统的一个重要属性。什么是RBAC模型RBAC(Role-Based Access C...原创 2020-04-08 10:29:28 · 366 阅读 · 0 评论 -
用php脚本,你如何定时更新商品列表
电商项目中为了提高抗并发能力,需要对商品列表做缓存,以下是更新缓存用的脚本://PRODUCTION_为缓存商品列表的临时key//PRODUCTION为缓存商品列表key$con = mysqli_connect($db_config['host'],$db_config['user'],$db_config['passwd'],$db_config['database']);$re...原创 2020-04-08 10:11:44 · 271 阅读 · 0 评论 -
php问题……php截取字符串几个实用的函数
1.substr(源字符串,其实位置[,长度])-截取字符串返回部分字符串<?php$str ="phpddt.com";echo substr($str,2);//pddt.comecho substr($str,2,3);//pddecho substr($str,-2);//om 负数从结尾开始取?>但是当你截取中文字符串的时候很容易出现乱码,因为一个汉字是...原创 2020-04-08 09:20:29 · 234 阅读 · 0 评论 -
php问题……PHP设计模式
单例模式理解:使某个类的对象只被创建一次。 单例模式的最大好处就是减少资源的浪费,保证整个环境中只存在一个实例化的对象,特别适合资源连接类的编写。 单例模式的意思就是只创建一个资源(对象,数据库链接等),说白了,本质就是防止外部实例化类+判断是否存在来返回或创建后返回对象。// 单例模式(口诀:三私一公)class Singleton{ //私有化构造方法,禁止外部实例化对象 ...原创 2020-04-07 11:23:48 · 228 阅读 · 0 评论 -
php队列的实现思路和详细过程
一:队列场景当我们使用某讯或者某浪的邮箱时,点击群发邮件之后,只需等待很短的时间,浏览器 提示提交成功,正在发送之类的信息时,用户就可以关掉浏览器,稍后,收件地址栏里的邮箱将陆续收到该群发邮件,再比如群发定时邮件,以及当商城系统中有客 户下单,客户,客服,仓库等相关人员收到订单邮件信息。诸如此类,队列的应用范围是如此之广。二:普通工程师的解决方案和架构师的解决方案方案1:建表存邮件,消息...原创 2020-04-07 11:08:20 · 428 阅读 · 0 评论 -
PHP实现的消息实时推送功能
本文实例讲述了PHP实现的消息实时推送功能。分享给大家供大家参考,具体如下:入口文件index.html<!DOCTYPE HTML><html><head> <title>反ajax推送</title> <style> .send{color:#555;text-align: left;}...原创 2020-04-02 13:34:10 · 1778 阅读 · 0 评论 -
集群与分布式,你们知道有什么区别吗?
用一个例子介绍集群与分布式:小餐馆原来只有一个厨师,切菜洗菜备料炒菜他都全干。后来餐馆的客人多了,厨房里一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关 系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜 师,两个配菜师关系是集群。一、分布式:分布式是指将多台服务器...原创 2020-04-02 13:33:29 · 316 阅读 · 0 评论 -
PHP 7.4 发布、为什么都要关注性能优化?
我相信很多人都已经知道PHP 7.4 发布了,此版本标志着 PHP 7 系列的第四次特性更新。也有很多人在吐槽一些新特性,但这些新特性标志着PHP是未来可期的。PHP 7.4.0进行了许多改进,很多估计都看过,那么我将重点讲新增Opcache特性:Opcache Preloading Opcache 预加载新增 Opcache 预加载支持。预加载是在模块初始化的时候,将库和框架加载到 OPCa...原创 2020-04-02 10:03:57 · 1037 阅读 · 0 评论 -
SG :一个简单的 PHP 语法糖扩展
语法糖往往给程序员提供了更实用的编码方式,可以使代码更简洁流畅,语义更自然。本文介绍一个简单的 PHP 语法糖扩展,扩展了一种全新的 PHP 超全局变量获取方式。说说语法糖首先说说“语法糖”这个词绝非贬义词,它可以给我们的开发工作带来便利,是一种轻量级便捷的写法,既不会对语言本身的使用造成不利影响,也不会在性能上带来损失。通常情况下,使用语法糖能够增加程序的可读性,减少程序复杂性,减少...原创 2020-04-02 10:01:38 · 391 阅读 · 0 评论 -
如何提高 PHP 代码的质量?
说实话,在代码质量方面,PHP 的压力非常大。通过阅读本系列文章,您将了解如何提高 PHP 代码的质量。我们可以将此归咎于许多原因,但这肯定不仅仅是因为 PHP 生态系统缺乏适当的测试工具。在本文中,我想向您展示一个简单的设置,用于项目的基本质量测试。 我不会详述任何特定的工具,而是专注于设定测试环境。本文中有一个演示代码可以在 GitHub 上找到:https://github.com...原创 2020-04-02 10:00:43 · 294 阅读 · 0 评论 -
如何提高 PHP 代码的质量?第二部分 单元测试
在“如何提高 PHP 代码的质量?”的前一部分中:自动化工具篇https://zhuanlan.zhihu.com/p/95694322,我们设置了一些自动化工具来自动检查我们的代码。这很有帮助,但关于我们的代码如何满足业务需求并没有给我们留下任何印象。我们现在需要创建特定代码域的测试。1 单元测试最常见的测试软件的方法可能是编写单元测试。它们的目的是测试代码的特定单元,基于这样的假设:一...原创 2020-04-02 09:59:11 · 285 阅读 · 0 评论 -
如何提高 PHP 代码的质量?第三:端到端 / 集成测试
在本系列的最后一部分,是时候设置端到端 / 集成测试环境,并确保我们已经准备好检查我们工作的质量。在本系列的前几部分中,我们建立了一个构建工具,一些静态代码分析器,并开始编写单元测试。为了使我们的测试堆栈更完整,有一些测试可以检查你的代码是否在真实环境中运行,以及它是否能在更复杂的业务场景中运行良好。在这里,我们可以使用为行为驱动开发构建的工具——官方 PHP 的 Cucumber 实...原创 2020-04-02 09:57:45 · 553 阅读 · 0 评论 -
PHP解耦的三重境界(浅谈服务容器)
在完成整个软件项目开发的过程中,有时需要多人合作,有时也可以自己独立完成,不管是哪一种,随着代码量上升,写着写着就“失控”了,渐渐“丑陋接口,肮脏实现”,项目维护成本和难度上升,到了难以维持的程度,只有重构或者重新开发。第一重境界假设场景:我们需要写一个处理类,能够同时操作会话,数据库和文件系统。我们或许会这么写。境界特征:可以运行,但是严重耦合class DB{ pu...原创 2020-04-02 09:55:00 · 210 阅读 · 0 评论 -
PHP 代码加密实践
在我们开发的项目中,有一部分可能是用于商业用途,会部署在客户提供的机器环境中。因为 PHP 本身是解释型语言,所以未进行处理的代码,就会有泄露或被修改的风险。那么我们可能会想到最简单有效的方法就是进行加密混淆,然后配合一系列的校验,来保护我们的代码。那么本篇文章中,我们就采用了开源的 PHP 加密扩展 screw-plus 进行相关实践分析。目前市场上有多种加密方案,但基本都是收费的。我们本次...原创 2020-04-02 09:48:11 · 387 阅读 · 0 评论 -
深入理解PHP7内核之HashTable
之前的俩篇文章深入理解PHP7内核之zval和深入理解PHP7内核之Reference, 我介绍了当时在开发PHP7的时候对zval和reference的一些改造思考和结果, 之后因为确实精力有限就没有继续往下写,时隔一年多以后,因为这场突如其来的疫情,在家办公的时间很多, 于是终于有了时间让我来继续介绍一下PHP7的中Hashtable的变化, 以及当时我们做这些变化背后的考量.PHP5对...原创 2020-04-01 09:56:46 · 273 阅读 · 0 评论 -
网站架构优化性能概念
最开始的网站架构最初业务量不大,访问量小,此时的架构,应用程序、数据库、文件都部署在一台服务器上,有些甚至仅仅是租用主机空间1. 应用、数据、文件分离将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。2. 利用缓存改善网站性能大部分网站访问都遵循28原则,即80%的访问请求,最终落在20%的数据上,所以我们可以对热...原创 2020-04-01 09:55:19 · 216 阅读 · 0 评论 -
用PHP实现高并发服务器
一提到高并发,就没有办法绕开I/O复用,再具体到特定的平台linux, 就没办法绕开epoll. epoll为啥高效的原理就不讲了,感兴趣的同学可以自行搜索研究一下,也可以直接用现成的Swoole,原理一样都挺不错的。php怎么玩epoll?首先得安装个libevent库,再装个event扩展或者libevent扩展就可以愉快地玩耍了.有些人搞不清楚libevent库跟libevent扩展...原创 2020-04-02 09:45:09 · 1106 阅读 · 0 评论 -
Shell在代码重构中的应用了解下
代码重构(Code refactoring)有时是很枯燥的,字符串替换之类的操作不仅乏味,而且还容易出错,好在有一些工具可用,以PHP为例,如:Rephactor,Scisr等等,不过现成的工具往往意味着不够灵活,所以今天我要说说Shell在代码重构中的应用。先来个简单的,假设我们要把PHP文件中的foo_bar全都替换成fooBar,那么可以如下:方法一,使用Sed:1shell&...原创 2020-04-01 09:52:42 · 221 阅读 · 0 评论 -
解锁redis锁的正确姿势
redis是php的好朋友,在php写业务过程中,有时候会使用到锁的概念,同时只能有一个人可以操作某个行为。这个时候我们就要用到锁。锁的方式有好几种,php不能在内存中用锁,不能使用zookeeper加锁,使用数据库做锁又消耗比较大,这个时候我们一般会选用redis做锁机制。setnx锁在redis中最简单的数据结构就是string。最早的时候,上锁的操作一般使用setnx,这个命令是当:...原创 2020-04-01 09:50:41 · 413 阅读 · 0 评论 -
Swoole 实现协程基本概念和底层原理
协程是什么协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换,相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低,Swoole 可以为每一个请求创建对应的协程,根据 IO 的状态来合理的调度协程。在 Swoole 4.x 中,协程(Coroutine)取代了异步回调,成为 Swoole推荐的编程方式。Swoole 协程解决了异步回调编程困难的问题,使用协程...原创 2020-04-01 09:49:07 · 1138 阅读 · 2 评论 -
通过swoole协程实现并发编程
目前的Swoole 内置了丰富的协程组件供开发者直接调用以便快速实现异步非阻塞的并发编程,省去了开发者自己实现相应底层代码的麻烦:TCP/UDP Client:Swoole\Coroutine\ClientTCP/UDP Server:Swoole\Coroutine\ServerHTTP/WebSocket Client:Swoole\Coroutine\HTTP\ClientHTT...原创 2020-04-01 09:26:48 · 1197 阅读 · 0 评论 -
PHP内存溢出详解
相信很多人做大批量数据导出和数据导入的时候,经常会遇到PHP内存溢出的问题,在解决了问题之后,总结了一些经验,整理成文章记录下。优化点优化SQL语句,避免慢查询,合理的建立索引,查询指定的字段,sql优化这块在此就不展开了。 查询的结果集为大对象时转数组处理,框架中一般有方法可以转,如Laravel中有toArray(),Yii2中有asArray()。 对于大数组进行数据切割处理,P...原创 2020-04-01 09:24:16 · 445 阅读 · 0 评论 -
redis 过期策略
Redis 所有的数据结构都可以设置过期时间,时间一到,就会自动删除。你可以想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就会立即收割。你还可以进一步站在死神的角度思考,会不会因为同一时间太多的 key 过期,以至于忙不过来。同时因为 Redis 是单线程的,收割的时间也会占用线程的处理时间,如果收割的太过于繁忙,会不会导致线上读写指令出现卡顿。这些问题 ...原创 2020-04-01 09:14:11 · 229 阅读 · 0 评论 -
在PHP服务中使用Websocket
为什么需要 WebSocket?需求是:用户停留页面 15 分钟,且没有任何操作,则弹出登陆窗口,让用户重新登陆。一般这样的需求实现多为长连接轮询,会有浏览器的卡顿、服务端消耗及不容易维护等问题。后来发现 websocket 这样的通讯方式,主要有以下优点:建立在 TCP 协议之上,服务器端的实现比较容易。 手时不容易屏蔽,能通过各种 HTTP 代理服务器。 数据格式比较轻量,...原创 2020-04-01 09:10:12 · 1196 阅读 · 0 评论 -
你了解Yaf 是什么嘛?
Yaf 是什么Yaf,全称 Yet Another Framework,是一个C语言编写的、基于PHP扩展开发的PHP框架。相比于一般的PHP框架,它更快,快到被誉为最快的PHP开发框架。它提供了Bootstrap、路由、分发、视图、插件功能。注:百度的odp框架基于yaf开发的。Yaf 的优点用C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销....原创 2020-04-01 09:09:08 · 1618 阅读 · 0 评论 -
Nginx和PHP的配置
采用nginx+php作为webserver的架构模式,在现如今运用相当广泛。然而第一步需要实现的是如何让nginx正确的调用php。由于nginx调用php并不是如同调用一个静态文件那么直接简单,是需要动态执行php脚本。所以涉及到了对nginx.conf文件的配置。这一步对新手而言需要动点脑筋,对于一般的熟手而言,也有不少同学并没有搞透彻为何要如此这般配置。本文的主要内容为如何在nginx s...原创 2020-03-31 11:04:31 · 526 阅读 · 0 评论 -
Redis异步消息队列与延时队列
异步消息队列说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。Redis通过list数据结构来实现消息队列.主要使用到如下命令:lpush和rpush入队列 lpop和rpop出队列 blpop和brpop阻塞式出队列...原创 2020-03-31 10:33:01 · 623 阅读 · 0 评论 -
redis集群部署-PHPer提升必备
1.节点规划:2种方式:1主+多从,多对主从,第二种分担主节点、容易扩容缩减。容器名称 容器IP地址 映射端口号 服务运行模式Redis-master1 172.1.50.11 6391->6379,16391->6379 masterRedis-mast...原创 2020-03-31 10:20:08 · 230 阅读 · 1 评论 -
哈希算法及其应用场景
哈希算法简单理解就是实现哈希函数的算法,用于将任意长度的二进制值串映射为固定长度的二进制值串,映射之后得到的二进制值就是哈希值(散列值)。我们日常开发中最常见的哈希算法应用就是通过 md5 函数对数据进行加密了,md5 就是一个哈希函数,结合 md5 我们可以归纳出哈希算法的一般特性:从哈希值不能反向推导出原始数据(所以哈希算法也叫单向算法,不可逆); 对输入数据非常敏感,哪怕原始数据只...原创 2020-03-31 09:58:55 · 1271 阅读 · 0 评论 -
php实现单点登录实例
这是一个简单版的php单点登录概述,如果需要实现复杂的需自己,编写复杂的ticket加解密算法。先看张图。sso系统,http://sso.yxh.com<?php echo "sso站点"; setcookie("site", "sso", time() + 1000);//sso.yxh.com自己可以看到 setcookie("ti...原创 2020-03-31 09:57:17 · 257 阅读 · 0 评论 -
php实现数据结构的单向链表
啥是单向链表链表是以链式存储数据的结构,其不需要连续的存储空间,链表中的数据以节点来表示,每个节点由元素(存储数据)和指针(指向后继节点)组成。单向链表(也叫单链表)是链表中最简单的一种形式,每个节点只包含一个元素和一个指针。它有一个表头,并且除了最后一个节点外,所有节点都有其后继节点。它的存储结构如下图所示代码实现定义节点class Node{ publi...原创 2020-03-31 09:47:53 · 209 阅读 · 0 评论 -
laravel中如何利用反射实现依赖注入
依赖注入在一个类中经常会依赖于其他的对象,先看一下经典的写法class Foo { public $bar; public function __construct() { $this->bar = new Bar(); }}$foo = new Foo();当类的依赖发生改变时,比如Bar这个类需要实例化参数时,而依...原创 2020-03-31 09:44:40 · 302 阅读 · 0 评论 -
PHP7语言执行原理
常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言。编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编译成目标文件。一般称完成编译工作的工具为编译器。而解释型语言,在程序运行时才被“翻译”为机器语言。但是执行一次“翻译”一次,所以执行效率较低。解释器的工作就是解释型语言中,负责“翻译”源代码的程序。对于一段C语言代码...原创 2020-03-31 09:37:27 · 269 阅读 · 0 评论 -
PHP高并发商城秒杀
1.什么是秒杀 秒杀活动是一些购物平台推出的集中人气的活动,一般商品数量很少,价格很便宜,限定开始购买的时间,会在以秒为单位的时间内被购买一空。比如原价千元甚至万元的商品以一元的价格出售,但数量只有一件,在某天的某个时间开始出售,这就造成很多人去抢这一件商品。2.秒杀会带来的问题(1)高并发比较火热的秒杀在线人数都是10w起的,如此之高的在线人数对于网站架构从前到后都是一种考验。...原创 2020-03-31 09:26:37 · 340 阅读 · 0 评论 -
PHP的垃圾回收机制
1. PHP可以自动进行内存管理,清除不需要的对象,主要使用了引用计数2. 在zval结构体中定义了ref_count和is_ref , ref_count是引用计数 ,标识此zval被多少个变量引用 , 为0时会被销毁is_ref标识是否使用的 &取地址符强制引用3. 为了解决循环引用内存泄露问题 , 使用同步周期回收算法比如当数组或对象循环的引用自身 , unset掉数组的...原创 2020-03-31 09:19:15 · 278 阅读 · 0 评论 -
php的socket编程概述
php的socket编程算是进阶必备知识,不过,我们只要理解socket几个函数之间的关系,以及它们所扮演的角色,那么理解起来应该不是很难了关于socket编程所涉及到的网络协议,什么TCP啊,UDP啊,什么socket三次握手等等,这些网络协议网上有很详细的解释,这里不讲,只截个socket建立套接的过程图让你瞧瞧:socket是怎么建立连接的呢?上面已经提到过了,它建立连接的过程是...原创 2020-03-30 10:39:26 · 225 阅读 · 0 评论 -
PHP操作多进程
在以往的开发项目中,要操作进程就会使用PHP自带的pcntl拓展。但是pcntl存在着许多的不足:pcntl没有提供进程间通信的功能 pcntl不支持重定向标准输入和输出 pcntl只提供了fork这样原始的接口,容易使用错误这边我们使用swoole进程管理模块,用来替代PHP的pcntl;场景:日常任务中,有时需要通过php脚本执行一些日志分析,队列处理等任务,当数据量比较大时,可...原创 2020-03-30 10:33:34 · 242 阅读 · 0 评论