php调用c接口无错版介绍


Posted in PHP onMarch 11, 2014

1.首先是要安装好PHP

2.进入PHP的下载解压目录下的ext目录
#cd /root/php-5.3.6/ext
#./ext_skel --extname=hmc

说明:
./ext_skel --extname=module_name
module_name是你自己可以选择的扩展模块的名字,例如我选择的hmc。执行工具后会自动在ext目录下建立你选择的module_name名字的目录,里面已经生成了相关的代码,这些代码中只需要调整config.m4文件中的三行注释就可以正常的编译带这个自定义扩展模块的php了。

3.修改config.m4
可以将生成的module目录复制到任意希望放置的地方
进入hmc目录
vi config.m4
使用文本编辑器打开config.m4文件
根据你自己的选择将
dnl PHP_ARG_WITH(hmc, for hmc support,
dnl Make sure that the comment is aligned:
dnl [ --with-hmc Include hmc support])
修改成
PHP_ARG_WITH(hmc for hmc support,
Make sure that the comment is aligned:
[ --with-hmc Include hmc support])
或者将
dnl PHP_ARG_ENABLE(hmc, whether to enable hmc support,
dnl Make sure that the comment is aligned:
dnl [ --enable-hmc Enable hmc support])
修改成
PHP_ARG_ENABLE(hmc, whether to enable hmc support,
Make sure that the comment is aligned:
[ --enable-hmc Enable hmc support])

一般我会选择后者,然后保存退出。

4.修改.c和.h文件代码
Vi hmc.c
将文件其中的下列代码进行修改
/* Every user visible function must have an entry in hmc_functions[].
*/
const zend_function_entry hmc_functions[] = {
PHP_FE(say_hello, NULL) /* 添加着一行代码 */
PHP_FE(confirm_hmc_compiled, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in hmc_functions[] */
};

在文件的最后添加下列代码
PHP_FUNCTION(say_hello)
{
zend_printf("hello world\n");
}
保存文件退出

vi php_hmc.h
在文件中PHP_FUNCTION(confirm_hmc_compiled);一行前面添加下面的代码
PHP_FUNCTION(say_hello);
保存文件退出

5.编译安装
#phpize
#./configure --enable-hmc
#make
#make install
应该在php的modules目录下有一个hmc.so文件,不同的机器位置会不一样

php调用c接口无错版介绍

6.修改PHP配置
编辑php.ini,把扩展加入进去:
在[PHP]模块下增加:
extension = hmc.so
重启Httpd
#service httpd restart

7.php调用
建立一个c.php文件在对应的www目录下
<?
say_hello();
?>
这时浏览器应该输出:
hello world

8.调试
可以在命令行下输入
#php ?q c.php
需要进入当前的www目录下

查看是否安装好模块可以用phpinfo()

php调用c接口无错版介绍

也可以适用php -m命令
先用
#which php
找到php所在目录,不同机器目录不一样
#/usr/bin/php -m
php调用c接口无错版介绍

9.带参数的函数
Vi hmc.c
修改最后的say_hello函数内容如下:
PHP_FUNCTION(say_hello)
{
zval **yourname;
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE)
{
WRONG_PARAM_COUNT;
}
zend_printf("hello world, %s\n", Z_STRVAL_PP(yourname));
}

修改c.php为
<?
say_hello(“清清月儿");
?>

PHP 相关文章推荐
PHP中在数据库中保存Checkbox数据(2)
Oct 09 PHP
php二分法在IP地址查询中的应用
Aug 12 PHP
在php中判断一个请求是ajax请求还是普通请求的方法
Jun 28 PHP
php 删除一个数组中的某个值.兼容多维数组!
Feb 18 PHP
php全排列递归算法代码
Oct 09 PHP
php备份数据库类分享
Apr 14 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 PHP
PHP程序员必须知道的两种日志实例分析
May 14 PHP
PHP开发API接口签名生成及验证操作示例
May 27 PHP
Aliyun Linux 编译安装 php7.3 tengine2.3.2 mysql8.0 redis5的过程详解
Oct 20 PHP
PHP goto语句简介和使用实例
Mar 11 #PHP
php调用C代码的实现方法
Mar 11 #PHP
PHP中isset()和unset()函数的用法小结
Mar 11 #PHP
PHP调用JAVA的WebService简单实例
Mar 11 #PHP
php的webservice的wsdl的XML无法显示问题的解决方法
Mar 11 #PHP
Yii操作数据库的3种方法
Mar 11 #PHP
php导出excel格式数据问题
Mar 11 #PHP
You might like
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
php 中的信号处理操作实例详解
2020/03/04 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
jQuery fadeTo方法调整图片的透明度使用介绍
2013/05/06 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
javascript实现数组去重的多种方法
2016/03/14 Javascript
node.js连接mongoDB数据库 快速搭建自己的web服务
2016/04/17 Javascript
JS实现图片剪裁并预览效果
2016/08/12 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
基于Angular.js实现的触摸滑动动画实例代码
2017/02/19 Javascript
jQuery选择器之属性过滤选择器详解
2017/09/28 jQuery
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
javascript+css实现进度条效果
2020/03/25 Javascript
Vue路由权限控制解析
2020/11/09 Javascript
python3生成随机数实例
2014/10/20 Python
在Python的Django框架下使用django-tagging的教程
2015/05/30 Python
python实现求解列表中元素的排列和组合问题
2018/03/15 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
生产车间班组长岗位职责
2014/01/06 职场文书
安全责任协议书
2014/04/21 职场文书
2015年大班保育员工作总结
2015/05/18 职场文书
2019财务转正述职报告
2019/06/27 职场文书
人事部:年度述职报告范文
2019/07/12 职场文书
Redis如何实现分布式锁
2021/08/23 Redis
Lakehouse数据湖并发控制陷阱分析
2022/03/31 Oracle