用c扩展你的php

本文以centos系统为例,来编译最新的php5.6.7版本的扩展,首先我们下载了最新的源码包,放在了/root/php-5.6.7.tar.gz

php编译扩展有两个形式,一个是动态编译(.so),一个是静态编译,本文将先介绍静态编译扩展的方法。

1.下载,解压源码包

wget  http://cn2.php.net/distributions/php-5.6.7.tar.gz

tar xvf php-5.6.7.tar.gz,在/root/下面会生成个php-5.6.7文件夹。

2.创建函数定义文件def

比如想创建self_concat函数,首先在一个目录里面新建个myfunctions.def文件

将下面的内容复制进去

string self_concat(string str, int n)

假设def路径为/root/myfunctions.def

3.生成扩展框架

cd php-5.6.7/ext/
./ext_skel --extname=myfunctions --proto=/root/myfunctions.def

该命令会在ext目录下面生成myfunctions文件夹,同时会显示如下字符

20150328000739

我们后面创建扩展可以参考上面的步骤了,首先

第一步,cd到上一级目录里

第二步,编辑config.m4文件,其实就是m4宏预处理文件

找到如下代码

20150328001046

改为

20150328001104

其实就是把

dnl PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,

dnl [ –enable-myfunctions Enable myfunctions support])

这两段的前面注释字符 dnl去掉,看截图很明白了

第三步,运行 ./buildconf –force命令,可能会产生如下错误

Forcing buildconf
Removing configure caches
buildconf: checking installation…
buildconf: autoconf not found.
You need autoconf version 2.59 or newer installed
to build PHP from Git.
make: *** [buildmk.stamp] 错误 1

ubuntu 参考下面解决

sudo apt-get install autoconf

centos参考下面解决

yum install autoconf

执行后再试试./buildconf –force命令

成功后应该是如下字符

Forcing buildconf
Removing configure caches
rebuilding configure
rebuilding main/php_config.h.in

查看是否成功,执行如下命令

./configure --help | grep myfunctions

返回如下说明成功了

20150328001741

第四步,configure

./configure  --enable-myfunctions

第五步,make

20150328004451

第六步,测试编译是否成功

运行

./sapi/cli/php -f ./ext/myfunctions/myfunctions.php

20150328004553

 

如果成功了那就可以编写c代码了,然后make.

 

此条目发表在笔记分类目录,贴了, 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注