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写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
PHP Array交叉表实现代码
Aug 05 PHP
php中3des加密代码(完全与.net中的兼容)
Aug 02 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
使用php判断网页是否gzip压缩
Jun 25 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
php统计数组元素个数的方法
Jul 02 PHP
PHP 9 大缓存技术总结
Sep 17 PHP
PHP读取PPT文件的方法
Dec 10 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
thinkphp自带验证码全面解析
2016/09/18 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
JavaScript中的Math.LOG2E属性使用详解
2015/06/14 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
JavaScript 五大常见函数
2018/03/23 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
利用python生成一个导出数据库的bat脚本文件的方法
2016/12/30 Python
Python continue继续循环用法总结
2018/06/10 Python
python得到qq句柄,并显示在前台的方法
2018/10/14 Python
Python数据可视化教程之Matplotlib实现各种图表实例
2019/01/13 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
HTML5实现QQ聊天气泡效果
2017/06/26 HTML / CSS
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
岗位竞聘演讲稿范文
2014/04/24 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
吧主申请感言怎么写
2015/08/03 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
字节飞书面试promise.all实现示例
2022/06/16 Javascript
uniapp开发打包多端应用完整方法指南
2022/12/24 Javascript