- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 HTTP服务七层架构技术探讨
玉面修罗 http://weibo.com/kalon前言:太久没有做过技术分享了,这里把曾经老的新浪论坛里面使用过的架构技术做了改进和整理,最后总结了这么一篇,欢迎拍砖。1.为什么分层? 计算机领域的体系结构普遍采用了分层的方式。 从整体结构来看: 从最底层的硬件往高层依次有操作系统->驱动程序->运行库->系统程序->应用程序等等。
2012-03-08 13:21:09 44886 47
原创 zend_execute: op执行过程详解
解释器引擎最终执行op的函数是zend_execute,实际上zend_execute是一个函数指针,在引擎初始化的时候zend_execute默认指向了execute,这个execute定义在zend_vm_execute.h:ZEND_API void execute(zend_op_array *op_array TSRMLS_DC){ zend_execute_data *execute_data; zend_bool nested = 0; zend_bool origin
2010-07-08 16:49:00 9990 2
原创 PHP多线程版本HASH漏洞攻击工具
漏洞相关信息: http://www.laruence.com/2011/12/30/2435.html 系统要求:linux操作系统,PHP版本5及以上cli模式,多进程模式需要pctnl扩展支持。 使用方式: 下载附件并解压,例如解压到 /usr/local/kalondos目录下 假如PHP命令路径为:/usr/local/php5/bin/php
2011-12-31 19:24:42 4231
原创 KalonQue文档
1.关于KalonQue KalonQue一款完全基于PHP语言开发的队列软件产品。队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。通过KalonQue可以将复杂的业务同步转异步以及异步转同步: 1.当业务由同步转为异步的时候,业务会拥有更高的处理效率,响应速度更
2011-07-15 17:23:50 3453
原创 KalonDaemon - 守护进程PHP版
声明:这篇文章是我09年的时候发表在自己的之前的BLOG上的,属于原创内容,现在将文章转移到这里。守护进程也称精灵进程(daemon),是生存期较长的一种进程。它们常常用在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。UNIX类操作系统有很多的守护进程,它们执行日常事务活动。目前有大量的web站点基与PHP开发,业务逻辑都是由PHP来实现,很多时候我们也需要一个PHP的daemon来做一些日常事务,例如我们想每隔一个小时统计一下数据库中的某项数据,每天定期的执行一些备
2011-06-01 12:41:00 6228 1
原创 神秘的变量名特性
在PHP语言中,变量都是保存在哈希表中,称为变量符号表,其中变量名为哈希表的键,变量名对应的容器zval的指针为哈希表中的值。所有全局变量放在一张主符号表中(也就是数组$GLOBALS对应的哈希表)。PHP语言有个特性,变量在命名时,$变量标识符后不能以数字开头。例如我们在以下代码:$111= "my";?>会报如下错误:Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in...从错误的描叙来看
2010-07-20 16:32:00 4344 1
原创 PHP新的垃圾回收机制:Zend GC详解
在5.2及更早版本的PHP中,没有专门的垃圾回收器GC(Garbage Collection),引擎在判断一个变量空间是否能够被释放,是依据这个变量的zval的refcount是否为0,如果refcount为0,那么变量的空间可以被释放,否则就不释放,这是一种非常简单的GC实现。然而在这种简单的GC实现方案中,出现了意想不到的变量内存泄漏情况,而且引擎无法回收这些内存,于是在PHP5.3中出现了新的GC,新的GC有专门的GC机制负责清理垃圾数据,防止内存泄漏。本文将详细的阐述PHP5.3中新的GC运
2010-07-14 16:14:00 22171 18
原创 变量的内部存储:引用和计数
在引擎内部,一个PHP的变量是保存在“zval”结构中,此结构包含了变量的类型和值信息,这个在之前的文章 PHP变量如何实现弱类型特性 中已经介绍了,此结构还有另外两个字段信息,一个是"is_ref"(此字段在5.3.2版本中是is_ref__gc),此字段是一个布尔值,用来标识变量是否是一个引用,通过这个字段,PHP引擎能够区分一般的变量和引用变量。PHP代码中可以通过 & 操作符号来建立一个应用变量,建立的应用变量内部的zval的is_ref字段就为1。zval中还有另外一个字段refcoun
2010-07-13 21:17:00 7584 5
原创 OPcode简介
运行一段PHP代码主要有两个阶段:编译和执行, 当然编译过程中还包括词法分析语法分析不同阶段和细节,这里我们将其作为一个整体。在这两个阶段之间,PHP代码会被编译成op code,可以将其认为是引擎的一个中间语言,编辑阶段把PHP源码生成op code,然后在执行阶段执行这些op code。这篇文章将简单的介绍op code。 PHP代码编译之后会生成许多的op,每一个op都是一个zend_op类型的c变量。相关的定义可以在{PHPSRC}/Zend/zend_compile.h中看到:str
2010-07-08 15:28:00 8025
原创 源码分析必备:用vld查看opcode信息
VLD(Vulcan Logic Dumper)的简介如下:The Vulcan Logic Dumper hooks into the Zend Engine and dumps all the opcodes (execution units) of a script. It can be used to see what is going on in the Zend Engine.
2010-07-07 14:32:00 9651 2
原创 变量的内部存储:值和类型
PHP是一种弱类型的脚本语言,弱类型不表示PHP的变量没有类型区分,PHP变量有8种原始类型:四种标量类型: boolean(布尔型) integer(整型) float(浮点型,也作“double”) string(字符串) 两种复合类型: array(数组) object(对象) 两种特殊类型: resource(资源) NULL一个变量能在运行期间从一种类型转换为另一种类型,那么PHP是如何实现这种变量的类型戏法的呢?
2010-07-07 11:16:00 5134 1
原创 PHP解释器引擎执行流程
这里将介绍引擎内部执行一段PHP代码的流程,以cli SAPI为例子来对流程中核心的部分做简单介绍,省去一些初始化及清理操作。 cli(Command Line Interface)即PHP的命令行模式,现在此SAPI是默认安装的,我们在服务器上安装完PHP之后,一般会生成一个可执行文件,假设此文件为/usr/local/bin/php ,那么我们在SHELL下可以用以下命令来执行一个PHP脚本:/usr/local/bin/php test.php这个命令将执行当前目录下的test.php脚
2010-07-06 16:06:00 18136 2
原创 PHP代码如何被执行?
众所周知,计算机(具体是CPU)只能执行二进制的机器码,每种CPU都有对应的汇编语言,汇编语言编译器将汇编语言翻译成二进制的机器语言,然后CPU开始执行这些机器码。汇编语言作为机器语言与程序设计者之间的一个层,给我们带来了很多方便,程序员不需要用晦涩的01数字来书写程序,当然人们并不满足这样的一个进步,于是在汇编语言之上又多了一个层-C语言,C语言更贴近人类熟悉的“自然语言”,程序设计者可以通过C语言编译器将C源代码文件编译成目标文件(二进制文件,中间会先翻译成汇编语言,然后由汇编语言生成机器码),
2010-07-05 18:15:00 15751 7
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人