201804-05 PHP内核分析之源码目录结构 (二) NEW 一、目录概览以php-7.4.1为例,目录多达十多个,下面介绍主要目录。├── build linux下编译相关的目录├── ext PHP的扩展├── main PHP的主要代码├── pear PHP扩展及应用的代码仓库├── sapi PHP的应用层接口├── scripts Linux下的脚本目录├── travis&n... Read More >
201804-02 PHP内核分析之GDB使用(一) NEW 1.PHP源码下载和安装https://github.com/php/php-src/releases$ ./configure --prefix=/usr/local/php7 --enable-debug --enable-fpm $ make && sudo make install2.环境工具介绍CENTOS 7.2PHP-7.4.1GDB  ... Read More >
201802-05 PHP中str_replace和preg_replace NEW PHP里字符串替换的函数,有str_replace()、str_ireplace()、substr_replace()、preg_replace()、strtr()等几个,程序员在写程序的时候,往往会根据自己的习惯以及实际情况选用其中一个或多个。这几个函数虽然都有字符串替换的功能,但它们无论从语法到作用,还是速度和效率上都有所不同,所以并非在任何场合都可以使用它们。preg_replace函数解释mixed preg_replace ( mixe... Read More >
201706-03 Windows下nginx+fastcgi+php的并发阻塞问题 同事接到一个需求,需要调用同一个项目的另一个接口,于是CURL调用接口。代码撸完了,本地测试一下 浏览器一直转圈圈直到超时…… 百思不得其解主要是windows+nginx开发环境遇到的问题,本人很少用windows开发所以也是第一次遇到,整理如下:问题描述:同一个项目中2个接口互相调用 api1 curl调用 api2 ,同时属于项目A问题原因:windows+nginx 其实无法真正的并行执行脚本,linux,mac下无问题,所以api1 cur... Read More >
201706-02 php闭包的优缺点 闭包函数:临时创建一个没有名称的函数,经常作为回调函数来用。通俗的说就是:子函数可以使用父函数中的局部变量,这种行为叫做闭包。我的理解是: 闭包就是能够读取其他函数内部变量的函数。匿名函数赋值$demo=function($str){ echo $str; } $demo('hello,world');闭包可以从父作用域中继承变量,任何此类型变量都应该用use语言结构传递进去。$message='hello'... Read More >
201706-01 PHP红包分配算法 <?php /** * User: phpmianshi.com * Date: 2020/3/31 * Time: 10:16 */ class redPack { /** * 测试红包生成... Read More >
201704-06 理解PHP中的Generator PHP中Generator,似乎是在5.5版中引入了。PHP中的协程必须依赖于Generator来实现,所以我觉得有必要先专门写一篇文章介绍Generator。Generator这个单词在这里对应的中文词语应该是“生成器”,在编程这个领域,我们可以把它想象成一个可以生成一系列数据的工具,这个工具可以具体为一个类、一个函数或者是一个语句(由特殊的关键字构成),而且事实上也确实如此。在PHP中Generator是由函数生成的,但这个函数又跟普通的函数不同,具体有什么不同等会会慢慢... Read More >
201704-06 PHP数组实际占用内存大小的分析 1.数组正常的赋值是不会发生内存改变的,但是当赋值的新数组发生改动的时候,php就会新开辟内存给新的数组,这里会造成无谓的内存消耗。最好是不要直接这样赋值,如果非赋值不可的话,记得加上‘&’符号,通过传引用直接传递地址给新数组,这样当新数组发生变化的时候,更改的还是原来的那块内存。2.在php程序中,只要传参,参数都会拷贝一份,所以值越大,耗的内存越大。针对这种情况,建议是在类里面定义全局变量,然后函数体里面通过:$this->repos来操作这个数组。也可以考... Read More >
201704-06 结构体对齐 书里给了一段代码,假如有个结构体如下:struct test { char a; int b; long c; void* d; int e; &... Read More >
201604-06 PHP对象使用数组形式访问成员变量 PHP中有很多接口类,不过平时都不会怎么用到.一般访问php类的变量都是使用类->变量名进行访问.除了这样还可以实现接口类用数组方式进行访问类["变量名"]需要实现的是ArrayAccess接口类并且实现这个接口的4个方法就可以了.//判断存在 public function offsetExists($offset); //获取时 public function offsetGet($offset);... Read More >
201504-11 PHP中max_execution_time设置不生效 问题描述:max_execution_time设置了1秒,但是发现超过3秒的脚本还是跑。于是深入研究下max_execution_time不生效的原因。官网描述:https://www.php.net/manual/zh/function.set-time-limit.phpset_time_limit()函数和配置指令max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中... Read More >
201504-10 Laravel神奇的服务容器 IoC 容器, laravel 的核心Laravel 的核心就是一个 IoC 容器,根据文档,称其为“服务容器”通过举例来让读者去理解什么是 IoC(控制反转) 和 DI(依赖注入)超人和超能力,依赖的产生!面向对象编程,有以下几样东西无时不刻的接触:接口、类还有对象。这其中,接口是类的原型,一个类必须要遵守其实现的接口;对象则是一个类实例化后的产物,我们称其为一个实例。我们把一个“超人”作为一个类,class Superma... Read More >
201504-09 php-fpm backlog参数优化 一、问题分析 1、分析php-fpm.slow.log发现没有执行慢的地方,然后把目光放到了nginx 与php建立连接的阶段上,使用tcpdump在服务器上抓包,发现性能差的机器上存在大量的SYN3秒超时,并且会伴有请求头的超时重传。如下图: 看来凶手已经找到了:是SYN 超时。一般SYN 超时是由于服务端backlog引起的,在我们的应用中,nginx –> p... Read More >
201504-08 php-fpm的优雅重启关闭 PHP 5.3.3 下的php-fpm 不再支持 php-fpm 以前具有的 /usr/local/php/sbin/php-fpm (start|stop|reload)等命令,需要使用信号控制:master进程可以理解以下信号INT, TERM 立刻终止QUIT 平滑终止USR1 重新打开日志文件USR2 平滑重载所有worker进程并重新载入配置和二进制模块示例:php-fpm 关闭:kill -INT `cat /usr/loc... Read More >
201504-07 php-fpm进程数优化看这一篇就够了 概念CGI:是 Web Server 与 Web Application 之间数据交换的一种协议。CGI(Common Gateway Interface)全称是“通用网关接口”,WEB 服务器与PHP应用进行“交谈”的一种工具FastCGI:同 CGI,是一种通信协议,但比 CGI 在效率上做了一些优化。同样,SCGI 协议与 FastCGI 类似。从根本上来说,FastCGI是用来提高CGI程序性能的。类似于CGI,FastCGI也可以说是一种协议。FastCGI像是一个... Read More >
201504-06 PHP中 array_walk array_map array_filter区别 array_walk:array_walk — 使用用户自定义函数对数组中的每个元素做回调处理1. 用户自定义的函数处理每一个元素2. 直接修改原数组,不会创建新的数组3. 可以传递额外的参数更多信息参考官方文档:http://php.net/manual/zh/function.array-walk.phparray_maparray_map — 为数组的每个元素应用回调函数1. 回调函数,应用到每个数组里的每个元素2. 可以处理多个数组,合并处理3. 返回新建的数组4.... Read More >
201504-05 通过 PHP OPcache 让你的 Laravel 应用运行速度飞起来 Laravel 优化介绍:https://segmentfault.com/a/11900000115690121.缓存配置信息 php artisan config:cache2.缓存路由信息 php artisan router:cache3.类映射加载优化 php artisan optimize4.自动加载优化 composer dumpautoload什么是 Opcache每一次执行 PHP 脚本的时候,该脚本都需要被编译成字节码,而 OPcache 可以对该字节码... Read More >
201504-04 PHP中const和static的区别和联系 1.const是类中的常量,类外用define定义常量2.const只可以修饰类的属性,不能修饰类的方法,static可以修饰属性,也可以修饰方法3.const和static都属于类本身,而不属于new后的类实例,类内访问使用self::,类外使用类名::来访问;类内的$this指代类实例本身,const和static是属于类本身,所以无法用$this访问4.self::NAME指代const,self::$name指代static;const是常量,是不需要变量符号的,st... Read More >
201504-03 PHP中self与static区别和联系 PHP官方也说过,大概意思是说self调用的就是本身代码片段这个类,static - PHP 5.3加进来的只得是当前这个类,有点像$this的意思,static调用的是从堆内存中提取出来,访问的是当前实例化的那个类,那么 static 代表的就是那个类,例子比较容易明白些。其实static就是调用的当前调用的类,比较抽象吧。self refers to the same class whose method the new operation takes place in.... Read More >
201504-02 PHP中如何实现进程间通讯 进程间通讯机制——IPC(Inter-Process-Communication)。为了使得php5可以使用共享内存和信号量,必须在编译php5程序时激活shmop和sysvsem这两个扩展模块。 实现方法:在PHP设定(configure)时加入如下选项。--enable-shmop --enable-sysvsem 这样就使得你的PHP系统可以处理相关的IPC函数了。 IPC是什么? IPC (Inter-process communication)... Read More >