PHP 简介
PHP 是通用服务器端脚本编程语言, 其主要用于 WEB 开发以实现动态 WEB 页面, 它也是最早实现将脚本嵌入 HTML 源码文档中的服务端脚本语言之一。
同时, PHP 还提供了一个命令行接口, 其也可以在大多数系统上作为一个独立的 Shell 来使用。
PHP Zend Engine
Zend Engine 是开源的、PHP脚本语言的解释器, 为 PHP 提供了内存和资源管理的功能以及其它的一些标准服务, 其高性能、可靠性和可扩展性在促进 PHP 成为一种流行语言方面发挥了重要作用。
Zend Engine 的出现将 PHP 代码的处理分成了两个阶段:
-
首先是分析 PHP 代码, 将其转换为称作 Zend Opcode 的二进制格式 (类似 Java 的字节码) , 并将其存储于内存中。
-
第二阶段是使用 Zend Engine 去执行这些转换后的 Opcode。
PHP 的 Opcode
Opcode 是一种 PHP 脚本编译后的中间语言, 就像 Java 的 ByteCode, 或者 .NET 的 MSL。
PHP 执行 PHP 脚本代码一般会经过如下 4 个步骤 (确切的来说, 应该是 PHP 的语言引擎 Zend):
Scanning (扫描) -> Parsing (分析) -> Compilation (编译) -> Execution (执行)
-
Scanning (Lexing): 将 PHP 代码转换为语言片段 (Tokens)
-
Parsing: 将 Tokens 转换成简单而有意义的表达式
-
Compilation: 将表达式编译成 Opcodes
-
Execution: 顺粗执行 Opcodes, 每次一条, 从而实现 PHP 脚本的功能
PHP 的加速器
基于 PHP 的特殊扩展机制, 如 Opcode 缓存扩展, 也可以将 Opcode 缓存于 PHP 的共享内存中,
从而可以让同一段代码的后续重复执行时, 跳过编译阶段以提高性能。
由此也可以看出, 这些加速器并非真正提高了 Opcode 的运行速度, 而仅是通过分析 Opcode 后, 将它们重新排列以达到快速执行的目的。
常见的 PHP 加速器有很多, 如 APC(Alternative PHP Cache)、eAccelerator、XCache、NuSphere PHPExpress 等。
但是, 自从 PHP 核心集成 Zend Opcache 后, 这些加速器逐渐不再维护更新。
-
Zend Optimizer, Zend Guard Loader 和 Zend Opcache
-
Zend Optimizer 是针对 PHP 5.3.x 之前用的插件名称。
-
Zend Guard Loader 是针对 PHP 5.3.x 到 PHP 5.6 之间的插件名称。
-
Zend Opcache 是针对 PHP 5.6 之后包括 PHP 7.0 之后使用的插件名称。
-
PHP 源码目录
目录 | 说明 |
---|---|
build | 这里主要放置一些跟源码编译相关的文件 |
ext
|
官方的扩展目录, 包括了绝大多数 PHP 的函数定义和实现,
如 Array 系列、PDO 系列、SPL 系列等函数的实现。 个人开发的扩展在测试时也可以放到这个目录, 以方便测试等 |
main
|
这里存放的就是 PHP 最为核心的文件了, 是实现 PHP 的基础设施。
这里和 Zend 引擎不同, Zend 引擎主要实现语言最核心的运行环境 |
Zend | Zend 引擎的实现目录, 比如脚本的词法语法解析, Opcode 的执行以及扩展机制的实现等等 |
pear | PHP 扩展与应用仓库, 包括 PEAR 的核心文件 |
sapi | 包含了各种服务器抽象层的代码, 例如 Apache 的 mod_php、cgi、fastcgi 以及 fpm 等等接口 |
TSRM
|
PHP 的线程安全构建在 TSRM 库之上, PHP 实现中常见的宏通常是对 TSRM 的封装,
TSRM(Thread Sare Resource Manager)线程安全资源管理器 |
tests | PHP 的测试脚本集合, 包括 PHP 各项功能的测试文件 |
win32
|
主要包括 windows 平台相关的一些实现,
比如 sokcet 的实现在 Windows 下和 Unix 平台就不太一样, 同时也包括了 windows 下编译 PHP 相关的脚本 |
本文由
Oscaner
创作, 采用
知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外, 均为本站原创或翻译, 转载前请务必署名