[字号:  ]

PHP Life Cycle

发布时间:2008-8-20 20:31   作者: laruence   信息来源: PHPChina 开源社区门户
· 作者:laruence(http://www.laruence.com/)
· 本文地址: http://www.laruence.com/2008/08/15/283.html
· 转载请注明出处         
                        
作为一个PHPer,你知道你的代码最终是怎么样被执行的么?
你知道从一个请求的发起,到最后的得到结果,经过了那些步骤么?
你知道Zend虚拟机是什么么?
你知道PHP是怎么和Apache整合的么?
.......

呵呵,我来解答:

这是我上次给同事们做演讲的时候的PPT, 具体演讲内容等我回头整理了再放上来。

点击查看 PHP Life Cycle

[ 本帖最后由 laruence 于 2008-8-20 20:38 编辑 ]

最新回复

laruence at 2008-8-20 20:38:03
....

[ 本帖最后由 laruence 于 2008-11-21 16:24 编辑 ]
peacock at 2008-8-20 20:47:20
全E文的
laruence at 2008-8-20 21:41:40
啊? 没事,回头我把演讲稿整理下,发上来。
hobbs136 at 2008-8-20 22:15:23
可以写一个apache扩展的例子,一个php扩展的例子来演示这个东西。你这个演讲稿并未深入到目标代码一层。我猜想的是php的中间码应该不会是c,很可能是asm。希望大牛解答我这个问题。
leric at 2008-8-20 22:20:14
挺高端的技术啊,Yahoo的PHP还是自己改造过的啊
正打算把Memcache的PHP扩展包装一下,加上一个互斥锁,可以写个PHP的module试试,也练习一下写点儿C,估计还要向LZ请教哦
laruence at 2008-8-20 22:23:38

QUOTE:

原帖由 hobbs136 于 2008-8-20 22:15 发表
可以写一个apache扩展的例子,一个php扩展的例子来演示这个东西。你这个演讲稿并未深入到目标代码一层。我猜想的是php的中间码应该不会是c,很可能是asm。希望大牛解答我这个问题。
目标代码就是opcodes ,是zend 虚拟机的指令,是C
laruence at 2008-8-20 22:24:27

QUOTE:

原帖由 leric 于 2008-8-20 22:20 发表
挺高端的技术啊,Yahoo的PHP还是自己改造过的啊
正打算把Memcache的PHP扩展包装一下,加上一个互斥锁,可以写个PHP的module试试,也练习一下写点儿C,估计还要向LZ请教哦
没有问题,,,,
hobbs136 at 2008-8-21 17:38:47

QUOTE:

原帖由 laruence 于 2008-8-20 22:23 发表


目标代码就是opcodes ,是zend 虚拟机的指令,是C
目标代码是c?难道它又调用c的编译器?感觉这样做会不会慢呢。gcc似乎生成yas可读的asm,最后才是机器码。真是麻烦啊。
laruence at 2008-8-21 18:19:46
Zend vm是使用C写的么。。

当然,最终是会被编译成汇编,然后再变成机器语言被执行。

但从ZEND这一层来讲,opcode就是最终语言了。
hobbs136 at 2008-8-22 07:41:57
看起来opcode是所有语言的目标代码,就是不知道php解释器将php符号解释成什么,怎么处理我们的php文件中的原生函数和用户自定义函数。
laruence at 2008-8-22 10:23:11
ZE是一个虚拟机,正是由于它的存在,所以才能使得我们写PHP脚本,完全不需要考虑所在的操作系统类型是什么。ZE是一个CISC(复杂指令处理器),它支持150条指令(具体指令在 Zend/zend_vm_opcodes.h),包括从最简单的ZEND_ECHO(echo)到复杂的 ZEND_INCLUDE_OR_EVAL(include,require),所有我们编写的PHP都会最终被处理为这150条指令(op code)的序列,从而最终被执行。
而这150条指令就是Opcode,类似于Java的ByteCode,或者.NET的MSL。
leric at 2008-8-22 13:00:23
那么PHP的扩展可是C写的,已经编译成二进制的东西,opcode是不是有也有像汇编里的中断一样的指令,来调用一个包含了所有全局扩展函数的中断向量表里的函数,把执行权交给外部的代码,呢?
laruence at 2008-8-22 13:01:58
聪明!!

内部的函数执行有俩种:

# 一种是zend_internal_function, 这种函数是由扩展或者Zend/PHP内核提供的,用’C/C++’编写的,可以直接执行的函数。
# 另外一种是zend_user_function, 这种函数呢,就是我们经常在见的,用户在PHP脚本中定义的函数,这种函数最终会被ZE翻译成opcode array来执行

楼上的基础很好啊,呵呵
stefenjun at 2008-8-26 11:29:18
看题目真有趣
下了。。晚上看看
slawdan at 2008-11-21 13:29:23
楼主是cn.yahoo的啊

厉害厉害~~有c扩展问题的时候就请教您啦
quanhaier at 2008-11-24 16:24:19
需要有高手研究这些东西