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 相关文章推荐
一个取得文件扩展名的函数
Oct 09 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
php数组中删除元素的实现代码
Jun 22 PHP
php设置session值和cookies的学习示例
Mar 21 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
php简单实现数组分页的方法
Apr 30 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
php中isset与empty函数的困惑与用法分析
Jul 05 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 函数使用可变数量的参数方法
2017/05/02 PHP
kindeditor 加入七牛云上传的实例讲解
2017/11/12 PHP
利用js对象弹出一个层
2008/03/26 Javascript
让网页根据不同IE版本显示不同的内容
2009/02/08 Javascript
juqery 学习之四 筛选查找
2010/11/30 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
JavaScript通过HTML的class来获取HTML元素的方法总结
2016/05/24 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
Linux CentOS系统下安装node.js与express的方法
2017/04/01 Javascript
Angular 4.x中表单Reactive Forms详解
2017/04/25 Javascript
详解VUE 定义全局变量的几种实现方式
2017/06/01 Javascript
angular 服务的单例模式(依赖注入模式下)详解
2018/10/22 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python中将字典转换成其json字符串
2014/07/16 Python
wxPython窗口的继承机制实例分析
2014/09/28 Python
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
会计专业毕业生推荐信
2013/11/05 职场文书
小学生秋游活动方案
2014/02/23 职场文书
和谐社区口号
2014/06/19 职场文书
2015年度优秀员工推荐信
2015/03/23 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android