-
Notifications
You must be signed in to change notification settings - Fork 0
/
php-基本构成
53 lines (31 loc) · 1.91 KB
/
php-基本构成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
1.1 php 构成
php源码下主要目录
sapi
php应用层接口
main
输入/输出, web通信以及框架初始化操作 例如fastcgi协议得解析, 扩展得加载, php配置得解析都在这一步工作完成得,位于zendvm得上一层
zend
php解析器得主要实现,php代码得解释,执行都时由zeng完成 主要由编译器, 执行器组成
编译器负责将php代码解释为执行器可识别得指令,执行器负责编辑器解释出来得指令
ext
php扩展目录, tsrm 为线程安全相关的实现
1.2 生命周期
1.2.1 模块初始化阶段(module startup)
zeng 引擎初始化阶段,入口函数为php_module_startup() 位于main目录下面 main.c里面
主要处理包括如下
激活sapi : sapi_activate() 初始化请求信息 设置post请求得handler 在module_startup阶段处理完成后调用 sapi_deactivate()
启动php输出 php_output_startup()
初始化垃圾回收期 gc_globals_ctor() 分配zend_gc_globals内存
启动zend引擎 zend_startup() 主要操作如下
启动内存池 start_memory_manager()
设置zend 虚拟机编译 执行器得函数句柄 (zend_compile_file)
注册zend核心扩展 zend_startup_builtin_functions() 这个扩展是内核提供, 注册strlen,define,class_exists等函数
解析php.ini 配置保存在configuration_hash哈希表中
注册静态扩展
注册动态扩展 php_ini_register_extension() 将php.ini中得扩展加载到php中
请求初始化阶段(request startup)
执行脚本阶段(execute script)
解释php代码,执行器执行解释过得可识别得指令
请求关闭阶段(request shutdown)
将flush输出内容,发送http应答head头,清理全局变量,关闭编译器,关闭执行器
模块关闭阶段(module shutdown)