PHP扩展开发入门教程

一直想写PHP扩展开发教程,真正要写的时候不知道从何下手,也总感觉理解不到位。先入门下手,以后再分享调用C开发的.so动态库。不得不说PHP的成功原因之一有大量可以使用的扩展。

为什么使用扩展

1、开发未支持的技术。比如想让PHP支持新的技术或者数据库等。

2、应用非常注重效率。

实践

需求:调用hello_world() 函数 返回  Hello World! 入门教程,先使用静态编译。

php中实现非常简单,就不在此累赘了。

一、生成扩展代码

在UNIX下一个叫ext_skel的脚本被用于建立扩展的骨架,骨架信息从一个描述扩展接口的定义文件中取得。

执行如下代码:


#./ext_skel --extname=hello_world

生成代码框架如下:

 

二、修改配置文件

修改config.m4文件。如下所示


PHP_ARG_ENABLE(hello_world, whether to enable hello_world support, 

dnl Make sure that the comment is aligned:

[ --enable-hello_world Enable hello_world support]) 

如下图所示:

PHP_ARG_ENABLE和PHP_ARG_WITH区别:其实两者并没有什么本质的不同,只不过enable多代表不依赖外部库便可以直接编译,而with大多需要依赖于第三方的lib。

三、修改源码文件

修改hello_world.c文件

找到PHP_FUNCTION(confirm_hello_world_compiled) 修改为PHP_FUNCTION(hello_world)

该函数中具体代码如下所示:


PHP_FUNCTION(hello_world)

 { 

char *str; 

str = estrdup("Hello World!"); 

RETURN_STRING(str, 0); 

} 

 

修改php_hello_world.h文件

找到PHP_FUNCTION(confirm_hello_world_compiled) 修改为PHP_FUNCTION(hello_world)

四、编译扩展

找到php已经安装程序的phpize文件。

#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install

phpize帮助我们根据config.m4文件生成一个configure脚本、Makefile等文件。

以上的php路径请修改为自己的文件位置。最终在php的扩展目录module生成目标文件 hello_world.so。

五、添加扩展

修改php.ini文件,添加hello_world.so 扩展。

php文件中执行如下代码:


echo hello_world();

显示结果为:Hello World!

畅想

php扩展看似很酷,但是实际生产中很难使用。原因如下:

1、需要C基础,难学。

2、需要团队进行维护,如果只是一个人进行维护的话,对于后续维护的人压力山大。这方面人才少。

3、目前小流量根本使用不到。如果到需要用扩展优化性能的地步时候,说明网站的访问量相当可观的。一些企业转向了Java。放弃PHP。

4、PHP不适合做密集型计算。

这次就分享点简单的入门教程。下次分享一个小的案例。

 

友情链接

1、PHP扩展开发及内核应用

2、用C/C++扩展你的PHP

本条目发布于。属于PHP分类。作者是

关于莫飞

总有那么一件事值得你去坚持!一个有理想的人,这辈子未必会实现理想,但是他在追求理想的路上遇到的风景,这是没有理想的人到死也不曾有过的!

PHP扩展开发入门教程》上有3条评论

发表评论

电子邮件地址不会被公开。