免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2739 | 回复: 1
打印 上一主题 下一主题

如何利用C自定义实现PHP扩展 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-18 11:48 |只看该作者 |倒序浏览
如何利用C自定义实现PHP扩展




.由于有一部分代码需要加解密,所以需要扩展PHP模块,于是简单的使用base64来实现简单的加密算法。因为时间的关系,这里主要是对如何实现PHP扩展做一个概述和记录,并不涉及到加密算法的具体实现,等有空再补上。

1、环境:
centos 5
php 5.1.6
autoconf 2.59
automake 1.96
libtool
bison
flex
re2c

2、创建模块
2.1 转到php源码目录扩展包目录下
cd /usr/include/php/ext

2.2 创建一个叫做itbeing的文件夹(这里我们的模块名称就叫做itbeing了)
mkdir itbeing
cd itbeing

2.3 创建config.m4文件,config.m4 文件使用 GNU autoconf 语法编写,该文件的主要作用是 文件告诉系统构建系统哪些扩展 configure 选项是支持的,你需要哪些扩展库,以及哪些源文件要编译成它的一部分。

  1. 1.PHP_ARG_ENABLE(itbeing,
  2. 2.        [Whether to enable the "itbeing" extension],
  3. 3.        [  --enable-itbeing       Enable "itbeing" extension support])
  4. 4.  
  5. 5.if test $PHP_ITBEING != "no"; then
  6. 6.        PHP_SUBST(ITBEING_SHARED_LIBADD)
  7. 7.        PHP_NEW_EXTENSION(itbeing, itbeing.c, $ext_shared)
  8. 8.fi
复制代码
2.4 创建php_itbeing.h 头文件


  1. 1.#ifndef PHP_ITBEING_H
  2. 2./* Prevent double inclusion */
  3. 3.#define PHP_ITBEING_H
  4. 4.  
  5. 5./* Define extension properties */
  6. 6.#define PHP_ITBEING_EXTNAME "itbeing"
  7. 7.#define PHP_ITBEING_EXTVER "1.0"
  8. 8.  
  9. 9./* Import configure options
  10. 10. * when building outside of the
  11. 11. * PHP source tree */
  12. 12.#ifdef HAVE_CONFIG_H
  13. 13.#include "config.h"
  14. 14.#endif
  15. 15.  
  16. 16./* Include PHP standard Header */
  17. 17.#include "php.h"
  18. 18./*
  19. 19. * define the entry point symbole
  20. 20. * Zend will use when loading this module
  21. 21. */
  22. 22.extern zend_module_entry itbeing_module_entry;
  23. 23.#define phpext_itbeing_ptr &itbeing_module_entry
  24. 24.  
  25. 25.#endif /* PHP_ITBEING_H */
复制代码
2.5 创建itbeing.c 文件

  1. 1.#include "php_itbeing.h"
  2. 2.  
  3. 3.PHP_FUNCTION(itbeing_sayhi)
  4. 4.{
  5. 5.        char *name;
  6. 6.        int name_len;
  7. 7.  
  8. 8.        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
  9. 9.                &name, &name_len) == FAILURE)
  10. 10.        {
  11. 11.                RETURN_NULL();
  12. 12.        }
  13. 13.  
  14. 14.        php_printf("Hi, ");
  15. 15.        PHPWRITE(name, name_len);
  16. 16.        php_printf("!\n");
  17. 17.}
  18. 18.  
  19. 19.static function_entry php_itbeing_functions[] = {
  20. 20.        PHP_FE(itbeing_sayhi, NULL)
  21. 21.        { NULL, NULL, NULL }
  22. 22.};
  23. 23.  
  24. 24.zend_module_entry itbeing_module_entry = {
  25. 25.#if ZEND_MODULE_API_NO >= 20010901
  26. 26.        STANDARD_MODULE_HEADER,
  27. 27.#endif
  28. 28.        PHP_ITBEING_EXTNAME,
  29. 29.        php_itbeing_functions, /* Functions */
  30. 30.        NULL, /* MINIT */
  31. 31.        NULL, /* MSHUTDOWN */
  32. 32.        NULL, /* RINIT */
  33. 33.        NULL, /* RSHUTDOWN */
  34. 34.        NULL, /* MINFO */
  35. 35.#if ZEND_MODULE_API_NO >= 20010901
  36. 36.        PHP_ITBEING_EXTVER,
  37. 37.#endif
  38. 38.        STANDARD_MODULE_PROPERTIES
  39. 39.};
  40. 40.  
  41. 41.#ifdef COMPILE_DL_ITBEING
  42. 42.ZEND_GET_MODULE(itbeing)
  43. 43.#endif
复制代码
3、编译模块
3.1 phpize
3.2 ./config -enable-itbeing
3.3 make
3.4 cp modules/itbeing.so /usr/lib/php/modules
3.5 vim /etc/php.ini 添加extension = itbeing.so

测试:php -r “itbeing_sayhi(’kokko’)”
结果:Hi,kokko



原文:http://www.kokkowon.com/archives/981

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2011-08-18 12:18 |只看该作者
学习学习了啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP