Home  >  Article  >  Backend Development  >  php扩展,一个helloworld的实现_PHP教程

php扩展,一个helloworld的实现_PHP教程

WBOY
WBOYOriginal
2016-07-13 09:56:14903browse

php扩展,一个helloworld的实现



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://www.bkjia.com/uploads/allimg/150425/04195BV2-0.png

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

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

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195A4C-2.png

 


data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195BN6-4.png



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

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195611A-6.png

 

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195643N-8.png

 

 

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195B205-10.png

最后出现的error,没有处理

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195643E-12.png

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195C593-14.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://www.bkjia.com/uploads/allimg/150425/04195A060-16.png

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195634F-18.png

 

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

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195CK7-20.png

 

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/0419562418-22.png

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195624c-24.png

 

 

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195B452-26.png

 

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

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195624O-28.png

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

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195C025-30.png

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

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

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195639D-32.png

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

data-cke-saved-src=http://www.bkjia.com/uploads/allimg/150425/04195A5P-34.png

 

 

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

Segmentation fault” (core dumped)

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

 

 

 

 

 

 





www.bkjia.comtruehttp://www.bkjia.com/PHPjc/989127.htmlTechArticlephp扩展,一个helloworld的实现 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-2...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn