环境:
我的主机:win7
虚拟机系统:centos6.4
php版本:5.5
php开发扩展,主要涉及工具ext_skel。
由于我虚拟机使用yum下载,php缺失了ext_skel,问题不大,下载源码, 源码中自带ext_skel
进入自己存放工具目录:
# cd /home/tool
下载源码:
# wget https://www.php.net/distributions/php-5.5.38.tar.bz2
解压:
# tar -jxvf php-5.5.38.tar.bz2
进入目录ext,就可看到ext_skel,ext_skel_win32是window下的执行工具
# cd php-5.5.38/ext
生成自己的扩展组件框架
# ./ext_skel --extname=tofunc
这个时候会看到在ext目录,存在tofunc目录,并且tofunc目录下已经帮我们创建好基本框架
# cd tofunc
修改config.m4
# vi config.m4
搜索:Otherwise use enable,去掉前面dnl,改成如下图所示
修改头文件
# vi php_tofunc.h
搜索:extern zend_module_entry 新增下面一行
PHP_FUNCTION(tofunc);
例子如图所示:
编辑c程序
# vi tofunc.c
搜索:const zend_function_entry tofunc_functions[]新增一行:
PHP_FE(tofunc, NULL)
例子如图所示:
搜索:PHP_MINFO_FUNCTION(tofunc) 为了输出phpinfo时候看到扩展相关版本信息
在php_info_print_table_header();后增加下面
php_info_print_table_row(2, "Version", "1.0");
php_info_print_table_row(2, "Author", "Egg");
例子如图所示:
在最底部增加php方法
PHP_FUNCTION(tofunc){
php_printf("hello toegg");
RETURN_TRUE;
}
编译安装扩展
(没有安装php-devel,执行不了phpize命令)
# /usr/bin/phpize
生成makefile文件
# ./configure
# make
测试扩展是否报错
# make test
安装
# make install
安装完,就有tofunc.so生成,并在php扩展模块目录自动生成, 我的扩展目录是在/usr/lib64/php/modules/tofunc.so
测试是否成功,执行当前目录下的测试脚本
# php -d enable_dl=On tofunc.php 或者 php -d enable_dl=On -r "dl('tofunc.so');tofunc();"
修改php.ini
extension="tofunc.so"
重启服务器,
查看扩展
# php -m
或者输出phpinfo