PHP
文章平均质量分 72
10年PHP编码,十年磨一剑的过程,从小白到源码的学习之路!
stark张宇
我亦无他,惟手熟尔。
展开
-
lnmp - 登录技术方案设计与实现
登录功能是对于每个动态系统来说都是非常基础的功能,用以区别用户身份、和对应的权限和信息,设计出一套安全的登录方案尤为重要,接下来我介绍一下常见的认证机制的登录设计方案。原创 2024-09-17 20:40:18 · 1216 阅读 · 0 评论 -
lnmp - tp6.0的安装和简单使用
使用了很长时间的Mac M2芯片的电脑在之前使用虚拟机之前总有一些bug不是那么好用,周末之余重新安装了一下centos虚拟机,搭建了lnmp环境,打算自己挤时间,做一点应用,作为一次新的小小的尝试。原创 2024-09-05 07:31:35 · 1217 阅读 · 0 评论 -
PHP - ZipArchive上传、下载实例
在很多实际生产场景都需要批量上传、下载一些文件的处理,整理了使用PHP语言操作ZipArchive实践和实例,ZipArchive需要服务器上安装zlib库,php扩展中安装zip扩展。因为时间关系,乱码或者是其他别的一些知识,等之后抽时间在更新,编码不易,全靠硬挤,加油吧。原创 2024-03-27 09:25:37 · 560 阅读 · 0 评论 -
优化 - 重构一次Mysql导致服务器的OOM
优化了一次前后端处理不当导致的CPU的一次爆机行为,当然,这和服务器的配置低也有着密不可分的关系,简单的逻辑学告诉我们,要找到真正的问题,进行解决,CPU爆机的关键点在于前后端两个方面,下面针对具体的问题,进行分析和解决。原创 2024-01-13 13:24:26 · 603 阅读 · 0 评论 -
PHP特性知识点扫盲 - 下篇
在实际的生产环境中遇到了实际需要解决的问题,需要把服务部署的方式梳理出来,在同一个服务器中部署多个PHP环境原创 2024-01-01 12:58:28 · 573 阅读 · 1 评论 -
PHP特性知识点扫盲 - 上篇
之前在分析thinkphp源码的时候,对依赖注入等等php高级的特性一直想做一个梳理和总结,一直没有时间,好不容易抽一点时间对技术的盲点做一个扫盲和总结。原创 2023-12-30 11:57:17 · 652 阅读 · 0 评论 -
thinkphp6.0 底层源码分析 - 类的自动加载、配置文件初始化
因为工作的需要,深入研究了一下thinkphp的源码,也算是对php知识的一个回归,工作这么多年,我一直坚信php是最好的Web编程语言,它可以做到成本和效率的一个平衡,知其然,更要知其所以然才是高手修炼之道。原创 2023-10-31 08:57:53 · 874 阅读 · 0 评论 -
Swoole - 为什么说Swoole中小型企业微服务的首选技术方案
Swoole的出现,使PHP语言不再局限于传统的 Web领域,对中小企业有很好的支持,有一些企业盲目的追求微服务和K8s,我真诚建议不要轻易上微服务,上了你才知道这里面的辛酸,高成本、低效率会拖碎整个团队,研究中小企业的提效、节省成本是我未来的研究的新方向。原创 2023-05-16 14:43:14 · 474 阅读 · 0 评论 -
PHP - php7扩展安装的完全攻略 swoole、yaf、grpc
这篇是php7源码系统攻略的第三篇,是对之前的知识和补充,踩了很多坑,鏖战了数天才完全通关,下面带你安装常用的扩展,以及和。php的扩展可分为3类,原生自带、pecl官网、和老旧的疑难杂症包。原创 2023-02-07 14:27:42 · 644 阅读 · 0 评论 -
GItOps - k8s的微服务实战1 - 构建业务镜像
在学习了容器化、docker和k8s的 Ingress-Nginx 、server 和pod 知识后,开启了 k8s的微服务实战第三篇,在搭建环境废了一点周折,这次实战的目的是集成在gitlab里,实现自动打包、发布的功能。Mac M2芯 搭建k8s(minikube)超详细实战Mac M2芯 搭建k8s(kubeadm)超详细实战最后一点也是我最想说的地方,中间过程错了好多次,每一个都很诡异,最后终于都克服了,看到这里的小伙伴加油呀,别放弃,一切会好,可以把这个做为基础,这些都是差不多的,原理都是一样的。原创 2023-02-03 15:42:06 · 744 阅读 · 1 评论 -
妙用schedule执行php脚本定时任务
妙用schedule来执行计算机的定时任务,用命令行接收参数的方式对同一组用户进行不同的操作。原创 2022-11-15 13:11:55 · 553 阅读 · 0 评论 -
php源码03 - php运行的生命周期
概述这是源码php7系列的第三篇文章,主要介绍PHP运行的生命周期、FastCGI、Fpm和Nginx的调用,彻底学透底层知识是解决问题的根本。php7编译安转、新特性基本变量与内存管理机制CLI模式下的生命周期CLI模式小生命周期:模块初始化阶段->请求初始化阶段->脚本执行阶段->请求关闭阶段->模块关闭阶段1.php初始化部分函数调用1.对sapi_globals中的成员变量做初始化(sapi_initialize_empty_request)2.调用s原创 2022-02-28 14:13:13 · 752 阅读 · 6 评论 -
php源码02 -基本变量与内存管理机制
概述这是源码php7系列的第二篇文章,主要介绍变量的机制和内存的管理,我相信学习源码是对代码整体提升的有效手段,话不多说,开始吧!php7编译安转、新特性变量实现1. 解密zvalzval 底层结构:struct_zval_struct { zend_value value; //8个字节 union u1; //4个字节 union u2; //4个字节}对于vue来说是一个联合体,zval一共16个字节,u1 4个字节,u2四个字节,value结构体如下:原创 2022-02-26 19:18:20 · 580 阅读 · 10 评论 -
php - 解决百万级全站用户消息推送问题
问题场景描述基于Swoole的WebSocket服务对站内的消息进行的推送,有个全站进行站内消息的推送很棘手,因为峰值的用户服务1600+/QPS,服务器的配置2核8G(的配置)。难点在于:Http的服务是接收主站的请求,需要及时返回,响应时间不能久。Redis的执行时间不能太久,(Redis是单进程)慢请求会卡主其他的使用。百万级用户场景,全站用户发送时间不定旧版本是Crontab实现的,因为后台直接请求websocket服务改动大以上诸多难题。解决思路难题有两个思路,先从业务场景分原创 2022-02-22 18:28:14 · 3632 阅读 · 14 评论 -
PHP源码01 - php7编译安转、新特性
环境搭建虽然php8已经上市,但是系统学习一下php7,初衷的打算是想彻底的掌握PHP的底层原理和语言结构,结合PHP开发PHP扩展、或者是编写一个Swoole的框架,解决实际生产的性能问题,解放生产力,发展生产力!环境可以是centos ,或者是在Ubuntu系统中,对于裸镜像需要安装命令yum update(centos),apt-get update;(Ubuntu)我的实验环境是以centos7环境。首先进行环境搭建,用Docker搭建的centos7,php选用版本,下载php源码,比如:原创 2022-02-19 22:38:59 · 1512 阅读 · 18 评论 -
PHP - 代码规范PSR
概述仔细的缕了一下关于PHP代码的书写规范,我发现我确实有很多不足的地方,需要改进,PHP代码遵循PSR(PHP Standard Recommendation)规范,之前忘了看那本书到psr4,psr4优化的是composer的依赖倒置,现在已经到psr18了,官网链接 php-fig 。代码写的很随意,显得自己不专业,也给别人的阅读带来不便。1.变量、函数写法驼峰(我之前的代码里就是变量有下划线、有驼峰非常不标准)public function readMessage(){ $fdSe原创 2022-01-28 14:08:53 · 1687 阅读 · 0 评论 -
php经典实例(数字)
前言php中的数字分成两类,整数和浮点数。01.检测变量是否包含一个合法数字is_numeric() - 函数用于检测变量是否为数字或数字字符串。$tests = array( "42", 1337, 0x539, 02471, 0b10100111001, 1337e0, "0x539", "02471", "0b10100111001", "1337e0", "not numeric", array(), 9.1, null, '',);foreach ($t原创 2021-07-28 14:37:50 · 392 阅读 · 0 评论 -
代码重构与设计模式 - 实践笔记
概述所有改变和突破的前提是欲望,投入工作是一件蛮开心的事情,时间过的也快,这次项目的主要改造的点有两个,优化代码结构(主要是设计模式上),优化成好用的系统成为了一个新的小目标。面向对象设计原则单一职责原则Srp开放-关闭原则Ocp,解决的是程序的扩展性里式替换原则Lsp,解决的是程序的继承性接口隔离原则Isp依赖反转原则Dip(控制反转/依赖注入)编码原则KISS原则(编码尽量保持简单)YAGNI (当前不需要就不要做)DRY(可复用好的代码)LOD(迪米特法则)问题原创 2021-10-09 14:39:47 · 368 阅读 · 0 评论 -
## Laravel框架:原理机制篇
Laravel框架:原理机制篇在去年的项目里开始使用Laravel框架和Vue的组合,进行前后端分离,本框架有什么具体的优点,进行具体分析。请求周期Laravel 采用了单一入口模式,应用的所有请求入口都是 public/index.php 文件。1.注册类文件自动加载器:Laravel通过composer进行依赖管理,并在bootstrap/autoload.php中注册了Compose...转载 2020-02-29 18:32:22 · 2140 阅读 · 0 评论 -
PHPer的进阶-Swoole网络和未来
PHP基础任何一种编程语言的基础知识看起来都稍微显得有一点枯燥,但确实是首当其冲需要学习和总结的,没有坚实的地基是盖不起万丈高楼的,成为高手的第一课就是学而思,反复练习。1.设计模式 ( http://www.imooc.com/learn/236 )2.php异常,错误处理 ( http://www.imooc.com/learn/380 )PHP - 运行模式1.cgi 协议模式(基本已经不再使用)cgi模式 通用网关接口(Common Gateway Interface),它允许web服务原创 2021-07-02 15:56:10 · 468 阅读 · 0 评论 -
Web - mediawiki/layui/laravel
学习笔记 搭建mediawiki/layui/laravel公司的业务状况从4月开始就在艰难中度过,准备进行新的尝试和探索,砸碎所有好的、不好的成绩,卷土重来,很简单,我是搞互联网的,不能被互联网搞了。我准备把所有遇到的坑都进行整理和记录,分享给和我一样,也在不断探索的人。网络的复杂需要合作和协议,步调一致,思想一致,万里之行,始于wiki。我采用的wiki版本是 mediawiki-1.33...原创 2019-11-08 12:55:30 · 640 阅读 · 0 评论 -
Web - 开发中的文件同步有什么更好的解决方案
Web - 开发中的文件同步有什么更好的解决方案现实的开发环境中,代码的管理和开发环境,总有那么一点不尽如人意,每次遇到因为环境或者是配置的不同而产生的BUG或是问题,统一的开发环境是必须具备的。1、samba服务samba服务是一种非常棒的解决搭建服务器、代码同步的服务,未来的互联网一定都是服务+云的模式,以后的生活之分数字化和非数字化两种服务。安装rpm -qa | grep sam...原创 2019-11-11 16:05:43 · 921 阅读 · 0 评论 -
优化性能到底在优化啥?
概述性能优化,反复被提起,但其实很不理解,优化性能到底在优化啥?你要先了解这个问题。一直到前些天一个偶然的机会才想明白,高性能的核心就是用数学的计算,合理的运用服务器的资源,主要是Cpu和内存,主要针对网络层、传输层、应用层的优化。网络层和传输层主要承载Tcp/Ip的网络传输,根据流量配置出合理的系统参数,比如减少一个RTT的时间,针对应用层的Web服务主要的优化点在于Nginx中。想了解Nginx的,请阅读我之前的Nginx文章,以点击破万。基础设施优化提升Cpu缓存命中率Cpu是电脑中最重要原创 2022-01-17 14:32:50 · 4678 阅读 · 3 评论 -
PHP - 2021年终总结
概述技术领域没有银弹,各行各业的人想要持久的生存都需要学习,学习本身是一件有趣的事,难点在于把学到的知识融入到现在公司的业务和体系中,让项目落地,重新定义和改革之前的架构体系,这个过程是复杂的,新旧体系的交替,人员的流动等等,这个过程可能会遇到各种各样的问题,没有数据证明的项目落地都差那么点意思,不够精准和严谨,专业程度会遭到质疑。2021年技术圈的变化:1.centos7即将停止更新,2024年不在打补丁...2.layUi下线官网,接入Vue开发模式 ...3.PHP语言市场占有率排名下降了2原创 2022-01-06 14:56:58 · 2249 阅读 · 1 评论 -
PHP脚本任务 - 复杂场景测试生产环境数据的解决办法
概述如果老板交给你一个业务很复杂的业务场景,并且要求你在测试环境测试生产环境的数据,你会怎么处理呢?解决方案解决方案1第一个解决方案就是将实际生产环境需要的数据,先打印出需要的Sql语句,拼装,把Sql的查询结果放到以.csv文件的Excel表里加以处理。模拟出需要的数据暂存在脚本执行的数组里。需要注意的是以下几个点:列名称要有序对应如果有表头,要删除掉表头$list = [];$mapKey = [ 'id', 'novel_id' //... ];原创 2021-12-25 11:21:32 · 600 阅读 · 0 评论 -
Docker php安装扩展步骤详解
Docker php安装扩展步骤详解前言此篇,主要是演示docker-php-source , docker-php-ext-install ,docker-php-enable-docker-configure 这四个命令到底是用来干嘛的,它们在PHP容器中都做了哪些事情。很多人很不理解在Dockerfile中安装PHP扩展的时候总是出现这几个命令,本篇就就是为你揭开这些命令的神秘面纱而准备的,所有案例都是本人自己运行过的。Docker 中的PHP容器安装扩展的方式有:通过pecl方式安装通转载 2021-10-28 13:47:53 · 2001 阅读 · 2 评论 -
php经典实例(日期和时间数组)
01.查找当前日期和时间$time = date('Y-m-d H:i:s');echo $time;var_dump(date('r'));//打印 Thu, 29 Jul 2021 10:05:08 +0800getdate — 取得日期/时间信息$today = getdate();print_r($today);Array( [seconds] => 21 [minutes] => 9 [hours] => 10 [mday]原创 2021-08-25 17:45:35 · 543 阅读 · 0 评论 -
php经典实例(字符串)
前言php字符串是二进制安全的,(也就是说,字符串可以包含null字节),而且可以根据需要扩展和收缩,其大小只受PHP可用内存大小限制。memory_limit = 128M双引号字符串转义序列:https://www.php.net/manual/zh/regexp.reference.escape.php1.访问子串strpos — 查找字符串首次出现的位置if(strpos('beijing','bei') !== false){ echo 'bei in beijing';}原创 2021-07-27 16:13:10 · 284 阅读 · 1 评论 -
PHP面试-基础知识考察点复习
引用变量考点Demo1$a = range(0,10);$b = $a;//此时$a和$b同指向一个内存空间,内存大小不会发生作用$a = range(0,10);//$a的值虽然没有变化,但进行了写操作,触发PHP的写时复制Copy On Write)工作原理Demo2 引用&$a = range(0,10);$b = &$a;$a = range(0,10);PHP在对变量进行&引用时不会再开辟内存空间,两个变量永远指向一个空间,不会原创 2020-09-15 16:31:39 · 492 阅读 · 0 评论 -
百度云SDK BUG - __HALT_COMPILER(); must be declared in a phar
try { //使用PHP SDK,并且使用自定义配置文件 include 'BaiduBce.phar'; // require 'YourConf.php'; use BaiduBce\BceClientConfigOptions; use BaiduBce\Util\Time; use BaiduBce\Util\MimeTypes; ...原创 2020-04-20 14:20:00 · 519 阅读 · 3 评论 -
PHP :MVC的框架模式和Composer
PHP :MVC的框架模式和Composer今天的协同开始里MVC已经是广为达成共识,就像和平与发展是21世纪的主题,之前的代码都是层与层区别的不明显,html和PHP混合开发,效率不高,1999年,sun公司的J2EE,是最早最完整的MVC模式。优点:多个view共享一个Model。View负责负责格式化并把他们呈现给用户,业务逻辑和表示层分离,同一个Model可以被不同的View重用,...原创 2019-10-31 22:33:43 · 741 阅读 · 0 评论 -
PHP:开篇,世界上最好的语言底层是怎么运行的
PHP在业界被调侃,是世界上最好的语言,PHP确实是Web开发里的利器,具体点说,就是一个用C语言实现包含大量组件模块的软件框架。是一个强大的UI框架。PHP动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,因此最终调用的也是C的函数,实际上,我们可以把PHP看做一...原创 2019-08-12 09:57:37 · 827 阅读 · 0 评论 -
PHP:详解理解PHP变量的底层原理
对程序的同学来说,变量不陌生,php的数据结构类型是不得不提的一件事儿,人按照年龄分有少年、青年、中年、老年,php也一样,有属于自己的分类。PHP是一门弱类型语言,本身不严格区分变量的类型。PHP在变量申明的时候不需要指定类型。PHP在程序运行期间可能进行变量类型的隐示转换。 和其他强类型语言一样,程序中也可以进行显示的类型转换。PHP变量可以分为简单类型(int、string、bool)...原创 2019-08-27 21:04:42 · 1872 阅读 · 3 评论 -
PHP:如何精准的定位和解决线上BUG
导弹,最重要的能力之一就是对敌对核心目标进行精准打击,摧毁核心中枢,一个优秀的工程师也是如此,快速定位线上的BUG,透过代码看本质。之前有很多时候,不要改一个BUG,产生新的BUG,这也是高耦合的业务线最难搞和搞定的地方。总结一下自己解决问题的方法,希望大家下次再处理BUG时,可以从容面对。client: 确定请求的IP和目标服务器遇到问题,尤其线上问题,dev,test,web6,onlin...原创 2019-09-10 14:29:26 · 2173 阅读 · 0 评论 -
PHP - 巧解对int整形模糊搜索的方法
遇到的问题:业务线对线索ID和电话号码进行模糊搜索,要解决的问题也就是 mysql中对int类型的数据进行模糊搜索,主要是考虑工作量和效率之间的关系,表数据200W左右表类型如下:CREATE TABLE `table_xxx_linkman` ( `customer_name` varchar(40) NOT NULL DEFAULT '' COMMENT '联系人姓名', `telep原创 2017-10-11 19:50:28 · 533 阅读 · 0 评论 -
PHP - String字符串的底层实现原理
大家都知道php是一个弱类型的语言,变量的类型是随着赋值的类型变化的,php的底层是用C写的,C本身是一个强类型的语言,那php在底层是怎么实现类型的呢?其实在底层,php是通过一个结构体来存储所有的变量的。结构体如下:typedef struct _zval_struct zvaltypedef struct _zval_struct { /* Variable inf转载 2015-03-04 11:20:50 · 1717 阅读 · 0 评论 -
PHP中streams流函数
提供PHP中streams函数列表如下:stream_bucket_append函数:为队列添加数据 stream_bucket_make_writeable函数:从操作的队列中返回一个数据对象stream_bucket_new函数:为当前队列创建一个新的数据stream_bucket_prepend函数:预备数据到队列 stream_context_create函数:创建数据流上下文...原创 2019-07-23 10:11:44 · 607 阅读 · 0 评论 -
php socket通信(tcp/udp)
php socket通信(tcp/udp)注意1.在socket_bind的时候ip地址不能真回环地址如127.0.0.12.server.php后台跑起来的时候 nohup php server.php > /var/tmp/a.log 2>&1 &一: udp 方式server.php <?php //error_reportin...转载 2019-07-20 12:21:36 · 951 阅读 · 0 评论 -
PHP - 提取字符串中的中文字符串
[PolicyHolder] =&gt; Array ( [PolicyHolderType] =&gt; I [PolicyHolderName] =&gt; 那 NA 英 YING [PHIdType] =&gt; 2 [PHIdNumber] =&gt; G2323892 ...原创 2018-10-23 20:32:30 · 6845 阅读 · 0 评论 -
PHP - Cannot find config.m4用 phpize 编译共享 PECL 扩展库
关于phpize是干嘛用的,可以参看php官方文档:http://php.net/manual/zh/install.pecl.phpize.php前几日想安装Xdebug的时候,需要为php安装Xdebug扩展,按照网上教程的步骤一步步执行时却报了如下错误:需要执行的命令: phpize (备注 在php模块里执行 我的环境自己加在环境变量里了 根据自定义原创 2017-03-18 16:51:02 · 1101 阅读 · 0 评论