php 自定义扩展
来源:互联网 发布:vb符号大全 编辑:程序博客网 时间:2024/05/17 06:38
一、开始准备
1. 系统环境:cento
2. AP环境:即已经装好的Apache、PHP5.3.3环境(可以执行代码echo phpinfo查看版本)
3. 下载PHP源码包:下载稳定版本源码到当前用户的目录(版本要跟环境一致),如,下载PHP5.3.3到/usr/home/abc下。
二、解压php源码包,阅读README.EXT_SKEL
1. 将下载下来的PHP源码包,解压。
2. 可以进入到源码包,打开README.EXT_SKEL查看信息介绍。
三、根据README.EXT_SKEL所提供的信息创建预定义文件和扩展的开发框架包
1. 在/usr/home/abc/下,新建一个testdll.skel文件(随自己的需要定义)。
内容如下:
编辑后保存。
注意:后面没有分号,这里只是我们自己提前将要定义的函数写在了一个文件里,为之后给--proto传参用,如果你熟练了这并不是必须步骤。
2. 进入到PHP源码包,即php-5.3.3/ext/内。你能看到有两个带ext_前缀的文件ext_skel、ext_skel_win32.php。运行ext_skel创建扩展的开发包,如下:
之后将在php-5.3.3/ext/内生成文件夹名为php_test的扩展默认开发框架包,文件夹内包含下面内容:
四、修改php_test文件内,config.m4、php_php_test.h、php_test.c三个文件
1. 修改config.m4文件,如图所示:
修改config.m4文件将10、11、12三行最前面的dnl删除掉,就是将
即,注释掉PHP_ARG_WITH或PHP_ARG_ENABLE(根据实际情况二选一,第一种是指扩展需第三方库支持)。
2.修改php_php_test.h文件,如图所示:
即,注释掉默认声明的PHP函数,添加一个我们自己定义的PHP函数test_getstr和abc_test。
3. 修改php_test.c文件,如图所示:
即,注释掉默认声明的PHP_FE(confirm_php_test-compiled,null)函数,添加我们自己定义的PHP函数PHP_FE(test_getstr,null)和PHP_FE(abc_test,null)。将test_getstr和abc_test注册到phpext_functions[]中,然后定义并实现test_getstr和abc_test函数。
我们再来分析这个函数:如形式是这样
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, “ss”, &pc_arg_one, &arg_one_len, &pc_arg_tow, &arg_tow_len) == FAILURE) {
return;
}
这 句就是进行参数检查与取得参数的语句,zend_parse_parameters() 是 Zend 提供的 API 函数, 第一个参数是参数的数量,可以通过 Zend提供的 ZEND_NUM_ARGS()来取得,TSRMLS_CC是必须的, 第三个参数 “ss”指明参数的类型(s -字符串),这个函数有2个字符串参数,所以为“ss”, 之后的参数就是你要取得的参数值了,注意 如果 参数类型为“s” 的话, 参数值后面还要传一个long 来取得字符串的长度. zend_parse_parameters函数成功的话会返回
SUCCESS, 失败则返回 FAILURE,并且输出错误信息.
五.配置、编译、安装php_test
1.用phpize创建配置,在php_test下运行:
# /usr/local/bin/phpize 或 #phpize
(系统自动安装的php 可能不存在目录:/usr/local/php/bin/phpize,需要另外安装 yum install php-devel 安装后直接用#phpize)
#./configure
2.编译并安装phpext扩展到/usr/local/lib/php/内
# make
# make install
3. 如果一切正常,在/usr/lib64/php/modules下对应的文件夹内将多出一个叫php_test.so的文件
六、将扩展加载到PHP的php.ini或extensions.ini中
1. 把找到php.ini或extensions.ini,在其中加入一行,类似下图:
2. 重启apache服务器。
七、创建phpinfo()文件查看是否成功加载php_test扩展
1. 在apache的WEB所指根目录下创建php文件,输出phpinfo信息,如:
2.php代码运行函数
- php 自定义扩展
- 编写php自定义扩展
- 关于PHP自定义扩展加载的问题
- 关于PHP自定义扩展加载的问题
- 关于PHP自定义扩展加载的问题
- linux下php开发自定义扩展库
- 编译php源码时,怎么加上自定义的一些扩展
- PHP扩展:Zend引擎对扩展中自定义方法的支持机制
- 扩展 PHP
- php 扩展
- php扩展
- php 扩展
- php扩展
- php扩展
- PHP扩展
- php扩展
- php ffmepg.php 扩展
- PHP扩展-php.ini
- linux无线网络配置
- 颜色空间笔记
- [协议]ICMP协议剖析
- 交叉编译器的制作
- xshell或putty上 按小键盘上的数字键并不能输入数字的解决办法
- php 自定义扩展
- linux expect自动登录ssh,ftp
- 把用户名和密码存储到便好设置
- 最短路径之迪克斯特拉(Dijkstra)算法
- 天地图、谷歌地图、OSM地图各层级比例尺和分辨率大放送
- HDU 搜索 1518
- JAVA笔记(零)——简介
- POJ1064 Cable master(二分查找)
- 下载记录