用ext_skel,实现一个PHP扩展,添加到PHP并调用
来源:互联网 发布:ubuntu tftp-hpa配置 编辑:程序博客网 时间:2024/05/29 06:50
http://www.shinrun.com/PHP
一、开始之前
1. 系统环境:FreeBSD 8.2
2. AP环境:即已经装好的Apache2.2.17、PHP5.3.8环境
3. PHP源码:下载稳定版本源码到当前用户的目录,如,下载PHP 5.3.8到/usr/home/abc下。
4. 其它要求(如果你要编译整个PHP):autoconf版本为2.13或2.59;
二、解压php源码包,阅读README.EXT_SKEL
1. 将下载下来的PHP源码包,解压。
2. 进入到源码包,打开README.EXT_SKEL
如果,看到里面的详细说明,如果你已领会,那么就不用往下看了,赶紧自己开始吧。
三、根据README所提供的信息创建预定义文件和扩展的开发框架包
1. 在/usr/home/abc/下,新建一个phpext.skel文件(随自己的需要定义)。
内容如下:
string getext(string str)
编辑后保存。
注意:后面没有分号,这里只是我们自己提前将要定义的函数写在了一个文件里,为之后给--proto传参用,如果你熟练了这并不是必须步骤。
2. 进入到PHP源码包,即php-5.3.8/ext/内。你能看到有两个带ext_前缀的文件ext_skel、ext_skel_win32.php。运行ext_skel创建扩展的开发包,如下:
localhost$ .
/ext_skel
--extname=phpext --proto=
/usr/home/abc/phpext
.skel
之后将在php-5.3.8/ext/内生成文件夹名为phpext的扩展默认开发框架包,文件夹内包含下面内容:
四、修改phpext文件内,config.m4、php_phpext.h、phpext.c三个文件
1. 修改config.m4文件,如图所示:
即,注释掉PHP_ARG_WITH或PHP_ARG_ENABLE(根据实际情况二选一,第一种是指扩展需第三方库支持)。
2. 修改php_phpext.h文件,如图所示:
即,注释掉默认声明的PHP函数,添加一个我们自己定义的PHP函数getext。
3. 修改phpext.c文件,如图所示:
即,先将getext注册到phpext_functions[]中,然后定义并实现getext函数。
另,生成的文件,也有php文件,可根据自己的需要进行测试等。
五、配置、编译、安装phpext
1. 用phpize创建配置,在phpext下运行:
#
/usr/local/bin/phpize
#.
/configure
--with-php-config=
/usr/local/bin/php-config
#.
/configure
2. 编译并安装phpext扩展到/usr/local/lib/php/内
#
make
#
make
test
#
make
install
clean
3. 如果一切正常,在/usr/local/lib/php/下对应的文件夹内将多出一个叫phpext.so的文件
此时扩展已成功完成。
六、将扩展加载到PHP的php.ini或extensions.ini中
1. 把找到php.ini或extensions.ini,在其中加入一行,类似下图:
2. 重启apache服务器。
七、创建phpinfo文件查看是否成功加载phpext扩展
1. 在apache的WEB所指根目录下创建php文件,输出phpinfo信息,如:
- <?php
- //info.php
- phpinfo();
- ?>
2. 创建PHP测试程序并调用phpext中getext函数
- <?php
- //test.php echo getext("This is a php extension");
- ?>
完
- 用ext_skel,实现一个PHP扩展,添加到PHP并调用
- 用ext_skel,实现一个PHP扩展,添加到PHP并调用
- php 如何添加php扩展
- php 添加postgre扩展
- php 添加pdo_mysql扩展
- 为php添加扩展
- PHP 添加扩展
- PHP添加Xdebug扩展
- php添加pdo_mysql扩展
- php 添加mongodb扩展
- PHP添加redis扩展
- PHP添加mongodb扩展
- php添加扩展模块
- php添加mysql扩展
- php编译添加扩展
- php 添加phpredis扩展
- php调用c++程序实现php功能扩展
- php扩展,一个helloworld的实现
- f2c demo
- 数字安全证书(CA证书)介绍
- 整型和字符串、字符串和字符数组互转
- Logger级别
- javaScript 关于闭包问题
- 用ext_skel,实现一个PHP扩展,添加到PHP并调用
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- Hive内置函数的应用案例
- 黑马程序员——异常
- Hibernate4与hibernate3主要区别与版本不一致导致的错误
- nginx-upstream安装配置
- Workspace in use or cannot be created, choose a different one.--错误解决办法
- Java中Void占位符的测试及个人理解
- 如何获取对hbase的请求rpc数