PHP扩展开发—LINUX环境

LINUX环境下开发PHP扩展的步骤如下:

1、下载PHP源码,解压,我的解压目录是:/root/lamp/php-5.5.37

2、cd到/root/lamp/php-5.5.37/ext目录下,创建文件test_extension.def文件

int a(int x, int y)
string b(string str, int n)

3、通过扩展框架生成器生成框架目录:
ext_skel –extname=test_extension –proto=test_extension.def
生成成功结果如下:

Creating directory test_extension
awk: /root/lamp/php-5.5.37/ext/skeleton/create_stubs:56: warning: escape sequence `\|' treated as plain `|'
Creating basic files: config.m4 config.w32 .svnignore test_extension.c php_test_extension.h CREDITS EXPERIMENTAL tests/001.phpt test_extension.php [done].

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

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

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

4、切换到生成的框架目录下:cd test_extension
5、修改配置文件config.m4,去掉10、11、12行前面的dnl,如下

PHP_ARG_WITH(test_extension, for test_extension support,
Make sure that the comment is aligned:
[  --with-test_extension             Include test_extension support])

6、实现函数a和b的功能,vi test_extension.c,修改后函数a、b如下

PHP_FUNCTION(a)
{
        int argc = ZEND_NUM_ARGS();
        long x;
        long y;

        if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
        {
                php_error(E_WARNING, "zend_parse_parameters failure!");
                return;
        }
        RETURN_LONG(x + y);
}

PHP_FUNCTION(b)
{
        char *str = NULL;
        int argc = ZEND_NUM_ARGS();
        int str_len;
        long n;
        char *result;
        char *ptr;
        int result_length;
        if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
        {
                php_error(E_WARNING, "zend_parse_parameters failure!");
                return;
        }
        result_length = str_len * n;
        result = (char *) emalloc(result_length + 1);
        ptr = result;
        while (n--) {
                memcpy(ptr, str, str_len);
                ptr += str_len;
        }
        *ptr = '/0';
        RETURN_STRINGL(result, result_length, 0);

}

7、test_extension目录下执行:/usr/local/bin/phpize

Configuring for:
PHP Api Version:         20121113
Zend Module Api No:      20121212
Zend Extension Api No:   220121212

8、配置:./configure –with-php-config=/usr/local/bin/php-config
9、编译:make
10、安装:make install
安装完成后/usr/local/lib/php/extensions/no-debug-zts-20121212/下会生成test_extension.so

11、修改php.in,加上:extension=test_extension.so

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值