PHP学习系列 -- 源码目录结构学习

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ydm19891101/article/details/79508771

通过上一篇文章的学习,我们已经对PHP的知识有了一个大概的了解,比如PHP是开源、免费、适合Web开发的服务端脚本语言,适合进行Web网站的开发,PHP是解释型语言,由Zend 引擎进行PHP语言的解析。本篇文章我们就接着上一篇文章的内容接着向下学习,通过查看PHP语言的源码结构了解Zend,isapi、PHP扩展的相关知识。

PHP源码下载地址:下载  选择一个版本下载即可。PHP源码结构如下所示。


目录结构分析:

/    :主要包含一些说明文件以及设计方案。
Zend :Zend 引擎的实现目录。包括词法语法解析,OPCODE,提供语言运行环境。
TSRM :线程安全资源管理器。
build:放置一些和源码编译相关的一些文件。
ext  :官方扩展目录。包括array系列,pdo系列,spl系列等函数的实现。
main :最为核心的文件,实现PHP的基本设施。
pear :PHP 扩展与应用仓库。
sapi :各种服务器抽象层的代码。例如apache的mod_php,cgi,fastcgi以及fpm等等接口。
tests:PHP的测试脚本集合。
scripts:Linux 下的脚本目录。
win32:Windows平台相关的一些实现。

这里重点说一下Zend、ext、sapi三个目录。

Zend

这里再累述一下Zend引擎到底是什么,又在PHP语言中扮演了什么角色。 

Zend Engine功能

先进性预编译(Compile),然后再执行(Execute)。

(1)词法分析:将代码切分为一个个的标记Toekn。

(2)语法分析(Parser):语法检查。

(3)生成操作码(opcode):Zend 引擎对这些 Token 进行编译, 将代码编译为 opcode,并绑定相应的参数、和函数调用。

(4)执行(execute):Zend 引擎执行这些 opcode。

(5)内存管理

可以说,Zend 就是PHP的心脏,是它保证了PHP可以稳定、高效的运行。

ext

PHP 3.0以前的版本,代码的耦合性太强,导致扩展很困难,在PHP 3.0以后的版本将PHP的功能进行了拆分,部分功能由相应的扩展来实现。

打开该文件夹,我们可以看到pdo、mysql、curl、dom、date等多个扩展。PHP扩展的这种架构极大降低了开发人员的开发成本、提高了扩展的灵活性。比如,我们想要使用通过PHP链接Mysql服务时,只需要通过mysql提供的函数操作即可。至于mysql扩展内部是如何通过socket通信与Mysql服务建立联系以及交互的,这些我们统统不用关心,是不是很简便?

至于扩展的添加以及扩展在Windows/Linux平台的差别,上一篇文章已经说过了,不再累述。

sapi

sapi:Server Application Programming Interface,服务端应用编程端口。上面我们已经说了PHP是如何执行的,那么PHP又是如何被访问告知要被执行的呢?没错,sapi就是起这个作用的。

常见的调用 SAPI 方式有以下四种:

(1)mod_php5:PHP module for Apache。

(2)CGI:Fork-And-Execute。

(3)Fastcgi:常驻 (Long-Live) 型的 CGI。

(4)CLI:PHP 命令行模式。

大的来分,上面四种模式可以分为两大类:Web Server转发模式、命令行模式

第一、二、三属于Web Server转发模式,第四种模式属于命令行模式。 

细分一下,四种模式又可以拆分三种:扩展模式、cgi模式、cli模式

第一种属于扩展模式。Apache服务器将php模块作为其扩展,当Apache服务器接收到.php类型的请求时,会将请求分发给mod_php模块去处理,总的来说,这种模式对于高并发并不适用(至于为何不行后期会完善),但是处理效率还是可以的。

第二、三种都属于CGI模式。这个时候,当Nginx、lighttpd等Web Server接收到.php文件请求时,会通过cgi接口将请求分发给Zend去解析,最终返回。这种模式目前应用比较广泛。

第三种属于CLI模式。顾名思义,就是可以在命令行下执行.php文件,这种方式不需要进行Web Server的转发。目前这种模式在很多地方都受限,应用并不广泛。

OK,最后附上一张PHP体系结构图


参考文章:Zend Engine & PHP

展开阅读全文

没有更多推荐了,返回首页