当前位置: 网学 > 编程文档 > JSP > 正文

编写php的extension实例的方法

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/17
下载{$ArticleTitle}原创论文样式
    一、说明
    前端时间因为客户的原因折腾了一下asp的扩展,在ATL的帮助下写一个asp的模块还是很容易的。不巧的时刚刚折腾完asp的COM就碰到另一个客户的问题。客户想给系统集成ICBC的接口,但是用ICBC的接口需要用他们的提供的库函数去
 
1. sign对发送的数据进行签名
2. getcertid获取用户证书的版本
3. verifySign对签名后的数据进行验证
 
问题是ICBC只给了现成的COM组件,意味在只能在Win的主机上使用。俺们公司只有linux的主机,在*nix上就要自己想办法调用ICBC给的静态库了。对此我们有两个想法
 
1.用ICBC的静态库做一个独立的执行文件,用PHP的系统调用函数来执行这个独立的执行文件
 
2.将ICBC的静态库做出一个PHP的扩展
 
方法一应该比较简单,但是远不如方法二的灵活。搞成PHP的扩展,只要服务器编译一次,服务器上的所有客户都可以用的。
 
有ASP的前科,俺觉得搞个PHP的也不是什么难事。操起google搜了一通,结果发现Zend已经写了一个如何编写php extension的教程:
 
http://devzone.zend.com/article/1021-Extension-Writing-Part-I-Introduction-to-PHP-and-Zend
 
 
浏览完牛人的大作,更是信心十足,php的扩展其实很简单,分七步走:
 
1. 制作编译配置文件:config.m4
 
2. 执行phpize生成扩展的框架
 
3. 在生成的php_xxx.h中声明自己写的函数
 
4. 在xxx.c中实现自己的函数
 
5. 编译自己的扩展
 
6. 将生成的xxx.so拷贝到php.ini中指定的extensions_dir
 
7. 在php.ini中打开xxx.so的调用
 
 
此问题问题唯一搞的地方就是在config.m4中折腾出正确的Makefile,因为Zend的教程中没有提到,俺自己也折腾了好久,才搞出来。
 
二、实际操作
1.建立工作环境
 
将php源码包解开,我的版本的php-4.4.4,转到源码包中的ext目录建立一个新的目录叫icbc,然后在icbc目录下touch三个文件config.m4、php_icbc.h、icbc.c
 
2.建立config.m4 内容如下:
 
PHP_ARG_ENABLE(icbc, whether to enable ICBC support,
[ --enable-icbc Enable ICBC support])

if test \"$PHP_ICBC\" = \"yes\"; then
  AC_DEFINE(HAVE_ICBC, 1, [Whether you have ICBC])

  if test -f ./libicbcapi.a; then
      PHP_ADD_LIBRARY_WITH_PATH(icbcapi, ./, ICBCAPI_SHARED_LIBADD)
      PHP_SUBST(ICBCAPI_SHARED_LIBADD)
      AC_MSG_RESULT(checking for libicbcapi.a is OK)
  else
      AC_MSG_RESULT(libicbcapi.a not found)
      AC_MSG_ERROR(Please make sure the libicbcapi.a is in current directory) [Page]
  fi

  PHP_NEW_EXTENSION(icbc, icbc.c, $ext_shared)
fi


第三行判断是否要启用icbc扩展,
第五行判断ICBC的静态库是否在当前目录(phpdir/ext/icbc)下
第六、七行将ICBC的静态库加入到编译环境中
3.在php_icbc.h中声明我们要导出的函数icbc_sign、icbc_vsign、icbc_getCertID
 
#ifndef PHP_ICBC_H
#define PHP_ICBC_H
extern&nbs
  • 上一篇资讯: JS代码格式化工具
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号