扩展的基本骨架
如果你是通过源码编译方式安装的 PHP,并且还保留了你安装时的 PHP 源码。那么你在源码的 ext 目录下可以找到一个叫 ext_skel 的程序。它的功能正如它的名字,就是用来生成一个扩展的基本骨架的。
例如,假设我们还没有开始写 xxtea 这个扩展,并且我们已经在 PHP 源码的 ext 目录下了,下面我们执行:
./ext_skel --extname=xxtea
我们会看到这样的输出内容:
Creating directory xxteaCreating basic files: config.m4 config.w32 .svnignore xxtea.c php_xxtea.h CREDITS EXPERIMENTAL tests/001.phpt xxtea.php [done].To use your new extension, you will have to execute the following steps:1. $ cd ..2. $ vi ext/xxtea/config.m43. $ ./buildconf4. $ ./configure --[with|enable]-xxtea5. $ make6. $ ./php -f ext/xxtea/xxtea.php7. $ vi ext/xxtea/xxtea.c8. $ makeRepeat steps 3-6 until you are satisfied with ext/xxtea/config.m4 andstep 6 confirms that your module is compiled into PHP. Then, start writingcode and repeat the last two steps as often as necessary.
通过这些信息,我们可以了解到,它帮我们在 ext 目录下,创建了一个 xxtea 的目录,并且在其中创建了一堆文件,这些文件就是一个 PHP 扩展的基本骨架。再后面它给出了一个编辑扩展的基本步骤,大致上呢,就这么多东西。
关于 ext_skel 以及它生成 config.m4 和 config.w32 这两个文件的介绍,读者可以参考官方的 PHP 手册 — PHP 核心:骇客指南 — PHP 5 构建系统,其它几个文件介绍参见:PHP 手册 — PHP 核心:骇客指南 — 扩展的结构,我这里就不重复了。
虽然上面说了这么多关于 ext_skel 的内容,但在实际开发扩展时,我们可能压根就不需要 ext_skel 这个程序。
为什么不需要 ext_skel 呢?首先一个原因是,它生成的这个骨架太过简单,在这个骨架的基础上修改又比较麻烦,还不如找一个现成的扩展,复制一份,修改一下来的方便。第二个原因是,不同版本的 PHP 生成的这个扩展骨架还是不一样的,如果你要编写的是跨版本的扩展,用这个东西也不太合适。它生成的东西,除了文件名以外,大部分东西你可能是需要重写的。
所以,即使你没有保留源码也无所谓,你不是通过编译源码方式安装的 PHP 也无所谓。只要本小节之前的那个测试过程能够完全通过,就可以进行开发了。
当然这只是我个人的看法,如果你觉得这个小工具能够帮到你的忙,那么你尽管用就可以了,不用在乎我的看法。
