或者在 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
包含了不同服务器抽象层的代码。