本文实例讲述了php扩展开发。分享给大家供大家参考,具体如下:
一、进入php源码包,找到ext文件夹
1
|
cd /owndata/software/php-5 .4.13 /ext
|
文件夹下放的都是php的相关扩展模块
二、生成自己的扩展文件夹和相关文件
php支持开发者开发自己的扩展,提供了ext_skel骨架,用来构建扩展基本文件
1
|
. /ext_skel --extname=myext
|
运行完成后,会在ext目录下生产一个myext扩展目录
三、编写一个hello world简单测试扩展
cd myext
1.编辑myext目录下的config.m4文件
1
2
3
|
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
|
PHP_ARG_WITH(myext, for myext support,
[ --with-myext Include myext support])
|
2.编辑php_myext.h文件
修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled);
这里就是扩展函数声明部分,可以增加一
1
|
PHP_FUNCTION(myext_helloworld);
|
3.编辑myext.c文件在这个里面增加一行PHP_FE(myext_helloworld, NULL)
1
2
3
4
5
|
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
|
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;
}
|
四、编译php扩展
在myext目录下运行phpize
/usr/local/webserver/php/bin/phpize
安装扩展
1
2
3
|
. /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安装的扩展目录下
1
|
cp myext.so /usr/local/webserver/php/ext/
|
编辑php.ini文件加入一行扩展路径
1
|
extension= /usr/local/webserver/php/ext/myext .so
|
重启php-fpm
1
|
service php restart
|
查看php扩展是否安装进去了
1
|
/usr/local/webserver/php/bin/php -m| grep myext
|
确认成功后测试myext打印helloworld
1
|
/usr/local/webserver/php/bin/php -r "myext_helloworld('test');"
|
或者创建demo.php
1
2
3
|
<?php
echo myext_helloworld( 'test' );
?>
|
/usr/local/webserver/php/bin/php demo.php
运行后输出
my first ext,Hello World!
自此扩展开发小demo就实现了
希望本文所述对大家PHP程序设计有所帮助。
原文链接:https://www.cnblogs.com/lisqiong/p/5913302.html