centos 开发php扩展,centos上的php扩展开发

php是最容易掌握的一门web脚本语言。虽然简单,php的功能十分强大、扩展灵活、应用广泛。笔者最近打算将一款软件以php扩展开发的制作出来;之前一直没有做过此类开发,现在把边学边做的过程记录下来和大家一起分享。希望读后对看了本文的你也有所帮助。笔者的开发环境是centos5.10+httpd 2.2+php5.4.2。

一、php扩展开发的准备

在php扩展开发之前,这些准备工作或者说是应该掌握的基本技能有:

熟悉Linux操作。毕竟是在Linux下开发嘛。

熟悉PHP,C/C++

了解Linux下 C/C++开发调试及编译

看到这里,很多对linux了解较少的人估计开始打退堂鼓了。千万别,笔者也是linux菜鸟一枚,不会的东西大多数都是找google、百度帮忙^_^!。笔者这里有一篇文章《在centos5下编译安装php记录》,介绍了编译安装php的方法,php扩展开发的环境和编译php的环境是一样的,直接照着做就可以了。

二、快速完成php扩展开发的框架

这里,笔者不打算介绍那么多原理了,反正笔者一看到大段大段的理论和代码就觉得头疼;我们一开始就单刀直入从快速做一个扩展例子做起。首先需要做一个扩展的框架,就像我们作windows Form开发,大部分界面代码都由Visual Studio提前建好了一样。如果你仔细阅读了《在centos5下编译安装php记录》,现在对php源代码目录应该有些熟悉了,php扩展都存放在php-src/ext目录下,进入这个目录,里面有一个ext_skel的shell脚本,现在我们要是它来制作php扩展的框架。

$cd  php-src/ext/

$ ./ext_skel –extname=cnphp

//执行完上面的指令会出现如下信息

Creating directory cnphp

Creating basic files: config.m4 config.w32 .svnignore cnphp.c php_cnphp.h CREDITS EXPERIMENTAL tests/001.phpt cnphp.php [done].

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

1. $ cd ..

2. $ vi ext/cnphp/config.m4

3. $ ./buildconf

4. $ ./configure –[with|enable]-cnphp

5. $ make

6. $ ./sapi/cli/php -f ext/cnphp/cnphp.php

7. $ vi ext/cnphp/cnphp.c

8. $ make

Repeat steps 3-6 until you are satisfied with ext/cnphp/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.

php扩展开发的框架已经完成了,很简单吧,我们新建了一个名叫”cnphp”的扩展模块,可以使用–enable-cnphp将这个扩展静态编译到php中,当然,一般我们不推荐这么做,自己的扩展模块,灵活性第一。

三、编译php扩展

框架做好后,不能直接运行,需要修改config.m4中的如下几行:

- 原文

+ 修改后

=============================================

-dnl PHP_ARG_ENABLE(cnphp, whether to enable cnphp support,

-dnl Make sure that the comment is aligned:

-dnl [ --enable-cnphp Enable cnphp support])

-dnl PHP_SUBST(CNPHP_SHARED_LIBADD)

-

-PHP_NEW_EXTENSION(cnphp, cnphp.c, $ext_shared)

-fi

============================================

+ PHP_ARG_ENABLE(cnphp, whether to enable cnphp support,

dnl Make sure that the comment is aligned:

+ [ --enable-cnphp Enable cnphp support])

+ PHP_SUBST(CNPHP_SHARED_LIBADD)

+

+PHP_NEW_EXTENSION(cnphp, cnphp.c, $ext_shared)

+fi

上面PHP_ARG_ENABLE函数有三个参数,第一个参数是我们的扩展名(注意不用加引号),第二个参数是当我们运行./configure脚本时显示的内容,最后一个参数则是我们在调用./configure –help时显示的帮助信息。

如果我们显示运行./configure –enable-cnphp,那么终端环境便会自动将$PHP_CNPHP变量设置为yes,而PHP_SUBST函数只不过是php官方对autoconf里的AC_SUBST函数的一层封装。 最后重要的一点是,PHP_NEW_EXTENSION函数声明了这个扩展的名称、需要的源文件名、此扩展的编译形式。如果我们的扩展使用了多个文件,便可以将这多个文件名罗列在函数的参数里,如:

PHP_NEW_EXTENSION(sample, sample.c sample2.c sample3.c, $ext_shared)

最后的$ext_shared参数用来声明这个扩展不是一个静态模块,而是在php运行时动态加载的。完成修改后,我们就可以编译php扩展了。

//进入刚才新建的扩展文件夹cnphp

$ cd cnphp

$ phpize

$ ./configure

$ make

$ make test

一切顺利的话,php模块开发已经完成^_^。当然,这只是一个空模块,下篇文章,笔者将继续介绍如何编写自己的php函数,一起边学习边制作吧。

PS:还记得php有两种运行方式TS(Thread Safe)和NTS(Non Thread Safe),php扩展在编译的过程中也需要用到,如果php是TS版本的,php扩展则必须是TS版本的,这个必须一直,否则会编译报错。默认编译的是TS版本,如果需要NTS则需要修改php-src/main/php_config.h的定义:

#define ZTS 1        //如果是NTS(Non Thread Safe)修改为 #define NTS 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值