php 是解释型语言,其执行过程需先编译成中间代码,再经由特定的虚拟机,翻译成特定的指令被执行。其执行过程如下: 各个步骤内容如下: 基于语法分析器将 Token 转换成抽象语法树(AST) AST 是 PHP7 版本的新特性,之前版本的 PHP 代码的执行过程中是没有生成 AST 这一步的。它的作用主要是实现了 PHP 编译器和解释器的解耦,提升了可维护性。 将语法树转换成 Opcode 立即学习“PHP免费学习笔记(深入)”; 执行 Opcodes PHP7 内核架构 zend 引擎 这是一套由淘掌门(taozhangmen.net)衍生出来的一个拍拍客系统!这套程序也继承了淘掌门的特点:永久免费开源!无任何时间限制、功能限制、域名限制。 程序相对于淘掌门原型,已去除返利、会员系统、文章系统等。 如果需要文章,可单独下载其他的文章系统,做子目录,效果可能会更好。 程序安装过程与淘掌门相同: 下载上传到空间,执行 你的网址/install.php 安装完成后,登陆后台修改拍拍AP PHP 层 SAPI 扩展部分 PHP 7 源码结构 main 目录 ext 目录 TSRMphp 代码 => token => 抽象语法树 => opcodes => 执行
源代码通过词法分析得到 Token
Token 是 PHP 代码被切割成的有意义的标识。PHP7 一共有 137 种 Token,在 zend_language_parser.h 文件中做了定义。
Token 就是一个个的词块,但是单独的词块不能表达完整的语义,还需要借助一定的规则进行组织串联。所以就需要语法分析器根据语法匹配 Token,将 Token 进行串联。语法分析器串联完 Token 后的产物就是抽象语法树(AST,Abstract Syntax Tree)。
需要将语法树转换成 Opcode,才能被引擎直接执行。
opcodes 是 opcode 的集合形式,是 PHP 执行过程中的中间代码。PHP 工程优化措施中有一个比较常见的 “开启 opcache”,指的技术这里将 opcodes 进行缓存。通过省去从源码到 opcode 的阶段,引擎直接执行缓存好的 opacode,以提升性能。
词法 / 语法分析、AST 编译和 opcodes 的执行均在 Zend 引擎中实现。此外,PHP 的变量设计、内存管理、进程管理等也在引擎层实现。
zend 引擎为 PHP 提供基础能力,而来自外部的交互则需要通过 PHP 层来处理。
server API 的缩写,其中包含了场景的 cli SAPI 和 fpm SAPI。只要遵守定义好的 SAPI 协议,外部模块便可与 PHP 完成交互。
依据 zend 引擎提供的核心能力和接口规范,可以进行开发扩展。
php 7 的源码主要目录有:sapi 、Zend、main、ext 和 TSRM 这几个。
sapi 目录
sapi 目录是对输入和输出层的抽象,是 PHP 提供对外服务的规范。
几种常用的 SAPI:
1)apache2handler: Apache 扩展,编译后生成动态链接库,配置到 Apache 下。当有 http 请求到 Apache 时,根据配置会调用此动态链接库来执行 PHP 代码,完成与 PHP 的交互。
2)cgi-fcgi: 编译后生成支持 CGI 协议的可执行程序,webserver(如 NGINX)通过 CGI 协议把请求传给 CGI 进程,CGI 进程根据请求执行相应代码后将执行结果返回给 webserver。
3)fpm-fcgi: fpm 是 FastCGI 进程管理器。以 NGINX 服务器为例,当有请求发送到 NGINX 服务器,NGINX 按照 FastCGI 协议把请求交给 php-fpm 进程处理。
4)cli: PHP 的命令行交互接口
Zend 目录
Zend 目录是 PHP 的核心代码。PHP 中的内存管理,垃圾回收、进程管理、变量、数组实现等均在该目录的源码里。
main 目录是 SAPI 层和 Zend 层的黏合剂。Zend 层实现了 PHP 脚本的编译和执行,sapi 层实现了输入和输出的抽象,main 目录则在它们中间起着承上启下的作用。承上,解析 SAPI 的请求,分析要执行的脚本文件和参数;启下,调用 zend 引擎之前,完成必要的模块初始化等工作。
ext 是 PHP 扩展相关的目录,常用的 array、str、pdo 等系列函数都在这里定义。
TSRM(Thread Safe Resource Manager)—— 线程安全资源管理器, 是用来保证资源共享的安全。
0
0
相关文章
Ubuntu 20.04上安装PHP7.4教程最新
Windows 10下PHP7.4环境搭建与IIS配置实战
PHP7.4 GD库编译安装与图像处理实战
PHP7.4与MySQL 8.0权限认证问题解决方案
php7.4升级到安全版本
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门AI工具
相关专题
nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。
246
2023.07.27
Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。
522
2023.08.04
tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
244
2024.02.23
当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。
693
2024.07.09
解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。
3618
2024.08.07
本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。
3
2026.03.11
热门下载
精品课程




