专业网站制作企业,汕头企业建站系统模板,最新的产品代理有哪些,重庆工业建设网站一、PHP开源源代码下载地址#xff1a; 
https://github.com/php/php-src.git 二、PHP的构成 
1、目录结构 2、目录分析 
#xff08;1#xff09;sapi目录是PHP的应用接口层。 
#xff08;2#xff09;main为php的主要代码#xff0c;主要是输入/输出、Web通信、PHP框架…一、PHP开源源代码下载地址 
https://github.com/php/php-src.git 二、PHP的构成 
1、目录结构 2、目录分析 
1sapi目录是PHP的应用接口层。 
2main为php的主要代码主要是输入/输出、Web通信、PHP框架的初始化操作等比如fastcgi协议的解析、扩展的加载、PHP配置的解析等工作都是在这里完成的。 
3Zend目录是PHP解析器的主要实现即ZendVM它是PHP语言的核心实现PHP代码的解释、执行都是由Zend完成的。 
4ext目录是PHP的扩展目录比如php的curl扩展gd库扩展、pdo扩展等都是在这里。 
5TSRM目录为线程安全相关的实现。 
6PHP各组成部分之间关系图 3、SAPI 
1PHP是一个脚本解析器提供脚本的解析与执行。它的输入是普通的文本然后由PHP解析器按照预先定义好的语法规则进行解析执行。我们可以在不同环境中应用这个解析器比如命令行下、Web环境下、嵌入其他应用中使用。为此PHP提供了一个SAPI层以适配不同的应用环境SAPI可以认为是PHP的宿主环境。 
2SAPI也是整个PHP框架最外层的一部分它主要负责PHP框架的初始化工作。SAPI代码位于PHP源码的 /sapi 目录下经常用到的两个SAPI是Cli和Fpm。 4、ZendVM 
1ZendVM是一个虚拟的计算机它介于PHP应用和实际计算机中间我们编写的PHP代码就是被它解释执行的。ZendVM是PHP语言的核心实现他主要由两部分组成编译器和执行器。 
2编译器负责将PHP解释为执行器可识别的指令执行器负责执行编译器解释出的指令。 
3ZendVM的角色等同于Java中的JVM它们都是抽象出的虚拟计算机。 5、Extension 
1扩展是PHP内核提供的一套用于扩充PHP功能的一种方式PHP社区中有丰富的扩展可供使用这些扩展为PHP提供了大量实用的功能PHP中很多操作的函数都是通过扩展提供的。 
2通过扩展我们可以使用C/C实现更强大的功能和更高的性能。扩展分为PHP扩展和Zend扩展PHP扩展比较常见而Zend扩展主要应用于ZendVM我们所熟知的Opcache就是Zend扩展。 三、PHP生命周期 
1、PHP的整个生命周期被划分为以下几个阶段 
1模块初始化阶段module startup 
2请求初始化阶段request startup 
3脚本执行阶段execute sccript 
4请求关闭阶段request shutdown 
5模块关闭阶段module shutdown 
注根据不同SAPI的实现各阶段的执行情况会有一些差异比如命令行模式下每次执行一个脚本都会完成的经历这些阶段。而FastCgi模式下则在启动时执行一次模块初始化然后各个请求只经历请求初始化脚本执行请求关闭几个阶段在SAPI关闭时才经历模块关闭阶段。 2、模块初始化阶段—分析 
1这个阶段主要进行PHP框架和Zend引擎的初始化操作。该阶段的入口函数为php_module_startup()。这个阶段一般只在SAPI启动时执行一次对于Fpm而言就是在Fpm的master进程启动时执行的。 
2该阶段的几个主要处理如下 
3激活SAPIsapi_activate()初始化请求信息SGrequest_info、设置读取POST请求的handle等。 
4启动PHP输出php_output_startup() 
5初始化垃圾回收器gc_globals_ctor()并分配zend_gc_globals内存。 
6启动Zend引擎zend_startup()主要操作包括 6.1启动内存池 start_memory_manager() 6.2设置一些util函数句柄如zend_error_cb、zend_pringf、zend_write等。 6.3设置Zend虚拟机编译、执行器的函数句柄zend_compile_file、zend_execute_ex、垃圾回收函数句柄gc_collect_cycles 6.4分配函数符号表 方法符号表function_table、类符号表class_table、常量符号表zend_constants等如果是多线程的话还会分配编译器、执行器的全局变量。 6.5注册Zend核心扩展zend_startup_builtin_funtions()这个扩展是内核提供的该过程将注册Zend核心扩展提供的函数如strlen、define、func_get_args、class_exists等。 6.6注册Zend定义的标准常量zend_register_standard_constants()比如 E_ERROR、E_WARNING、E_ALL、TRUE、FALSE等。 6.7注册$GLOBALS超全局变量的获取handle。 6.8分配php.ini配置的存储符号表 EGini_directives。 
7注册PHP定义的常量PHP_VERSION、PHP_ZTS、PHP_SAPI等。 
8解析php.ini解析完成后所有的php.ini配置保存在configuration_hash哈希表中。 
9映射PHP、Zend核心的php.ini配置根据解析出的php.ini获取对应的配置值将最终的配置插入EGini_directives哈希表。 
10注册用于获取$_GET、$_POST、$_COOKIE、$_SERVER、$_ENV、$_REQUEST、$_FILES变量的handle。 
11注册静态编译的扩展php_register_internal_extensions_func()。 
12注册动态加载的扩展php_init_register_extensions()将php.ini中配置的扩展加载到PHP中。 
13回调各扩展定义的module startup钩子函数即通过PHP_MINIT_FUNCTION()定义的函数。 
14注册php.ini中禁用的函数、类disable_funstions、disable_classes。 3、请求初始化阶段—分析 
该阶段是在请求处理前每一个请求都会经历的一个阶段。对于fpm而言是在worker进程accept一个请求且获取、解析完请求数据后的一个阶段。该阶段的处理函数为php_request_startup()。 
主要处理有以下几个 
1激活输出php_output_activate() 
2激活Zend引擎zend_activate()主要操作有 2.1重置垃圾回收器gc_reset() 2.2初始化编译器ini_compiler() 2.3初始化执行器ini_exexutor()将 EGfunction_table和 EGclass_table分别执行 CGfunction_table和CGclass_table。 2.4初始化全局变量符号表 EGsymbol_table、include过的文件符号表 EGincluded_files 2.5初始化词法扫描器sapi_activate() 
3激活SAPIsapi_activate() 
4回调个扩展定义的request startup钩子函数zend_activate_modules() 4、脚本执行阶段—分析 
1该阶段包括PHP代码的编译、执行两个核心阶段这也是Zend引擎最重要的功能。 
2在编译阶段PHP脚本将经历从PHP源代码到抽象语法树再到opline指令的转化过程最终生成的opline指令就是Zend引擎可识别的执行指令这些指令被执行器执行这就是PHP代码解释执行的过程。该阶段入口函数为php_execute_script()。 5、请求关闭阶段—分析 
1该阶段将flush输出内容、发送HTTP应答header头、清理局部变量、关闭编译器、关闭执行器等。 
2另外在该阶段将回调各扩展的request shutdown钩子函数。 
3该阶段与请求初始化阶段操作是相反的。 6、模块关闭阶段—分析 
该阶段在SAPI关闭时执行与模块初始化阶段对应主要进行资源的清理、PHP各模块的关闭操作同时将回调各扩展的 module shutdown 钩子函数。 注免费领取阿里云产品优惠券https://www.haveyb.com/aliyun