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 相关文章推荐
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
php下的权限算法的实现
Apr 28 PHP
php在页面中调用fckeditor编辑器的方法
Jun 10 PHP
php上传图片到指定位置路径保存到数据库的具体实现
Dec 30 PHP
PHP URL参数获取方式的四种例子
Feb 28 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
dedecms集成财付通支付接口
Dec 28 PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 PHP
微信公众平台DEMO(PHP)
May 04 PHP
PHP实现通过CURL上传文件功能示例
May 30 PHP
PHP实现的敏感词过滤方法示例
Mar 06 PHP
PHP实现文件上传与下载
Aug 28 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将数据导入到Foxmail
2006/10/09 PHP
php合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
PHP操作Memcache实例介绍
2013/06/14 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
解决thinkphp5未定义变量会抛出异常,页面错误,请稍后再试的问题
2019/10/16 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
不懂JavaScript应该怎样学
2008/04/16 Javascript
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
两种方法基于jQuery实现IE浏览器兼容placeholder效果
2014/10/14 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
jQuery序列化form表单数据为JSON对象的实现方法
2018/09/20 jQuery
js中int和string数据类型互相转化实例
2019/01/16 Javascript
JavaScript函数的4种调用方法实例分析
2019/03/05 Javascript
基于vue实现一个神奇的动态按钮效果
2019/05/15 Javascript
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
python执行shell获取硬件参数写入mysql的方法
2014/12/29 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Python3 全自动更新已安装的模块实现
2020/01/06 Python
Python数据可视化处理库PyEcharts柱状图,饼图,线性图,词云图常用实例详解
2020/02/10 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
简单叙述一下MYSQL的优化
2016/05/09 面试题
考试作弊被抓检讨书
2014/01/10 职场文书
赡养老人协议书
2014/04/21 职场文书
活动策划求职信模板
2014/04/21 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书