PHP Swoole的内存分配逻辑,Swoole 与 ZendMM 协同机制

Swoole 的 Worker 进程是“常驻进程”,既跑 PHP 用户代码,也跑大量 C/C++ 网络与协程逻辑。因此你在排查内存时,必须先建立一个基本认知:Worker 里同时存在 PHP/Zend 的内存体系(ZendMM)和 Swoole/C 层的内存体系(系统分配器/内存池/共享内存)。很多“PHP 内存正常但 RSS 仍增长”的问题,本质就是这两套体系的统计口径不同。 在 Swoole
PHP Swoole的内存分配逻辑,Swoole 与 ZendMM 协同机制

PHP内存管理器(ZendMM)的内存分配逻辑

Zend VM(执行器)运行时需要频繁创建/销毁大量对象(zval、zend_string、HashTable、call frame 等)。如果每一次申请/释放都直接调用系统 malloc/free,性能和碎片都会很难控制。所以 PHP 在引擎层引入了 ZendMM:把“高频小对象”的申请/释放先收拢到一个更适合 PHP 场景的内存管理器里。 Zend VM(执行器)里大量对象一般不会直接 mal
PHP内存管理器(ZendMM)的内存分配逻辑

温故而知新,PHP Swoole使用过程中的一些思考

今天突然发现很多以前理解过的概念,再次回顾的时候感觉有点模糊了,翻了翻笔记又有了一些新的理解。 简单的异步任务执行可以直接通过管道向子进程投递异步任务,然后触发事件执行任务。 Redis的订阅与发布也可以实现上述的功能,但它的优势在于它可以一对多,PUBLISH之后可以同时触发多个订阅的事件,并且可以在任意进程内进行订阅。 专门的消息队列组件,则适用于对消息队列要求比较高的场景(消息确认、消费者组
温故而知新,PHP Swoole使用过程中的一些思考

PHP源代码如何打包成一个单独的文件?

开发Node项目的时候,很喜欢Node的一个点就是可以通过rollup这些打包软件,把所有项目代码打包到一个js里,这样部署起来简单又方便。 本着一个问题肯定不止我一个人遇到的定理,自己也研究了一下PHP项目打包,最终实现了一个相对可行的方案。 Phar 是一种 PHP 归档文件格式,类似于 Java 中的 JAR 文件,用于将多个文件打包到一个单一的文件中。 打包成phar后,如果需要访问 Ph
PHP源代码如何打包成一个单独的文件?

如何将WordPress文章中的外链图片自动下载到本地?

当我们想引用其他网站上的图片时候,直接使用外链不仅不能保证图片的稳定性,还有可能影响页面打开速度,然而如果一个个下载再上传又十分费力。 好在WordPress很多插件或者代码都可以实现自动将外链图片下载到本地,最终我选择了一个叫:nicen-localize-image 的插件(可以在WP插件市场搜索安装)。 选择这个插件的主要原因是它功能强大,而且用起来很简单,而且开源!插件支持如下的一些功能:
如何将WordPress文章中的外链图片自动下载到本地?

一款可以极大的提升WordPress访问速度的缓存插件!

本站已启用超快的缓存插件(nicen-cache)!您可以多点击几个页面,体验一下访问速度! 之前写过一篇关于Wordpress缓存的文章:https://nicen.cn/3107.html 通过手动配置后,就可以实现自动缓存站点页面,但是存在一些缺点: 没有对应的缓存刷新机制,更新缓存只能靠手动删除 有一定的使用门槛,不适合小白 ... 为了解决上面的问题,便开发了一款对应的缓存管理插件: 文
一款可以极大的提升WordPress访问速度的缓存插件!

WordPress用户行为回放插件,精准捕捉用户行为的每一步

在数字营销的世界里,了解用户行为是提升用户体验和转化率的关键。nicen-replay 插件,它能够让您轻松回放用户在网站上的每一步操作,从点击到滚动,再到表单填写,每一个细节都清晰可见。 nicen-replay,是一款可以监控并回放用户行为的插件,支持如下功能: 数据收集:在不影响站点速度的情况下,收集用户在站点上的操作, 实时回放:插件后台可以回放用户的所有行为,通过视频的方式来帮助你分析用
WordPress用户行为回放插件,精准捕捉用户行为的每一步

钉钉企业内部应用开发,相关笔记

钉钉官方开发平台:https://open.dingtalk.com/ 企业内部应用开发:https://open.dingtalk.com/document/orgapp/learning-map 相关文档:https://open.dingtalk.com/document/orgapp/application-types 相关文档:https://open.dingtalk.com/docu
钉钉企业内部应用开发,相关笔记

WordPress如何解决保存文章后反斜杠丢失的问题?

WordPress保存文章时,文章内包含的反斜杠会被当做转义符,导致保存后丢失反斜杠。 这个问题发现很久了,比如文章内包含PHP代码,又恰好代码使用了命名空间时,原代码: <?php use Swoole\\Server; 会变成下面这样: <?php use SwooleServer; 产生的影响也不小,只好研究研究如何解决这个问题。 通过对保存的环节进行分析,确定是在保存到数据库之前
WordPress如何解决保存文章后反斜杠丢失的问题?

如何将知乎书城的读书笔记同步到WordPress?一款可以将知乎书城的读书笔记同步到WordPress文章的插件

闲来无事的时候喜欢看会书,知乎是平常用的较多的一个自带书城的软件,所以平常看电子书都是用知乎。 知乎的书籍在阅读过程中,可以直接选中某些内容作为笔记。看完一本书之后,很多时候都是靠笔记来回顾整本书的知识点,但是知乎的笔记查询起来,极不方便,再加上平常习惯用Wordpress做笔记,所以就有了将知乎笔记导出的想法。 在对知乎APP进行抓包分析需求的可行性的时候,发现整个需求完全可以实现,于是有了au
如何将知乎书城的读书笔记同步到WordPress?一款可以将知乎书城的读书笔记同步到WordPress文章的插件

Easyswoole学习笔记,快速上手

EasySwoole 是一款基于Swoole Server 开发的常驻内存型的分布式PHP框架,专为API而生,摆脱传统PHP运行模式在进程唤起和文件加载上带来的性能损失。EasySwoole 高度封装了 Swoole Server 而依旧维持 Swoole Server 原有特性,支持同时混合监听HTTP、自定义TCP、UDP协议,让开发者以最低的学习成本和精力编写出多进程,可异步,高可用的应用
Easyswoole学习笔记,快速上手

组织架构设计、角色与权限设计的一些思考

查询某个组织下面的所有用户(包括所有下级组织) 查询某个组织下面的所有下级组织 查询用户所在的组织 获取整个组织结构,方便生成树形数据结构 相关的必要字段如下: id,主键ID pid,父级组织id tree,当前节点的所有父级组织,假设当前组织的父级id为2,2的父级id为1,则tree的值为:1,2 相关的必要字段如下: department,所在的组织id。 SELECT * FROM `d
组织架构设计、角色与权限设计的一些思考

PHP ImageMagick扩展有哪些函数?PHP ImageMagick扩展的使用方法

ImageMagick是一个免费的创建、编辑、合成图片的软件。它可以读取、转换、写入多种格式的图片。图片切割、颜色替换、各种效果的应用,图片的旋转、组合,文本,直线,多边形,椭圆,曲线,附加到图片伸展旋转。 官方网站:https://imagemagick.org/index.php PHP相关文档:https://www.php.net/manual/zh/book.imagick.php 相关
PHP ImageMagick扩展有哪些函数?PHP ImageMagick扩展的使用方法

如何让WordPress的所有请求只需要通过Nginx处理,不经过PHP和Mysql,从而加快站点访问速度?

wordpress响应请求大致分为如下几个过程: Nginx接收请求 -> php-fpm进程运行指定php脚本 -> php在mysql内查询相应数据 -> 处理返回给Nginx  -> Nginx响应用户请求 因为不存在缓存的过程,所以每次处理请求都要重新查询数据库,所以wp有很多流行的静态缓存方案; 初次请求 -> Nginx接收请求 -> php-fpm
如何让WordPress的所有请求只需要通过Nginx处理,不经过PHP和Mysql,从而加快站点访问速度?

PHP如何使用Composer来自动加载项目文件?

Composer是PHP的依赖管理工具。它允许您声明您的项目所依赖的库, 并且它将为您管理 (安装/更新) 它们。它以每个项目为基础管理它们, 并将它们安装在项目内的目录 (如 vendor) 中. 默认情况下, 它不会在全局范围内安装任何内容。因此, 它是一个依赖关系管理器。 下载composer.phar文件,即可在任意操作系统上通过PHP运行软件包工具,更新时可直接重新下载文件; https
PHP如何使用Composer来自动加载项目文件?

如何快速地将WordPress文章内所有外部图片转换为本地链接?

nicen-localize-image(Wordpress后台搜索安装插件),是一款用于本地化文章外部图片的插件,支持如下功能: 文章发布前通过编辑器插件本地化 文章手动发布时自动本地化 文章定时发布时自动本地化 针对已发布的文章批量本地化。 Github:https://github.com/friend-nicen/nicen-localize-image Gitee:https://git
如何快速地将WordPress文章内所有外部图片转换为本地链接?

WordPress主题开发,如何修改自带的邮件发送功能?

今天收到两条评论,发现没有收到邮件通知,转念一想自己也没设置过邮件相关的配置,查了一下文档发现wordpress是通过wp_mail函数发送邮件的。 打开wordpress源码文件 ,定位到wp_mail函数: <?php //255行代码如下 global $phpmailer; // (Re)create it, if it\'s gone missing. if ( ! ( $phpma
WordPress主题开发,如何修改自带的邮件发送功能?

WordPress插件开发,从入门到精通。

WordPress主题开发:https://nicen.cn/1244.html WordPress插件开发手册:https://developer.wordpress.org/plugins/ 每次WordPress 网页请求,都会依次执行各种插件的主文件(PluginName.php), 然后才会执行主题的function.php 文件。执行时注册的各种钩子,将会在指定事件发生时触发执行。 W
WordPress插件开发,从入门到精通。

WordPress免费主题:Document,让阅读变得更加方便

😁作为一个程序员,在日常的工作、生活、学习的过程中基本都有很多需要做笔记的地方;做笔记的主要目的之一是为了“温故而知新”,另一个则是为了在下一次遇到的时候,不需要再次耗费精力去找解决方法; 回顾自己之前写的那个主题,不管是写还是查都不怎么方便,最终下定决心重写一个主题;以 “方便记、方便查、简约”作为设计核心; Github:https://github.com/friend-nicen/them
WordPress免费主题:Document,让阅读变得更加方便

如何解决改了php.ini中的open_basedir之后仍然报open_basedir restriction错误的问题?

今天PHP突然报open_basedir restriction错误,改了php.ini还是报错,于是百度查了查,总结如下: 原来LNMP1.2的防跨目录由原来在php.ini中设置 移至网站根目录下的 .user.ini 进行控制。所以要修改open_basedir的目录,得修改网站根目录下的 .user.ini .user.ini文件无法直接修改 如要修改,需要先执行:chattr -i /网
如何解决改了php.ini中的open_basedir之后仍然报open_basedir restriction错误的问题?

PHP编译参数configure配置详解,以及php.ini说明

人,有了物质才能生存;人,有了理想才谈得上生活。 因为现在都是宝塔、lnmp这些自动进行配置的,这个知识点平常很少需要用到,但了解一下,确实能让一些问题豁然开朗。 ./configure -h 在源代码目录中,该命令可以查看所有编译参数以及对应的英文解释 --prefix=/opt/php //指定 php 安装目录 --with-apxs2=/usr/local/apache/bin/apxs
PHP编译参数configure配置详解,以及php.ini说明

PHP解析Xml:SimpleXML类学习笔记

SimpleXML 是 PHP 5 中的新特性。SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从 XML 元素中读取文本数据。SimpleXML 可把 XML 文档(或 XML 字符串)转换为对像; 元素被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时
PHP解析Xml:SimpleXML类学习笔记

PHP Swoole学习笔记,持续记录

PHPStorm Swoole代码提示:https://plugins.jetbrains.com/plugin/13040-swoole-ide-helper/versions PHP swoole代码提示,类型包:https://github.com/swoole/ide-helper 匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有
PHP Swoole学习笔记,持续记录

详细了解 Cookie、Session、Token以及oauth2、jwt

很久很久以前,Web 基本上就是文档的浏览而已,既然是浏览,作为服务器,不需要记录谁在某一段时间里都浏览了什么文档。 每次请求都是一个新的 HTTP 协议,就是请求加响应,尤其不用记住是谁刚刚发了 HTTP 请求,每个请求相对来说都是全新的。 但是随着交互式 Web 应用的兴起,像在线购物网站和需要登录的网站等就面临一个问题,那就是要管理会话,必须记住哪些人登录系统,哪些人往自己的购物车中放商品。
详细了解 Cookie、Session、Token以及oauth2、jwt

理解PHP MVC,以及NPM、YARN命令的相关说明

MVC,在我印象中最典型的、自己用的多的当属THinkPHP。 MVC包括控制器(Controller),模型(Model),视图(View)。 控制器的作用是调用模型和 视图,将模型产生的数据传递给视图,并让视图去显示 模型的作用是获取数据并处理返回数据 视图的作用是将取得的数据进行美化,并向用户终端输出 1. 浏览者 -> 调用控制器,发出指令 2. 控制器 -> 按指令选择合适的
理解PHP MVC,以及NPM、YARN命令的相关说明

PHP允许前端跨域请求的相关请求头设置、文件下载

CORS 请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。 PHP中的 header 函数用于设置响应头。 当POST数据为JSON,必须允许请求头才能跨域访问,因为Content-type:application/json; 默认是不允许跨域的。 header(\'Access-Control-Allow-Origin: *\');
PHP允许前端跨域请求的相关请求头设置、文件下载

PHP批量识别Nginx网站日志内的百度真假爬虫记录

通过分析网站日志可以统计出百度的真实抓取次数、分析抓取情况。 网站一般都有一定的反爬虫机制,但是为了正常收录会通过UA排除百度的爬虫,也就导致了很多做采集、爬虫的人冒充百度爬虫UA用以越过反爬虫机制。 逐条分析每一条日志,筛选出百度爬虫的日志,再通过exec函数执行nslookup命令反向解析IP获取解析的域名,域名中包括baiduspider关键词的就是真的百度爬虫。 下载PHP脚本(百度网盘)
PHP批量识别Nginx网站日志内的百度真假爬虫记录