background image

 

或者在 php.ini 文件当中添加一些扩展标签(这并不总是一个

恰当的解决方案)。

综上所述,外部模块非常适合开发第三方产品,较少使用的附加的小功能或者仅仅是调试等这些用途。
为了迅速开发一些附加功能,外部模块是最佳方式。但对于一些经常使用的、实现较大的,代码较为复杂
的应用,那就有些得不偿失了。

 

第三方可能会考虑在 php.ini 文件中使用扩展标签来创建一个新的外部模块。这些外部模块完全同主
PHP 包分离,这一点非常适合应用于一些商业环境。商业性的发行商可以仅发送这些外部模块而不必再
额外创建那些并不允许绑定这些商业模块的 PHP 二进制代码。

内建模块

 

内建模块被直接编译进 PHP 

 

并存在于每一个 PHP 处理请求当中。它们的功能在脚本开始运行时立即生

效。和外部模块一样,内建模块也有各有利弊,列表如下:

优点

缺点

无需专门手动载入,功能即时生效。

修改内建模块时需要重新编译 PHP。

 

无需额外的磁盘文件,所有功能均内置在 PHP 

二进制代码当中。

PHP 二进制文件会变大并且会消耗

 

更多的内存。

Zend 引擎

 

当然,你也能直接在 Zend 引擎里面进行扩展。如果你需要在语言特性方面做些改动或者是需要在语言

 

核心内置一些特别的功能,那么这就是一种很好的方式。但一般情况下应该尽力避免对 Zend 引擎的修
改。这里面的改动会导致和其他代码的不兼容,而且几乎没有人会适应打过特殊补丁的 Zend 引擎。况且

 

这些改动与主 PHP 源代码是不可分割的,因此就有可能在下一次的官方的源代码更新中被覆盖掉。因此,

这种方式通常被认为是 不良的习惯 。由于使用极其稀少,本章将不再对此进行赘述。

( 五 ) 源 码 布 局

 

 

在我们开始讨论具体编码这个话题前,你应该让自己熟悉一下 PHP 的源码树以便可以迅速地对各个源

 

文件进行定位。这也是编写和调试 PHP 扩展所必须具备的一种能力。

下表列出了一些主要目录的内容:

目录

内容

php-src

包含了 PHP

 

主源文件和主头文件;在这里你可以找到所有的 PHP API 

定义、宏等内容。(重要). 其他的一些东西你也可以在这里找到。

php-src/ext 这里是存放动态和内建模块的仓库;默认情况下,这些就是被集成于

” 

主源码树中的 官方 PHP 

 

模块。自 PHP 4.0 开始,这些 PHP 标准扩展

都可以编译为动态可载入的模块。(至少这些是可以的)。

php-

src/main

 

这个目录包含主要的 PHP 

 

宏和定义。 (重要) 

php-

src/pear

这个目录就是 PHP 

扩展与应用仓库 的目录。包含了 PEAR 的核心文件。

php-src/sapi

包含了不同服务器抽象层的代码。