PHP 介绍

Posted by Oscaner on December 19, 2018

PHP 简介

PHP 是通用服务器端脚本编程语言, 其主要用于 WEB 开发以实现动态 WEB 页面, 它也是最早实现将脚本嵌入 HTML 源码文档中的服务端脚本语言之一。

同时, PHP 还提供了一个命令行接口, 其也可以在大多数系统上作为一个独立的 Shell 来使用。

PHP Zend Engine

Zend Engine 是开源的、PHP脚本语言的解释器, 为 PHP 提供了内存和资源管理的功能以及其它的一些标准服务, 其高性能、可靠性和可扩展性在促进 PHP 成为一种流行语言方面发挥了重要作用。

Zend Engine 的出现将 PHP 代码的处理分成了两个阶段:

  1. 首先是分析 PHP 代码, 将其转换为称作 Zend Opcode 的二进制格式 (类似 Java 的字节码) , 并将其存储于内存中。

  2. 第二阶段是使用 Zend Engine 去执行这些转换后的 Opcode。

1.png

PHP 的 Opcode

Opcode 是一种 PHP 脚本编译后的中间语言, 就像 Java 的 ByteCode, 或者 .NET 的 MSL。

PHP 执行 PHP 脚本代码一般会经过如下 4 个步骤 (确切的来说, 应该是 PHP 的语言引擎 Zend):

Scanning (扫描) -> Parsing (分析) -> Compilation (编译) -> Execution (执行)

  1. Scanning (Lexing): 将 PHP 代码转换为语言片段 (Tokens)

  2. Parsing: 将 Tokens 转换成简单而有意义的表达式

  3. Compilation: 将表达式编译成 Opcodes

  4. 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

    1. Zend Optimizer 是针对 PHP 5.3.x 之前用的插件名称。

    2. Zend Guard Loader 是针对 PHP 5.3.x 到 PHP 5.6 之间的插件名称。

    3. 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 国际许可协议进行许可
本站文章除注明转载/出处外, 均为本站原创或翻译, 转载前请务必署名