个人第一个php扩展

1、进入php源码包,找到ext文件夹php

cd /owndata/software/php-5.4.13/extweb

文件夹下放的都是php的相关扩展模块函数

 

2、生成本身的扩展文件夹和相关文件php-fpm

php支持开发者开发本身的扩展,提供了ext_skel骨架,用来构建扩展基本文件测试

./ext_skel --extname=myextspa

运行完成后,会在ext目录下生产一个myext扩展目录debug

 

3、编写一个hello world简单测试扩展rest

cd myextcode

1.编辑myext目录下的config.m4文件server

1
2
3
4
5
dnl PHP_ARG_WITH(myext,  for  myext support,
 
dnl Make sure that the comment is aligned:
 
dnl [  --with-myext             Include myext support])

  

将上面这段改为

1
2
3
4
5
PHP_ARG_WITH(myext,  for  myext support,
 
[  --with-myext             Include myext support])

  

2.编辑php_myext.h文件

修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 这里就是扩展函数声明部分,能够增长一

PHP_FUNCTION(myext_helloworld);

 

3.注册到zend引擎里面,编辑myext.c文件在这个里面增长一行PHP_FE(myext_helloworld,  NULL)

1
2
3
4
5
6
7
8
9
const  zend_function_entry myext_functions[] = {
 
         PHP_FE(confirm_myext_compiled,  NULL)            /* For testing, remove later. */
 
         PHP_FE(myext_helloworld,  NULL)
 
         PHP_FE_END       /* Must be the last line in myext_functions[] */
 
};

  

最后在文件末尾加入myext_helloworld执行代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PHP_FUNCTION(myext_helloworld)
 
{
 
         char  *arg = NULL;
 
     int  arg_len, len;
 
     char  *strg;
 
     if  (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,  "s" , &arg, &arg_len) == FAILURE) {
 
         return ;
 
     }
 
     php_printf( "my first ext,Hello World!\n" );
 
     RETRUN_TRUE;
 
}

 

 

4、编译php扩展
在myext目录下运行phpize

/usr/local/webserver/php/bin/phpize

安装扩展

./configure --with-php-config=/usr/local/webserver/php/bin/php-config

make && make install

而后在php安装的目录下生产.so的文件

/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/myext.so

复制myext.so文件到php安装的扩展目录下

cp myext.so /usr/local/webserver/php/ext/

编辑php.ini文件加入一行扩展路径

extension=/usr/local/webserver/php/ext/myext.so

重启php-fpm

service php restart

查看php扩展是否安装进去了

/usr/local/webserver/php/bin/php -m|grep myext

查看扩展中是否有myext_helloworld这个方法

php --rf "myext_helloworld"

确认成功后测试myext打印helloworld

 /usr/local/webserver/php/bin/php -r "myext_helloworld('test');"

或者建立demo.php

1
2
3
4
5
<?php
 
echo  myext_helloworld( 'test' );
 
?>

  

/usr/local/webserver/php/bin/php demo.php 

运行后输出

my first ext,Hello World!

自此扩展开发小demo就实现了