您的位置:首页 > 编程语言 > PHP开发

PHP扩展开发:一个简单的例子

2014-02-22 11:01 866 查看
下面的操作是在Ubuntu 12.04下,并且已经搭建了LAMP环境.

一.下载PHP源码

1.首先安装GIT

sudo apt-get install git

2.克隆PHP源码

cd /

git clone https://github.com/php/php-src.git
ls

会看到php-src文件夹

3.进入ext目录

cd php-src/ext

ls

会看见很多扩展如curl,pdo等,同时还会看见用来建立扩展的脚本ext_skel

二.建立骨架修改参数

1.利用ext_skel建立骨架

./ext_skel --extname=yourname

yourname为你想建立的扩展的名字,我们先建一个,例如为rube

建立好后当前文件夹下会出现rube这个文件夹

cd rube

2.修改config,m4的参数

vim config.m4

dnl Otherwise use enable:

PHP_ARG_ENABLE(rube, whether to enable rube support,

dnl Make sure that the comment is aligned:

[ --enable-rube Enable rube support])

将PHP_ARG_ENABLE(rube, whether to enable rube support 和 [ --enable-rube Enable rube support] 这两行前面的dnl 去掉 。修改成如上所示

三.编写php_rube.h 和 rube.c

1.编辑php_rube.h

vim php_rube.h

在php_rube.h的最后面添加

PHP_FUNCTION(confirm_rube_compiled);

PHP_FUNCTION(hello);

hello 为你要创建的那个函数

2.编辑rube.c

vim rube.c

const zend_function_entry rube_functions[] = {

PHP_FE(confirm_rube_compiled, NULL)

PHP_FE(hello, NULL)

PHP_FE_END

};

修改zend_function_entry rube_functions[] , 在PHP_FE(confirm_rube_compiled, NULL)后面添加

PHP_FE(hello, NULL)

3.编写函数

接下来编写hello这个函数,首先编写一个简单的输出”Hello my first extention”的函数。。。

在rube.c的最后面添加

PHP_FUNCTION(hello)

{

char *arg = "Hello my first extention!";

int len;

char *strg;

len = spprintf(&strg, 0, "%s\n", arg);

RETURN_STRINGL(strg, len, 0);

}

保存后退出

四.编译代码

1.编译成so文件

cd /php-src/ext/rube

whereis phpize

看是否存在phpize

如果存在运行phpize,否则用

sudo apt-get install php5-dev

进行安装后运行

phpize

然后

./configure --with-php-config=你的php-config位置

如果找不到php-config的位置

whereis php-config

./configure --with-php-config=你的php-config位置

接着

make

在编译过程中如果你的代码出现错误,会报错。

make这步中如果提示

Build complete

说明编译成功.然后

make install

安装好后rube.so文件会在当前文件夹下的modules文件夹下,同时也会被安装在系统提示的位置(也就是你的系统中php扩展的默认安装位置),我的提示如下:

Installing shared extensions: /usr/lib/php5/20090626+lfs/

说明rube.so被安装在/usr/lib/php5/20090626+lfs/目录下

ls /usr/lib/php5/20090626+lfs/ #查看是否在此文件夹下

2.修改php.ini

找到php.ini文件 然后打开在文件最后添加

extension=/usr/lib/php5/20090626+lfs/rube.so #我的扩展在/usr/lib/php5/20090626+lfs/rube.so 你可以相应修改

重启apache

五.进行测试

在你网站根目录创建test.php

vim test.php

<?php

echo hello();

结果为

Hello my first extention
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: