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&amp;&amp;mysql)四
Oct 09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
May 14 PHP
php利用cookie实现访问次数统计代码
May 19 PHP
LotusPhp笔记之:Cookie组件的使用详解
May 06 PHP
IIS+fastcgi下PHP运行超时问题的解决办法详解
Jun 20 PHP
php网站地图生成类示例
Jan 13 PHP
简单实用的PHP防注入类实例
Dec 05 PHP
php简单计算年龄的方法(周岁与虚岁)
Dec 06 PHP
php file_get_contents取文件中数组元素的方法
Apr 01 PHP
PHP封装的非对称加密RSA算法示例
May 28 PHP
thinkPHP实现基于ajax的评论回复功能
Jun 22 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 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
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php的mkdir()函数创建文件夹比较安全的权限设置方法
2014/07/28 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
Javascript操纵Cookie实现购物车程序
2006/11/23 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
jquery动态导航插件dynamicNav用法实例分析
2015/09/06 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
原生JS实现动态加载js文件并在加载成功后执行回调函数的方法
2020/12/30 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
浅析Python 中整型对象存储的位置
2016/05/16 Python
人生苦短我用python python如何快速入门?
2018/03/12 Python
python梯度下降法的简单示例
2018/08/31 Python
Django框架模板的使用方法示例
2019/05/25 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
python生成并处理uuid的实现方式
2020/03/03 Python
python实现ping命令小程序
2020/12/28 Python
css3 实现元素弧线运动的示例代码
2020/04/24 HTML / CSS
房屋租赁合同协议书范本
2014/10/19 职场文书
小学生通知书评语
2014/12/31 职场文书
家长给老师的感谢信
2015/01/20 职场文书
蓬莱阁导游词
2015/02/04 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Python中OpenCV实现简单车牌字符切割
2021/06/11 Python
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技