php扩展,一个helloworld的实现
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
with Xdebug v2.2.3, Copyright (c) 2002-2013, by Derick Rethans
执行上面的命令建立扩张开发的框架,这是你会发现ext文件夹下面多了一个叫helloworld的文件夹,同时命令行也输出了一些文本,
会提示你生成扩展的大致步骤。
step 4. 进入php源码的根目录, 编辑文件 vim ext/helloworld/config.m4
去掉这个文件中的几行注释大致会在第16-19行之间,具体版本也许不一样之后保存文件(:wq)
step 5. 在php源码根目录执行命令 ./buildconf --force
step 6. 在php源码的根目录编译php程序,注意命令为 ./configure --with-helloworld
最后出现的error,没有处理
step 7. 进入我们的扩展目录helloworld,执行命令 phpize(通过 sudo apt-get install php5-dev 安装 phpize),此时你的扩展目录会生成很多文件,可以用于后期编译。
step 8.在helloworld目录编译我们的扩展 ./configure --with-php-config=/usr/bin/php-config(使用你自己环境的php-config) --enable-helloworld
你可以通过一条命令查找你的php-config文件的位置(find / -name php-config)如图:我的地址为/usr/bin/php-config
step 9 .进入扩展helloworld目录,编辑文件php_helloworld.h,在最后一行添加函数 PHP_FUNCTION(helloworldTest);
helloworldTest 可以改成你喜欢的名字,之后保存退出
step 10. 用vim 打开helloword.c,在helloworld.c中实现我们的函数,之后 将helloworldTest函数加入到helloworld_functions[]中,保存退出
step 11.执行make命令 make 编译扩展,我在运行的过程中还是比较顺利的。如果出现错误,请认真看前面步骤是否有错,我在第一遍做的时候也有错一般都是前面步骤有问题。
step12.将编译生成的helloworld.so 文件复制到你本机的php扩展目录
扩展目录可以通过 php -r "phpinfo();" | grep extension_dir 查看本机php的扩展路径
step 13.配置php.ini 开启 helloworld.so 扩展
查看php.ini 的位置(php -r "phpinfo();" | grep "php.ini" )
vim 打开 php.ini 文件 sudo vim /etc/php5/cli/php.ini
在文件最后添加扩展 (extension=helloworld.so)
通过 php -r "phpinfo();" | grep helloworld 测试
step 14 .测试扩展(php -r "echo helloworldTest();")
在这个过程中我曾按照原作者的步骤去尝试,结果会出现一个错误
Segmentation fault” (core dumped)
经过调试,时原作者在helloworld.c 文件中添加到helloworld_functions[] 时将 PHP_FE_END 换成了 {null,null,null} 而自己再编译的时候并没有出错却也给PHP_FE_END注释 了,修改之后,重新编译,复制就可以了。
参考原文文章作者讲的很详细,只是在整个过程中确实会有不同的问题出现,只是我们应该有一个解决问题的思路,和一个寻找答案的方法。我也是很久么有碰技术了,近期要帮朋友做两个网站,之余尝试了一下php的扩展,感觉更重要的时思想。
原文参考:http://blog.csdn.net/niujiaming0819/article/details/8543028
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。