本文通过非常快速的方式讲解了如何制作一个PHP 5.4 环境的扩展(PHP Extension)
希望能够在图文的方式下让想快速学习的朋友了解一下制作过程。
需求:我们要写一个叫two的扩展,这个扩展里面有一个函数叫two_test
功能是输入一个字符串‘hello’ 则,返回this is two: 你输入的字符串是“hello”
一:先下载一份php源码---》地址
二: 生成扩展架构
1. 解压源码:
andy@ubuntu:~$ tar -zxvf php-5.4.14.tar.gz 对源码进行解包
2. 生成扩展架构:
php为了扩展开发方便提供了一个类似生成器的工具,ext_skel在php源码的ext目录下面
我们需要执行它并且指定扩展的名字,然后它会帮我们生成这个扩展的架构
andy@ubuntu:~$ cd php-5.4.14/ext/
andy@ubuntu:~/php-5.4.14/ext$ sudo ./ext_skel --extname=two
三:修改配置:需要将扩展(two)下面的config.m4中的16,17,18三行前面的dnl删除掉
andy@ubuntu:~/php-5.4.14/ext$ cd two/
andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim config.m4
未修改之前:
修改之后:
四:编写代码
1.andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim php_two.h
找到第45行:PHP_FUNCTION(confirm_heiyeluren_compiled);
在这行下面新增一行:PHP_FUNCTION(two_test);
修改前:
修改后:
2.andy@ubuntu:~/php-5.4.14/ext/two$ sudo vim two.c
找到第42行:zend_function_entry heiyeluren_functions
在这里面增加一行PHP_FE(two, NULL)
修改前:
修改后:
最后:增加函数功能代码
PHP_FUNCTION(two_test)
{
char *arg = NULL;
int arg_len, len;
char *strg;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
len = spprintf(&strg, 0, "this is two: 你输入的字符串是: %s/n", arg);
RETURN_STRINGL(strg, len, 0);
}
五:编译安装 这里的命令都在扩展two的目录下执行的
andy@ubuntu:~/php-5.4.14/ext/two$ sudo phpize
如果没有phpize要安装php5-dev 命令sudo apt-get install php5-dev
andy@ubuntu:~/php-5.4.14/ext/two$ sudo ./configure --with-php-config=/usr/bin/php-config
andy@ubuntu:~/php-5.4.14/ext/two$ sudo make
andy@ubuntu:~/php-5.4.14/ext/two$ sudo make test
andy@ubuntu:~/php-5.4.14/ext/two$ sudo make install
这时会出现:
可以到/usr/lib/php5/20100525/这个文件夹中去看看有没有一个叫two.so如果有就说明成功了
六:加载模块
编辑php.ini 加入extension = two.so
注意:如果你不存在扩展文件目录,或者安装报错,那么可以自行建立这个目录,然后把扩展拷贝到目录下,然后记得把 php.ini 文件中的 extension_dir 修改为该目录:
来到php.ini 同目录下的conf.d下创建two.ini并写入extenstion=two.so 只需要这一行就行 。
七:重启apache
andy@ubuntu:/etc/php5/apache2/conf.d$ sudo /etc/init.d/apache2 restart
输出 phpinfo() ,查找two能看到
看看函数是否存在并且调用,在web目录下建立:two.php
<?php
echo two_test('hello');
?>
结果如图:
现在php扩展已经制作成功了!