为了提高逼格,我决定自己实现PHP的扩展
一、步骤过程
1、编写预定义文件
#vim /root/mark_function_module.def
内容为
int a(int x,int y)
2、生成扩展目录(mark_function_module为模块名)
#cd /usr/local/php/ext
#./ext_skel --extname=mark_function_module --proto=/root/mark_function_module.def
3、修改config.m4
#vim /usr/local/php/ext/mark_function_module/config.m4
去掉dnl的注释
PHP_ARG_ENABLE(mark_function_module, whether to enable mark_function_module support,
Make sure that the comment is aligned:
[ --enable-mark_function_module Enable mark_function_module support])
4、修改 mark_function_module.c
#vim /usr/local/php/ext/mark_function_module/mark_function_module.c
定位/PHP_FUNCTION(a)
修改如下:
PHP_FUNCTION(a)
{
int argc = ZEND_NUM_ARGS();
int x;
int y;
int z;
if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
return;
z=x+y;
RETURN_LONG(z);
}
5、生成扩展库
#cd /usr/local/php/ext/mark_function_module
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install
6、复制生成的动态库到/usr/local/php/modules目录
生成的动态库会在
# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
复制
cp /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/mark_function_module.so /usr/local/php/modules/mark_function_module.so
7、修改php.ini
修改
extension_dir = "/usr/local/php/modules"
添加
extension=mark_function_module.so
8、重启apache
# /usr/local/apache/bin/apachectl restart
9、检查是否加载
# /usr/local/php/bin/php -m
10、编写程序测试
# vim /usr/local/apache/htdocs/test_ext.php
内容如下
echo a(1,2);
如果输出为3,表示可以调用了~说好的逼格
二、可能遇到的问题
1、步骤过程第五步的时候
执行/usr/local/php/bin/phpize可能会报错
Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script
解决方案
# wget http://ftp.gnu.org/gnu/m4/m4-1.4.9.tar.gz
# tar -zvxf m4-1.4.9.tar.gz
# cd m4-1.4.9/
# ./configure && make && make install
# wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.62.tar.gz
# tar -zvxf autoconf-2.62.tar.gz
# cd autoconf-2.62/
# ./configure && make && make install
然后再在mark_function_module的目录下,执行/usr/local/php/bin/phpize