最近在公司作的事情就是php扩展开发,虽然我只负责c++代码的编写,可是了解扩展开发的流程仍是颇有必要的。php
(本文介绍的是动态扩展,对静态扩展有兴趣的读者可自行google)html
php扩展开发环境搭建可参考:nginx
假设咱们须要增长一个函数echodemo_string,对应的php代码以下:c++
function echodemo_string($param) { $result = "your input is $param"; return $result; }
1. 建立扩展框架vim
这里要用到一个工具:ext_skel,它位于php源码目录的ext目录下。框架
假设扩展的名字为echodemo。函数
首先进入ext目录,php-fpm
建立文件echodemo.skel,编辑文件内容工具
string echodemo_string(string param)
而后执行:post
./ext_skel --extname=echodemo --proto=echodemo.skel
执行完毕会生成 echodemo 目录,目录包含以下内容:
2. 修改配置
打开config.m4,将第十、十一、12行前面的dnl去掉,dnl表示注释。
3. 实现功能
打开echodemo.c,echodemo_string函数定义以下:
修改该函数实现咱们须要的功能,最终实现以下:
(vim主题太丑了,我得换换。。。)
4. 编译安装扩展
这里须要用到phpize生成configure文件,在个人机器上,phpize位于/usr/local/php/bin目录。
phpize ./configure --with-php-config=/usr/local/php/bin/php-config make make install
当出现 "Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/",表示新的扩展 echodemo.so 已经安装完成。
此时还须要作的一件事就是修改 php.ini 文件。
不知道 php.ini 文件在哪?直接 php -i | grep php.ini 。个人在 /usr/local/php/lib 目录下。
文件末尾追加一行:
extension=echodemo.so
5. 验证安装
重启php-fpm:service php-fpm restart,
检查扩展是否加载:
php -m | grep echodemo
若是顺利,终端会输出 echodemo。
检查扩展代码是否正确:
php -r "echo echodemo_string('hello world');"
注意,我外部用的双引号,函数参数用的单引号,这是为了不一些转义错误。
参考资料:
最后配张图: