PHP内核-Zend引擎的详解

【走进php内核】之 Zend引擎执行过程 Zend引擎主要包含两个核心部分:编译、执行: 前面分析了Zend的编译过程以及PHP用户函数的实现,接下来分析下Zend引擎的执行过程。 1 数据结构 执行流程中有几个重要的数据结构,先看下这几个结构。 1.1 opcode opcode是将PHP代码编译产生的Zend虚拟机可识别的指令,php7共有173个opcode,定义在zend_vm_opcodes.h中,PHP中的所有语法实现都是由这些opcode组成的。 struct _zend_op { const void *h 阅读详情

在前面的章节介绍了PHP的生命周期,PHP的SAPI,SAPI处于PHP整个架构较上层,而真正脚本的执行主要由Zend引擎来完成, 这一小节我们介绍PHP脚本的执行。

目前编程语言可以分为两大类:

  • 第一类是像C/C++, .NET, Java之类的编译型语言, 它们的共性是: 运行之前必须对源代码进行编译,然后运行编译后的目标文件。

  • 第二类比如:PHP, Javascript, Ruby, Python这些解释型语言, 他们都无需经过编译即可"运行",虽然可以理解为直接运行

但它们并不是真的直接就被能被机器理解, 机器只能理解机器语言,那这些语言是怎么被执行的呢, 一般这些语言都需要一个解释器, 由解释器来执行这些源码, 实际上这些语言还是会经过编译环节, 只不过它们一般会在运行的时候实时进行编译。为了效率,并不是所有语言在每次执行的时候都会重新编译一遍, 比如PHP的各种opcode缓存扩展(如APC, xcache, eAccelerator等),比如Python会将编译的中间文件保存成pyc/pyo文件, 避免每次运行重新进行编译所带来的性能损失。

 

1

2

3

4

<?php

$str = "Hello, Tipi!\n";

echo $str;

?>

 

 

PHP的脚本的执行也需要一个解释器, 比如命令行下的php程序,或者apache的mod_php模块等等。 前一节提到了PHP的SAPI接口, 下面就以PHP命令行程序为例解释PHP脚本是怎么被执行的。 例如如下的这段PHP脚本:

假设上面的代码保存在名为hello.php的文件中, 用PHP命令行程序执行这个脚本:

 

1

$ php ./hello.php

这段代码的输出显然是Hello, Tipi!, 那么在执行脚本的时候PHP/Zend都做了些什么呢? 这些语句是怎么样让php输出这段话的呢? 下面将一步一步的进行介绍。

 

 

即:词法分析 => 语法分析 => opcode(中间代码)编译 =>Zend Engineer 执行

 

 

 

以上就是PHP内核-Zend引擎的详解的详细内容,更多请关注php中文网其它相关文章!

PHP内核扩展与Zend引擎调试 本文详细探讨了如何通过编写SAPI和扩展Zend引擎来增强PHP的功能。通过修改错误处理函数和使用操作码转储器来深入理解PHP脚本的执行过程,以及如何利用APD和APC等工具进行性能分析和优化。 阅读详情

相关推荐

深入理解PHP与Zend引擎:从内核到扩展

本篇博客深入探讨了PHP和Zend引擎的工作原理,提供了对PHP内部机制的非技术性概述。通过理解PHP的内部实现,我们可以更好地做出架构决策、快速定位和解决bug、添加扩展以及理解引擎的性能。文章还讨论了Zend引擎的编译和执行流程,包括词法分析、语法分析、编译成opcodes以及执行这些操作码的过程。

weixin_29781865的博客 517

archlinux grub启动无win7_用于Arch Linux的不同类型的内核以及如何使用它们

人们使用Arch Linux的原因之一是它是最新版本。在使用其他发行版之前,您将获得大多数软件和Linux内核。但这并不意味着您必须始终使用最新的主线内核。有几个可用的内核选项,将向您展示在Arch Linux中切换内核。01可用于Arch Linux的不同类型的内核Mainline内核(软件包名称:linux)这是最新的稳定Linux内核。大多数人使用此内核是因为它是最新的可用内核版本...

weixin_39631007的博客 441

深入PHP内核:扩展Zend引擎与SAPI开发

本文介绍了如何编写PHP SAPIs和扩展Zend引擎的高级技术。通过实际代码示例和步骤解释,揭示了如何创建一个简单的调用覆盖扩展,以及如何在编译和配置PHP时包含和使用该扩展。此外,本文还提供了一系列的家庭作业,旨在帮助读者通过实践来提高他们在编写PHP扩展方面的技能。

weixin_30633869的博客 462

PHP内核--Zend引擎

在前面的章节介绍了PHP的生命周期,PHP的SAPI,SAPI处于PHP整个架构较上层,而真正脚本的执行主要由Zend引擎来完成, 这一小节我们介绍PHP脚本的执行。 目前编程语言可以分为两大类: 第一类是像C/C++, .NET, Java之类的编译型语言, 它们的共性是: 运行之前必须对源代码进行编译,然后运行编译后的目标文件。 第二类比如:PHP, Javascript, Ru

hann的专栏 5282

从Si3N4到SiNx:一文搞懂芯片制造中氮化硅的化学式玄机(附工艺参数影响)

本文深入探讨了芯片制造中氮化硅(SiNx)化学式的调控艺术,揭示了从Si3N4到SiNx的转变如何影响材料性能。通过分析PECVD和PVD工艺参数对x值的精确调控,以及x值对电学和机械性能的影响,为半导体制造提供了实用的工艺优化策略。

weixin_30776273的博客 191

Python实战:基于PyG和Stable-Baselines3复现柔性车间调度算法(附数据集)

本文提供了一份基于图神经网络与深度强化学习的柔性车间调度实战指南。通过PyTorch Geometric构建异构图表示车间状态,并利用Stable-Baselines3中的PPO算法训练调度智能体,详细介绍了从环境建模、网络设计到训练评估的完整代码实现,帮助开发者构建可复用的工业级智能调度系统。

ansible6ops的博客 607

让我们来玩转 Linux 内核

多年来,人们一直对这个问题争论不休。然而,这就是GNU所说的。Linux 是内核:系统中将机器资源分配给运行的其他程序的程序。那么,您当前使用的 Linux 内核是什么?要找出这一点,uname可以使用该命令。uname -srm以下是我日常的司机。

我的博客,不一样的自我表达 2281

SAP中错记虚拟利润中心的调整,冲销处理实例

我非CO专业顾问。工作中遇到的问题,也会找资料,分析,测试。有时这个过程会拿到结果,解决问题。遂将过程记录下来备查。读者请谨慎参考!EC-PCA: 利润中心记账流程_9ke0-优快云博客。

专注SAP应用技术文章写作,致力于拉近用户与系统间的距离; 1795

Zend引擎与PHP之间有什么关系?底层原理是什么?

Zend引擎的底层原理是将PHP脚本解析成语法树,然后将语法树转换为Zend虚拟机指令。Zend引擎还提供了垃圾收集、内存管理、函数调用和异常处理等功能,以便于PHP代码的执行和管理。Zend引擎是PHP的核心组件之一,它是PHP语言的解释器和执行引擎,负责将PHP代码转换为可执行的指令,并在运行时管理变量、内存和对象生命周期等方面提供支持。因此,Zend引擎是PHP语言的重要组成部分,它负责将PHP代码转换为可执行的指令,并在运行时提供各种功能和支持,使得PHP能够实现各种应用和功能。

长风破浪会有时的博客 588

山东大学软件工程应用与实践——GMSSL开源库(六)——SM9密钥交换协议

2021SC@SDUSC 文章目录基本概念符号及辅助算法SM9密钥交换协议 基本概念 1976年,Diffie和Hellman在其题为《密码学的新方向》的论文中首次给出了公钥密码学的定义,并提出了Diffie-Hellman密钥交换算法。该算法解决了对称密码体制中的密钥分发问题,使得通信双方可以通过公开信道安全地交换共享密钥。 使用SM9通信的双方通过对方的标识和自身的私钥,经过两次或者可选的三次信息传递过程,计算获取一个由双方共同决定的共享秘密密钥。该密钥可以作为对称密码算法的会话密钥,其中可选步骤用来实

m0_51588039的博客 1986

人工智能训练师三级考试题型全解析|190道真题样例+30天备考路线

人工智能训练师三级考试并不神秘:理论考190道选择题(刷题就能过),实操考代码+方案设计(练练就会)。核心是花时间——30天系统备考,足以从容通过。如果你想从零开始系统备考,覆盖所有考点和实操技能,欢迎查看我的专栏:📖《人工智能训练师三级·从零到拿证完全指南》80篇系统化内容,覆盖报名、备考、冲刺、拿证全流程六大模块知识点逐个击破,每个考点都讲透实操代码题手把手教学,附带完整参考代码高频考点速记 + 易错题精讲 + 3套模拟试卷30天备考计划 + 冲刺复习策略。

白话机器学习 6053

php常用的扩展及其功能介绍

PHP 的功能可以通过扩展(extensions)大大增强和扩展。

完颜振江 1907

使用自制的NTC测量模块测试Plecs的热仿真效果

可以测试:您完全可以用这个模型来测试热仿真。NTC 模型是连接电气域和热域的关键桥梁。实现闭环:通过这种方式,您创建了一个高度真实的正反馈闭环系统:负载增加 -> 损耗增加 -> 温度升高 -> NTC 阻值变化 -> 控制电路可能因此调整(如降低频率或电流)-> 损耗变化 -> 温度变化。应用场景:这对于设计过温保护 (OTP) 电路风扇控制系统以及分析热失控条件非常有用。单位:确保热域中使用的单位( Kelvin 或 Celsius )与您的 C-Script 模型输入期望的单位一致。

311

php引擎,PHP内核-Zend引擎的详解

在前面的章节介绍了PHP的生命周期,PHP的SAPI,SAPI处于PHP整个架构较上层,而真正脚本的执行主要由Zend引擎来完成, 这一小节我们介绍PHP脚本的执行。目前编程语言可以分为两大类:第一类是像C/C++, .NET, Java之类的编译型语言, 它们的共性是: 运行之前必须对源代码进行编译,然后运行编译后的目标文件。第二类比如:PHP, Javascript, Ruby, Python...

weixin_34564735的博客 255

解决Office 365 SMTP问题:C#邮件发送详解

本文介绍了如何在C#中使用Office 365 SMTP服务发送邮件。重点讲解了正确配置SMTP客户端的关键参数:必须使用587端口并启用TLS加密(EnableSsl=true),同时通过NetworkCredential进行身份验证。虽然SmtpClient已不推荐用于新项目,但本文提供的代码示例仍适用于临时项目或系统维护,并建议未来可考虑使用MailKit等现代邮件库。文章还包含了错误处理机制,确保程序健壮性。

2501_90323865的博客 140

「UG/NX」多功能dll集成一个dll的三种方法

C++多功能集成一个dll的三种方法。

何曾参静谧的博客 1390

讲解 PHP 的官方源码库 php/php-src

php/php-src 是PHP 解释器的官方 C 语言源代码。你写的每一行 PHP 代码,最终都是由这个 C 程序来解释和执行的。Zend Engine (Zend 引擎):这是 PHP 的心脏。它负责将我们写的 PHP 脚本解析成计算机可以理解的指令(Opcodes),然后在一个虚拟机(VM)上执行这些指令。它还管理内存、变量、函数调用等核心功能。:服务器应用编程接口。这是 PHP 与外部世界(如 Web 服务器)沟通的桥梁。

u011091936的博客 1332

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

PHP 内核数据结构剖析:zend_constant 如何承载全局常量

本文基于 PHP 源码仓库中的核心数据结构文档 [zend_constant.rst](https://link.gitcode.com/i/4e6f3aae28d763235783ee2162fb4012),系统讲解 PHP 解释器(Zend Engine)中用于存放“非类常量”的专属结构体 `zend_constant`。读完本篇,你将掌握该结构体四个成员(`value`、`name`、`fi

gitblog_00636的博客 362

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

php 内核源码二次开发 语法特征新增/定制 内核漏洞修复完整流程 完整代码 全部大白话解释

【代码】php 内核源码二次开发 语法特征新增/定制 内核漏洞修复完整流程 完整代码 全部大白话解释。

qq_37805832的博客 155

php依赖内核吗,php依赖内核吗

PHP内核组成模块和运行原理php总共包括3个模块:1、php内核2、zend引擎3、php扩展层内核:用于处理请求,文件流,错误处理等相关处理。zend引擎:将源文件转换成机器语言(实际上是字节码opCode),然后再zend虚拟机上运行(这个跟java虚拟机是类似的)。扩展层:一组函数、类库和流, php使用它们来执行一些特定的操作, 比如需要使用mysql扩展。zend模块包括:1、zend...

weixin_30341445的博客 109

深入理解PHP内核TIPI:终极指南带你揭秘Zend引擎工作原理

想要真正掌握PHP编程?那你绝对不能错过PHP内核的奥秘!深入理解PHP内核TIPI项目是一本面向PHP开发者、架构师和系统工程师的完整指南,帮助你从底层揭秘Zend引擎的工作原理。无论你是想要优化PHP性能、开发高性能扩展,还是深入理解PHP内部机制,这本开源书籍都是你的最佳选择。😊 ## 什么是PHP内核与Zend引擎? PHP内核是PHP语言的核心实现,而Zend引擎则是PHP的执行引

gitblog_00592的博客 465

【PHP7内核剖析】3.3 Zend引擎执行过程

更多《PHP7内核剖析》系列文章:https://github.com/pangudashu/php7-internal3.3 Zend引擎执行过程Zend引擎主要包含两个核心部分:编译、执行:前面分析了Zend的编译过程以及PHP用户函数的实现,接下来分析下Zend引擎的执行过程。3.3.1 数据结构执行流程中有几个重要的数据结构,先看下这几个结构。

盘古大叔 9345

Zend VM和Zend引擎的关系到底是怎样的?

项目Zend 引擎(Zend Engine)Zend 虚拟机(Zend VM)作用范围整个 PHP 的底层执行引擎(包含语法解析、编译、执行等)专门处理执行部分(字节码解释执行)组成包含:词法分析器、语法分析器、AST 编译器、opcode 生成器、VM只包含:opcode 调度器、栈帧管理器、指令执行器层级是更上层、更完整的引擎是 Zend 引擎的一部分,是“执行子系统”类比操作系统内核(整个执行平台)CPU 虚拟指令集的执行器(解释器)你问的本质回答。

长风破浪会有时的博客 864

PHP 引擎的内核,知识体系一共包含哪些部分及其详解?底层原理是什么?

整体架构:Zend引擎、SAPI层、扩展系统的协同工作编译执行:从源代码到opcode的转换与执行过程变量系统:zval结构、类型管理与转换机制内存管理:引用计数、垃圾回收与内存分配函数与类:函数调用、类继承与对象模型性能优化:OPcache与JIT编译器的工作原理中间代码:通过opcode实现跨平台执行动态类型:基于zval的灵活类型系统自动内存管理:引用计数与垃圾回收结合模块化设计:核心与扩展分离的架构编写高性能、低内存占用的PHP代码理解PHP特性的内部工作机制。

长风破浪会有时的博客 965

PHP7引擎,PHP7内核剖析7之Zend引擎执行过程

本篇文章的内容介绍的是关于PHP7内核剖析7之Zend引擎执行过程 ,现在分享给大家,有需要的朋友可以参考一下1.EG(executor_globals/zend_executor_globals)PHP整个生命周期中最主要的一个结构,是一个全局变量,在main执行前分配(非ZTS下),直到PHP退出,它记录着当前请求全部的信息2.EX(execute_data/zend_execute_data...

weixin_35122299的博客 273
上一篇: php和Java哪个好?php和Java的对比
下一篇: PHP的闭包
chenrui310
博客等级 码龄15年 165粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值