编写一个简单的php扩展

进入终端,将目录定位到php源代码的ext下.使用ext_skel来建立扩展框架.

首先建立一个原型文件,里面定义你要建立扩展的函数原型,类似C语言中的函数声明,比如建立skyfox.def,事实上是,你也可以不必定义这个文件.

./ext_skel --extname=skyfox --proto=skyfox.def

如果你定义了skyfox.def需要,将它保存到和ext_skel统一目录下.


To use your new extension, you will have to execute the following steps:

1.  $ cd ..
2.  $ vi ext/skyfox/config.m4
3.  $ ./buildconf
4.  $ ./configure --[with|enable]-skyfox
5.  $ make
6.  $ ./php -f ext/skyfox/skyfox.php
7.  $ vi ext/skyfox/skyfox.c
8.  $ make

Repeat steps 3-6 until you are satisfied with ext/skyfox/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.

命令生成了一些文件和目录,执行完命令后它会提示你使用你的新扩展你需要执行的步骤.

首先打开skyfox目录下的config.m4文件,你会看到第八行有段英文.

If your extension references something external, use with:

如果你的扩展要引用外部的东西的话使用 --with-skyfox 来 include 扩展.然后下面的一段是

Otherwise use enable:

否则使用 enable 来开启扩展.

我们这里使用enable.

将前面的dnl注释在vi中使用dw命令去掉就可以了.

然后第二步,回到php源代码根目录,执行./buildconf

完成后它会提示

./buildconf
You should not run buildconf in a release package.
use buildconf --force to override this check.

大概是不建议在一个正式版本中运行buildconf,但是可以使用 --force 参数去掉这个提示. 继续...

./buildconf --force

执行完成后使用configure --help 看看有没有skyfox这个扩展

./configure --help | grep skyfox
  --enable-skyfox           Enable skyfox support

如果看到上面的信息,说明模块可以使用了,打开ext/skyfox下的skyfox.c 转到最后一行,输入以下代码

PHP_FUNCTION(skyfox)
{
 printf("%s","just for test");
}

上面的代码会注册一个skyfox函数在php中.当你调用这个函数的时候会自动输出just for test.

你还可以使用ZEND引擎的zend_parse_parameters之类的API来取得定义函数的参数.

此外PHP_MINFO_FUNCTION函数用于打印php扩展的相关信息,在php程序打印phpinfo()的时候会看到你的模块信息.

完成这些操作之后在编译php的时候使用./configure --enable-skyfox 就可以了,如果你使用with哪就是 --with-skyfox

本文只是一个简单的例子,要编写一些高可用性的扩展要涉及C/C++方面的一些具体应用.

你可能感兴趣的:(编写一个简单的php扩展)