知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > PHP编程

php扩展,一个helloworld的实现

发布时间:2015-05-27 19:17:52作者:知识屋



php -v
PHP 5.5.9-1ubuntu4.7 (cli) (built: Mar 16 2015 20:47:39)
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

配置参考文章:http://blog.csdn.net/niujiaming0819/article/details/8543028
本文也采用参考文章中的步骤过程为本机实现过程

step 1. 下载php源码包,php官网下载即可,本次使用的是php5.6.8版本
step 2. 解压压缩包,进入解压后的包(mysoft$ cd php-5.6.8/) ,同过 ls命令查看源码包中的文件目录,进入ext文件夹(cd ext)

data-cke-saved-src=http://file.zhishiwu.com/20150527/a5a55c3da0c062e1c683abbf18071705.png

step 3.建立扩展开发框架 ./ext_skel --extname=helloworld

执行上面的命令建立扩张开发的框架,这是你会发现ext文件夹下面多了一个叫helloworld的文件夹,同时命令行也输出了一些文本,

会提示你生成扩展的大致步骤。

data-cke-saved-src=http://file.zhishiwu.com/20150527/332ed703a6d6fcc3ad09d232ee550748.png

 


data-cke-saved-src=http://file.zhishiwu.com/20150527/d1a7c781b1b91587235d59383e3d0a77.png



step 4. 进入php源码的根目录, 编辑文件 vim ext/helloworld/config.m4

去掉这个文件中的几行注释大致会在第16-19行之间,具体版本也许不一样之后保存文件(:wq)

data-cke-saved-src=http://file.zhishiwu.com/20150527/dd7388fe574f90d19e1427e6eb4e8500.png

 

step 5. 在php源码根目录执行命令 ./buildconf --force

data-cke-saved-src=http://file.zhishiwu.com/20150527/efc422859cf5d5dff4fe4ca717fe543a.png

 

 

step 6. 在php源码的根目录编译php程序,注意命令为 ./configure --with-helloworld

data-cke-saved-src=http://file.zhishiwu.com/20150527/9953de61b084d9f6cedd4e4a26d220cb.png

最后出现的error,没有处理

data-cke-saved-src=http://file.zhishiwu.com/20150527/ccddf6b1d0ebf7ae03108a2e70e1ad1b.png

step 7. 进入我们的扩展目录helloworld,执行命令 phpize(通过 sudo apt-get install php5-dev 安装 phpize),此时你的扩展目录会生成很多文件,可以用于后期编译。

data-cke-saved-src=http://file.zhishiwu.com/20150527/e85ae9287f16127aaed3a39639767d21.png

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

data-cke-saved-src=http://file.zhishiwu.com/20150527/dbde687720a30669a27891abc8e31a39.png

data-cke-saved-src=http://file.zhishiwu.com/20150527/bb07c3a4f7a63315ac03bfb0f853956b.png

 

step 9 .进入扩展helloworld目录,编辑文件php_helloworld.h,在最后一行添加函数 PHP_FUNCTION(helloworldTest);

helloworldTest 可以改成你喜欢的名字,之后保存退出

data-cke-saved-src=http://file.zhishiwu.com/20150527/4175a29f3a9094039f9ae0cf275602bb.png

 

step 10. 用vim 打开helloword.c,在helloworld.c中实现我们的函数,之后 将helloworldTest函数加入到helloworld_functions[]中,保存退出

data-cke-saved-src=http://file.zhishiwu.com/20150527/5095bd60f8275d15c263bcf08b0a89c5.png

data-cke-saved-src=http://file.zhishiwu.com/20150527/244da916994a88be6f9e3a1f2cae3377.png

 

 

step 11.执行make命令 make 编译扩展,我在运行的过程中还是比较顺利的。如果出现错误,请认真看前面步骤是否有错,我在第一遍做的时候也有错一般都是前面步骤有问题。

data-cke-saved-src=http://file.zhishiwu.com/20150527/44ab2f435305bd819e15bf4a71865ea6.png

 

step12.将编译生成的helloworld.so 文件复制到你本机的php扩展目录

扩展目录可以通过 php -r phpinfo(); | grep extension_dir 查看本机php的扩展路径

data-cke-saved-src=http://file.zhishiwu.com/20150527/f1879c4cf1f931ec338e98a1923d9eeb.png

step 13.配置php.ini 开启 helloworld.so 扩展

查看php.ini 的位置(php -r phpinfo(); | grep php.ini )

data-cke-saved-src=http://file.zhishiwu.com/20150527/95b8397ec955b186b8a90bfe0b7a1dfb.png

vim 打开 php.ini 文件 sudo vim /etc/php5/cli/php.ini

在文件最后添加扩展 (extension=helloworld.so)

通过 php -r phpinfo(); | grep helloworld 测试

data-cke-saved-src=http://file.zhishiwu.com/20150527/b826ce86e2ef7afd5c4ea92b6b1e700f.png

step 14 .测试扩展(php -r echo helloworldTest();)

data-cke-saved-src=http://file.zhishiwu.com/20150527/30ee6082425c01682b5f5dd9ad5217e7.png

 

 

在这个过程中我曾按照原作者的步骤去尝试,结果会出现一个错误

Segmentation fault” (core dumped)

经过调试,时原作者在helloworld.c 文件中添加到helloworld_functions[] 时将 PHP_FE_END 换成了 {null,null,null} 而自己再编译的时候并没有出错却也给PHP_FE_END注释 了,修改之后,重新编译,复制就可以了。

 

 

 

 

 

 





(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜