博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用C创建php扩展
阅读量:7218 次
发布时间:2019-06-29

本文共 2402 字,大约阅读时间需要 8 分钟。

使用C创建php扩展

优点:

1.提高运行效率。

2.降低php复杂度,可以直接调用扩展方法实现功能。

3.方便与第三方库交互。

缺点:

1.开发比php复杂。

2.可维护性降低。

3.开发周期变长。php开发,发现问题后,只要修复问题,即可见到效果。如果使用扩展,修复后需要重新编译,重启服务,才能见到效果。

首先,假定需要实现一个方法:将url字符串转换成超链接

php实现方法:

'.$name.'';}echo strtolink('http://blog.csdn.net/fdipzone', 'fdipzone blog', 1);?>
现在使用C来做这个方法的扩展,开发php扩展需要使用ext_skel工具包,此工具包在php安装包的 /ext/ 中,例如:php-5.3.15/ext/ext_skel

1.创建 skel 文件,保存为 strtolink.skel

string strtolink(string url, string name, int openwin)
2.创建扩展框架

./ext_skel --extname=strtolink --proto=strtolink.skelcd strtolink
3.修改配置文件 config.m4

将这10,11,12三行前面的 dnl 去掉dnl PHP_ARG_WITH(strtolink, for strtolink support,dnl Make sure that the comment is aligned:dnl [  --with-strtolink             Include strtolink support])即修改为:PHP_ARG_WITH(strtolink, for strtolink support,Make sure that the comment is aligned:[  --with-strtolink             Include strtolink support])
4.实现功能,修改strtolink.c,将PHP_FUNCTION(strtolink)这个方法修改为:

PHP_FUNCTION(strtolink){        char *url = NULL;        char *name = NULL;        int argc = ZEND_NUM_ARGS();        int url_len;        int name_len;        long openwin = 0;        char *opentag;        char *result;        if (zend_parse_parameters(argc TSRMLS_CC, "s|sl", &url, &url_len, &name, &name_len, &openwin) == FAILURE)                return;        if (name == NULL || strlen(name)==0){                name = url;        }        if (openwin == 1){                opentag = " target=\"_blank\" ";        }else{                opentag = "";        }        url_len = spprintf(&result, 0, "%s", url, opentag, name);        RETURN_STRINGL(result, url_len, 0);        php_error(E_WARNING, "strtolink: not yet implemented");}

5.编译扩展

phpizesudo ./configuresudo makesudo make test
make 如果出现 error: ‘PHP_FE_END’ undeclared here (not in a function)

使用下面语句可解决,之后再重新编译

sed -i 's|PHP_FE_END|{NULL,NULL,NULL}|' ./strtolink.c  sed -i 's|ZEND_MOD_END|{NULL,NULL,NULL}|' ./strtolink.c

成功后在strtolink/modules 下找到strtolink.so 文件

6.添加扩展

将strtolink.so 复制到 php 扩展目录,可以通过phpinfo的 extension_dir 查看扩展目录位置

sudo cp strtolink.so /usr/lib/php5/20090626/strtolink.so
修改php.ini ,在最后添加 extension="strtolink.so"

重启动apache,phpinfo中会见到新扩展 strtolink

7.使用扩展

用回之前的php,只是把strtolink function 去掉便可。此方法已在扩展实现,可直接调用。

输出:

fdipzone blogfdipzone blogfdipzone bloghttp://blog.csdn.net/fdipzonehttp://blog.csdn.net/fdipzonehttp://blog.csdn.net/fdipzone

转载于:https://www.cnblogs.com/fdipzone/p/3715052.html

你可能感兴趣的文章
Memcached的原理与应用(未完)
查看>>
基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者
查看>>
mysql总结
查看>>
Navicat for MySQL版本更新至v11.2.12,修复多项问题|附下载
查看>>
整理 JAVA中的IO流 (字符流和字节流两个大类)
查看>>
uefi与win8 (根据网络资料整理)
查看>>
Eclipse优化
查看>>
Log4j tutorial with Tomcat examples
查看>>
Kong 网关
查看>>
三层结构视频中的DBHelper.cs
查看>>
[转载] 信息系统项目管理师视频教程——18 项目沟通管理
查看>>
在Windows下建立QT开发环境
查看>>
Jedis、JedisPool、ShardedJedis和ShardedJedisPool,java对redis的基本操作
查看>>
[转载] 致命伴侣
查看>>
HTML5 localStorage本地存储实际应用举例
查看>>
Scala访问修饰符
查看>>
实习感悟
查看>>
产品经理网站小结
查看>>
Bootstrap 附加导航插件
查看>>
如何设置启动SMTP、POP3以及IMAP4的SSL服务端口?
查看>>