用C语言写PHP扩展
用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
#> 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扩展相关推荐
- 用C语言写PHP扩展 linux
1:预定义 在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def 内容是你希望定义的函数名以及参数: int a(int x,int y) string b(stri ...
- php c扩展的方式,php中使用C语言写扩展的方法
php中使用C语言写扩展的方法 发布时间:2020-08-20 15:49:21 来源:亿速云 阅读:102 作者:小新 小编给大家分享一下php中使用C语言写扩展的方法,相信大部分人都还不怎么了解, ...
- python是c语言写的_python使用C语言写扩展示例
对python这个高级语言感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧! 本文介绍如何用 C 语言来扩展 python.所举的例子是,为 python 添加一个设置字符串到 ...
- 访问外部扩展C语言编程,单片机C语言编程(系统扩展IC)8.ppt
单片机C语言编程(系统扩展IC)8 第8章 单片机系统扩展 第8章 单片机系统扩展 目 录 8.1 扩展并行三总线 8.2 扩展简单并行输入/输出口 8.3 扩展并行数据存储器 8.4 串行扩展总线接 ...
- 除了 Python ,这些语言写的机器学习项目也很牛(二)
2019独角兽企业重金招聘Python工程师标准>>> Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一.尤其是在机器学习,已 ...
- 如何用C语言编写PHP扩展的详解
来源:http://www.jb51.net/article/38381.htm 本篇文章是对用C语言编写PHP扩展进行了详细的分析介绍,需要的朋友参考下 1:预定义 在home目录,也可以其他任意目 ...
- 除了 Python ,这些语言写的机器学习项目也很牛
全世界只有3.14 % 的人关注了 数据与算法之美 Python 由于本身的易用优势和强大的工具库储备,成为了在人工智能及其它相关科学领域中最常用的语言之一.尤其是在机器学习,已然是各大项目最偏爱的语 ...
- C 语言这么厉害,它自身是用什么语言写的?
作者 | 刘欣 本文经授权转载自码农翻身(ID:coderising) 这是来自我的星球的一个提问:"C语言本身用什么语言写的?" 换个角度来问,其实是:C语言在运行之前,得编译才 ...
- C语言这么厉害,它自身又是用什么语言写的?
这是来自我的星球的一个提问:"C语言本身用什么语言写的?" 换个角度来问,其实是:C语言在运行之前,得编译才行,那C语言的编译器从哪里来? 用什么语言来写的?如果是用C语言本身来写 ...
最新文章
- angular select设置默认选中_改进 Angular + Jest 项目中组件测试的调试
- C++中的构造函数VS析构函数
- 奥比中光深度摄像头_奥比中光获得银联检测通行证,银联进入刷脸支付赛道
- (第二课)python学习之数据类型
- java socket 报文解析_java socket解析和发送二进制报文工具(附java和C++转化问题)
- TCP/IP完整的基础介绍
- JMeter实现web接口测试实践举例
- jQuery插件素材网站
- apache php 503,宝塔linux面板 apache网站访问报错503 Service Unavailable解决
- 1 常用Windows命令大全
- PHP compact函数
- MDK 编译错误和警告 使用时遇到的小问题
- js生成二维码,中间有logo
- 异次元发卡源码/荔枝发卡V3.0二次元风格发卡网全开源源码/对接免签约支付接口
- 网络挖掘初探索(2)_NEO4J图可视化
- “反悔”贪心 烤鸡翅
- webAPP如何实现移动端拍照上传(Vue组件示例)?
- STM32基础11--模数转换(ADC)
- 联合国儿童基金会宣布与微软达成新合作
- 量化对冲基金的国内发展史
热门文章
- jquery发送put请求_浅谈GET,POST,PUT发送请求
- 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行
- php 面试mysql,mysql中优化必读
- ROS与深度相机入门教程:(2) 在ROS中驱动Intel D435i深度相机采集数据(遇到的问题)
- Linux那些事儿之我是Sysfs(10)sysfs 创建目录
- db2 linux 导入数据_「软件资料」-「软件使用」-Linux 导入、导出 MySQL 数据库命令...
- windows/linux计算文件 MD5值
- 基于C++CUDA实现全景图(2:1 Equirectangular Image)转换为天空盒图像
- Atom:Uncaught TypeError: Right-hand side of 'instanceof' is not callable(markdown-scroll-sync)
- webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序