关闭

PHP - 类自动加载机制

PHP类自动加载机制被广泛运用到各个PHP框架中,在面向对象开发中,使用一套自动加载机制来管理我们的类库将会非常方便,从而减少使用前逐个引入包文件的痛苦。PHP提供了两种注册自动加载的方式:__autoload 和 spl_autoload_register。下面将介绍这两个函数在PHP的实现。__autoload 当我们在PHP脚本定义__autoload函数时,PHP在编译阶段调用zend_d...
阅读(205) 评论(0)

PHP - FPM信号机制

熟悉PHP-FPM的童鞋应该都知道它采用master/worker多进程架构设计,我们可以通过执行"xxx/sbin/php-fpm stop"或"xxx/sbin/php-fpm reload"停止或重新加载fpm。那么它究竟是怎样运作呢? 简单来说,其运用了信号机制来实现相应的功能。当我们执行"stop"命令时,系统向fpm进程发送停止信号,当我们执行"reload"命令时,系统向fpm进程发送SIGUSR...
阅读(672) 评论(0)

PHP - 垃圾回收机制

关于PHP垃圾回收机制(简称GC),网上已经有很多相关资料。之所以决定写这篇文章,主要是为了加深自己对PHP垃圾回收机制的理解。当然,如果能帮助到其他人理解,也不失为一件快事。 PHP5.3及以上版本使用了新垃圾回收机制。我们可以通过修改php.ini配置开启或关闭GC机制(默认是打开状态)。zend.enable_gc = OnGC数据结构typedef struct _gc_root_buff...
阅读(199) 评论(0)

Redis2.6 - publish/subscribe的BUG

前一段时间由于业务需要,我们需要搬迁服务器到新机房。为了保证系统平滑过渡,我们分成多批搬迁。迁移工作总体还算顺利,期间也遇到了一点点小挫折。下面将介绍我印象最为深刻的一个BUG:redis2.6的publish/subscribe。 进入主题,首先介绍下业务场景及问题。 业务场景 我们生产环境使用的redis是2.6版本,redis集群只有两台服务器,一主(A)一从(B)。 制定的redi...
阅读(338) 评论(0)

PHP - 内存管理

前面几篇文章主要介绍PHP-FPM,沿着”FPM运行原理->运行模式->进程管理->定时事件”方向,我们对FPM已经有了一个较为深刻的认识。今天这篇文章将介绍PHP的另一核心功能,内存管理。很多开源软件都有一套自己维护的内存管理体系,例如,nginx。php作为世界上“最好”的语言,当然也不例外。PHP内存管理功能,简单来说,就是申请一块大的内存来管理自己的内存结构;代码非常之精巧,其使用“内存对齐...
阅读(240) 评论(0)

PHP-max_execution_time与fpm.request_terminate_timeout介绍

前段时间一位同事跟我说php脚本超时时间以fpm配置优先。经过自己测试后,其实不然,上面的观点只是在某些情况下成立。php脚本超时时间可以在php.ini的max_execution_time和fpm.conf的request_terminate_timeout参数两处进行设置.那么这两者有什么区别呢?当我们设置php.ini的max_execution_time参数后,zend引擎处理脚本时,其内...
阅读(1749) 评论(1)

PHP源码分析 - PHP-FPM定时事件

PHP-FPM分别使用IO和定时两种事件来保证系统流畅的运转。IO事件负责收集客户端请求、主进程及子进程信号等操作。定时事件负责辅助型任务的处理,其内部定义fpm_pctl_perform_idle_server_maintenance_heartbeat 和 fpm_pctl_heartbeat两个定时事件,fpm_pctl_perform_idle_server_maintenance_hea...
阅读(296) 评论(0)

PHP源码分析 - PHP-FPM scoreboard模块介绍

fpm_scoreboard(以下简称scoreboard模块)是PHP-FPM核心功能之一,源码位于sapi/fpm/fpm_scoreboard.c。从字面意思理解是一个”记分器”,也就是说它是一个类似统计功能的模块。网上关于这方面的资料较少,经过不断地反复阅读以及推敲,脑海中已经有了一个比较清晰的轮廓。scoreboard模块定义fpm_scoreboard_s和fpm_scoreboard_...
阅读(412) 评论(0)

PHP源码分析 - PHP-FPM运行模式详解

前篇文章已经介绍PHP-FPM的运行原理。本文将细说PHP-FPM的运行模式。实际上,在上一篇文章简单提到过FPM运行模式,之所以把这块内容拉出单独讲解,笔者认为它是一个值得学习及借鉴的地方。FPM支持static、ondemand、dynamic三种运行模式。我们可以通过修改php-fpm.conf配置文件中的pm参数进行设置.static模式static:又称静态模式,该模式比较容易理解,即启动...
阅读(642) 评论(0)

PHP源码分析 - PHP-FPM运行原理

其实很早之前就有想过阅读PHP源码,主要还是自己比较懒散,意志不够坚定,一直无法静下心。最近不是很忙,趁着“短暂”的闲暇之余,翻看尘封已久的“PHP源码”文件。 我们知道web服务器与PHP应用之间通过SAPI接口进行交互数据。PHP提供了多种SAPI接口,例如 apache2hander、fastcgi、cli等等。当然,php-fpm也是其中一种。相比其他结构,php-fpm运用更加广泛,这...
阅读(3016) 评论(0)

CodeIgniter-内部运行流程

每当我们阅读一个优秀的框架/项目时,先要理清它的整个运行流程,才能掌握和理解它的真正设计含义。CodeIgniter(简称:CI)作为一款优秀的轻量级PHP框架,其特点:简洁又不失灵活。它的内部运作原理又是怎样的呢?CI的入口文件为index.php,核心代码位于system/Core/CodeIgniter.php.以下为笔者整理的CI运行流程图及部分主要模块的说明。 初始化系统运行环境 a)....
阅读(289) 评论(0)

CodeIgniter-&引发关于变量引用的思考

CodeIgniter是一个单例模式框架,源代码中大量使用‘&’引用,有两种原因:一方面基于兼容PHP4版本;另一方面是为了防止变量发生”写时复制”(copy on write)。借此机会,简单地介绍“PHP变量引用”原理。PHP源码使用zval结构定义变量:typedef struct _zval_struct zval; struct _zval_struct { zvalue_valu...
阅读(185) 评论(0)

CodeIgniter-Security的CSRF hash生成功能

Security/get_random_bytes()的功能是随机生成字符串,用于crsf验证的hash值。 ```php public function get_random_bytes($length) { if (empty($length) OR ! ctype_digit((string) $length)) { return FALSE; } // Unfort...
阅读(207) 评论(0)

CodeIgniter-Router的BUG(3.0.0版本)

好久没有更新Blog了,前一段时间在研究nginx源码。相比redis,nginx的代码量要多几倍,结构也比较复杂,稍后将补充nginx的源码分析。在研究nginx的同时,笔者也开始着手阅读CodeIgniter源码。CodeIgniter是一款非常流行且轻量级的框架。CodeIgniter,设计灵活,扩展性强,低耦合。在阅读源码CodeIgniter3.0.0的时候,笔者发现Router.php的...
阅读(174) 评论(0)

linux僵尸进程

定义僵死进程是指子进程退出时,父进程并未对其发出的SIGCHILD信号进行适当处理,导致子进程停留在僵死状态等待其父进程为其收尸,这个状态下的子进程就是僵死进程。 实例#include #include #include int main(int argc,char *argv[]){ int pid,i; pid =...
阅读(228) 评论(0)
21条 共2页1 2 下一页 尾页
    个人资料
    • 访问:11218次
    • 积分:311
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论