6.PHP内核探索:Zend引擎】的更多相关文章

我们从未手动开启过PHP的相关进程,它是随着Apache的启动而运行的.PHP通过mod_php5.so模块和Apache相连(具体说来是SAPI,即服务器应用程序编程接口). PHP总共有三个模块:内核.Zend引擎.以及扩展层. PHP内核用来处理请求.文件流.错误处理等相关操作: Zend引擎(ZE)用以将源文件转换成机器语言,然后在虚拟机上运行它: 扩展层是一组函数.类库和流,PHP使用它们来执行一些特定的操作. 比如,我们需要mysql扩展来连接MySQL数据库: 当ZE执行程序时可能…
相信很多人都听说过 Zend Engine 这个名词,也有很多人知道 Zend Engine 就是 PHP 语言的核心,但若要问一句:Zend Engine 到底存在于何处?或者说,Zend Engine 究竟是在什么时候怎么发挥作用让 PHP 源码输出我们想要的东西的? Zend引擎是PHP实现的核心,提供了语言实现上的基础设施.例如:PHP的语法实现,脚本的编译运行环境, 扩展机制以及内存管理等,当然这里的PHP指的是官方的PHP实现(除了官方的实现, 目前比较知名的有facebook的hi…
本文参考自<深入理解PHP内核>,地址:https://github.com/reeze/tipi 本文链接:http://www.orlion.ml/232/ 1.SAPI接口 SAPI(Server Application Programming Interface)指的是PHP具体应用的编程接口.PHP脚本要执行可以用很多种方式:通过web服务器.命令行.嵌入到其他程序中. 虽然通过web服务器和命令行程序执行脚本看起来很不一样,但是实际的流程是一样的.只不过是web服务器方式是将php…
首先来讲,一般我们对"左值"的理解就是可以出现在赋值运算符的左侧的标识符,也就是可以被赋值.这样讲也许并不十分确切,在不同的语言中对左值的定义也不尽相同.在这里我们讨论前置递增(和递减)运算符的场景下,说前置递增需要返回左值,更简明的来讲就是要返回变量自身,或者自身的引用. 一.分析问题 在PHP中遇到这个问题,最初是因为写了类似如下的代码: <?php function func01(&$a) { echo $a . PHP_EOL; $a += 10; } $n =…
PHP内核探索:从SAPI接口开始 PHP内核探索:一次请求的开始与结束 PHP内核探索:一次请求生命周期 PHP内核探索:单进程SAPI生命周期 PHP内核探索:多进程/线程的SAPI生命周期 PHP内核探索:Zend引擎 PHP内核探索:再次探讨SAPI PHP内核探索:Apache模块介绍 PHP内核探索:通过mod_php5支持PHP PHP内核探索:Apache运行与钩子函数 PHP内核探索:嵌入式PHP PHP内核探索:PHP的FastCGI PHP内核探索:如何执行PHP脚本 PH…
切,一个字符串有什么好研究的. 别这么说,看过<平凡的世界>么,平凡的字符串也可以有不平凡的故事.试看: (1)       在C语言中,strlen计算字符串的时间复杂度是?PHP中呢? (2)       在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何? 同样是字符串,为什么c语言与C++/PHP/Java的均不相同? 数据结构决定算法,这句话一点不假. 那么我们今天就来掰一掰,PHP中的字符串结构,以及相关字符串函数的实现. 一.  字符串基础 字符串可以说是PHP中…
年前因为工作比较饱和,现在又忙着换工作的事情,基本停止了对博文的更新.后续的博文,还是慢慢补上吧. 为了不至于过于发散,先搞个未成形的大纲,如下: PHP内核探索之变量  不平凡的字符串 PHP内核探索之变量  变量的生命周期.类型转换 PHP内核探索之变量  变量的循环(foreach,其实放到Zend部分更加合理一些) PHP内核探索之SAPI  (比较疑惑,为什么这么靠后? ) PHP内核探索之函数  (函数实现原理.用户函数和系统函数,性能) PHP内核探索之扩展  (扩展的生命周期,扩…
本文主要内容: 引论 符号表与zval 引用原理 回到最初的问题 一.引论 很久之前写了一篇关于引用的文章,当时写的寥寥草草,很多原理都没有说清楚.最近在翻阅Derick Rethans(home: http://derickrethans.nl/ Github: https://github.com/derickr)大牛之前做的报告时,发现了一篇讲解PHP引用机制的文章,也就是这个PDF.文中从zval和符号表的角度讲解了引用计数.引用传参.引用返回.全局参数等的原理,洋洋洒洒,图文并茂,甚是…
作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字.数组.字符串.对象还是其他,因而可以说变量是构成语言的不可或缺的基础.本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括如下几个方面的内容: Zval的基本结构 查看zval的方法:debug_zval_dump和xdebug Zval的原理,COW等 由于写作仓促,难免会有错误,欢迎指出. 一.Zval的基本结构 Zval是PHP中最重要的数据结构之一(另一个比较重要的数据结构是hash table),它包含了PH…
最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结构存储). 理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何…