用C语言写PHP扩展

1:预定义

在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def

内容是你希望定义的函数名以及参数:

int a(int x,int y)
string b(string str,int n)
 
2:到php源码目录的ext目录
#cd /usr/local/php-5.4.0/ext/
 
执行命令,生成对应扩展目录
#./ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def

3:修改config.m4

去掉dnl的注释

PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support,
Make sure that the comment is aligned:
[  --enable-caleng_module           Enable caleng_module support])

4:修改caleng_module.c

/* {{{ proto int a(int x, int y)*/
PHP_FUNCTION(a)
{int argc = ZEND_NUM_ARGS();int x;int y;int z;if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE) return;
z=x+y;RETURN_LONG(z);}
/* }}} *//* {{{ proto string b(string str, int n)*/
PHP_FUNCTION(b)
{char *str = NULL;int argc = ZEND_NUM_ARGS();int str_len;long n;char *result;char *ptr;int result_length;if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)return;result_length = str_len * n;result = (char *) emalloc(result_length + 1);ptr = result;while (n--) {memcpy(ptr, str, str_len);ptr += str_len;}*ptr = '\0';RETURN_STRINGL(result, result_length, 0);}
/* }}} */

5:生成扩展库

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

6:到php的对应extensions目录

如上图所示

#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

改目录下有生成的caleng_module.so文件

7:修改php.ini

php.ini如果找不到可以从phpinfo()打出的信息看到

#cd /usr/local/php/lib/

php.ini增加扩展信息

extension=caleng_module.so

8:重启Apache

# /usr/local/apache2/bin/apachectl restart

9:检查加载

/usr/local/php/bin/php -m

10:PHP调用

echo a(1,2);

输出 3  就说明成功了!

=================================

下面是原文

Linux下用C开发PHP扩展

一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13

一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13

#> cd /software/php-5.2.13/ext

二、假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:a--处理两个整型相加和b-处理字符串重复输出;

1、首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.def

int a(int x, int y)
string b(string str, int n)

2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module

#> ./ext_skel --extname=caleng_module --proto=caleng_module.def

3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签"dnl"去掉,修改后如下所示:

PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,

Make sure that the comment is aligned:

[  --enable-myfunctions           Enable myfunctions support])

4、完善函数a和b的功能: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.c

PHP_FUNCTION(a)
{
    int x, y, z;
   
    int argc = ZEND_NUM_ARGS();
 
    if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)
        return;
    z = x + y;
    RETURN_LONG(z);
}
PHP_FUNCTION(b)
{
    char *str = NULL;
    int argc = ZEND_NUM_ARGS();
    int str_len;
    long n;
    char *result;
    char *ptr;
    int result_length;
 
    if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)
        return;
    result_length = str_len * n;
    result = (char *) emalloc(result_length + 1);
    ptr = result;
    while (n--) {
        memcpy(ptr, str, str_len);
        ptr += str_len;
    }
    *ptr = '\0';
    RETURN_STRINGL(result, result_length, 0);
}

三、编译安装,假设php的安装目录为:/usr/localhost/webserver/php

#> cd /software/php-5.2.13/ext/caleng_module

#> /usr/localhost/webserver/php/bin/phpize

#> ./configure --with-php-config=/usr/localhost/webserver/php/bin/php-config

#> make

#> make install

现在将在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目录下生成caleng_module.so文件

在php.ini配置文件中加入: extension=caleng_module.so.

搞定收工

更多参考:http://blog.csdn.net/heiyeshuwu/article/details/3453854

http://blog.csdn.net/taft/article/details/596291

http://blog.sina.com.cn/s/blog_638f9da701012zk3.html

用C语言写PHP扩展相关推荐

  1. 用C语言写PHP扩展 linux

    1:预定义 在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def 内容是你希望定义的函数名以及参数: int a(int x,int y) string b(stri ...

  2. php c扩展的方式,php中使用C语言写扩展的方法

    php中使用C语言写扩展的方法 发布时间:2020-08-20 15:49:21 来源:亿速云 阅读:102 作者:小新 小编给大家分享一下php中使用C语言写扩展的方法,相信大部分人都还不怎么了解, ...

  3. python是c语言写的_python使用C语言写扩展示例

    对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 本文介绍如何用 C 语言来扩展 python.所举的例子是,为 python 添加一个设置字符串到 ...

  4. 访问外部扩展C语言编程,单片机C语言编程(系统扩展IC)8.ppt

    单片机C语言编程(系统扩展IC)8 第8章 单片机系统扩展 第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接 ...

  5. 除了 Python ,这些语言写的机器学习项目也很牛(二)

    2019独角兽企业重金招聘Python工程师标准>>> Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一.尤其是在机器学习,已 ...

  6. 如何用C语言编写PHP扩展的详解

    来源:http://www.jb51.net/article/38381.htm 本篇文章是对用C语言编写PHP扩展进行了详细的分析介绍,需要的朋友参考下 1:预定义 在home目录,也可以其他任意目 ...

  7. 除了 Python ,这些语言写的机器学习项目也很牛

    全世界只有3.14 % 的人关注了 数据与算法之美 Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一.尤其是在机器学习,已然是各大项目最偏爱的语 ...

  8. C 语言这么厉害,它自身是用什么语言写的?

    作者 | 刘欣 本文经授权转载自码农翻身(ID:coderising) 这是来自我的星球的一个提问:"C语言本身用什么语言写的?" 换个角度来问,其实是:C语言在运行之前,得编译才 ...

  9. C语言这么厉害,它自身又是用什么语言写的?

    这是来自我的星球的一个提问:"C语言本身用什么语言写的?" 换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语言本身来写 ...

最新文章

  1. angular select设置默认选中_改进 Angular + Jest 项目中组件测试的调试
  2. C++中的构造函数VS析构函数
  3. 奥比中光深度摄像头_奥比中光获得银联检测通行证,银联进入刷脸支付赛道
  4. (第二课)python学习之数据类型
  5. java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
  6. TCP/IP完整的基础介绍
  7. JMeter实现web接口测试实践举例
  8. jQuery插件素材网站
  9. apache php 503,宝塔linux面板 apache网站访问报错503 Service Unavailable解决
  10. 1 常用Windows命令大全
  11. PHP compact函数
  12. MDK 编译错误和警告 使用时遇到的小问题
  13. js生成二维码,中间有logo
  14. 异次元发卡源码/荔枝发卡V3.0二次元风格发卡网全开源源码/对接免签约支付接口
  15. 网络挖掘初探索(2)_NEO4J图可视化
  16. “反悔”贪心 烤鸡翅
  17. webAPP如何实现移动端拍照上传(Vue组件示例)?
  18. STM32基础11--模数转换(ADC)
  19. 联合国儿童基金会宣布与微软达成新合作
  20. 量化对冲基金的国内发展史

热门文章

  1. jquery发送put请求_浅谈GET,POST,PUT发送请求
  2. 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行
  3. php 面试mysql,mysql中优化必读
  4. ROS与深度相机入门教程:(2) 在ROS中驱动Intel D435i深度相机采集数据(遇到的问题)
  5. Linux那些事儿之我是Sysfs(10)sysfs 创建目录
  6. db2 linux 导入数据_「软件资料」-「软件使用」-Linux 导入、导出 MySQL 数据库命令...
  7. windows/linux计算文件 MD5值
  8. 基于C++CUDA实现全景图(2:1 Equirectangular Image)转换为天空盒图像
  9. Atom:Uncaught TypeError: Right-hand side of 'instanceof' is not callable(markdown-scroll-sync)
  10. webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序