当前位置: 首页 > 编程日记 > 正文

php如何调用c接口无错版

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文件,不同的机器位置会不一样

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 -m命令

先用

#which php

找到php所在目录,不同机器目录不一样

#/usr/bin/php -m

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(“清清月儿");
?>

====================================

可以参考以下:

http://www.phpchina.com/index.php?action-viewthread-tid-26870

http://blog.csdn.net/taft/article/details/596291

http://blog.csdn.net/heiyeshuwu/article/details/3453854

http://blog.csdn.net/xiaocon/article/details/388953

一本书《Extending and Embedding PHP》:http://ishare.iask.sina.com.cn/f/14424739.html

相关文章:

onchange事件只生效一次的问题

今天遇到一个file表单元素&#xff0c;对onchange事件的响应问题&#xff0c;发现仅响应一次&#xff0c;网上查到解决方法&#xff0c;在这里转载一下文件选择框的onchange事件只在第一次改变时生效&#xff0c;以后再选择文件不会触发onchange事件。解决方法1&#xff1a;用j…

WSFC2016 SMB多通道与网络调校

SMB多通道是微软Windows Server 2012时新增的一项功能&#xff0c;微软SMB3.0协议的一部分&#xff0c;主要用于SMB文件传输时&#xff0c;检测到多张可通信网卡&#xff0c;自动使用多张网卡进行传输&#xff0c;提高吞吐量&#xff0c;链路容错。 Windows Server 2012和之前的…

一个常用的正则表达验证类

这是 風語深蓝很早以前写的一个正则表达式验证工具类&#xff0c;包含了一些常见的校验和支持自定义的正则表达式匹配&#xff0c;可以选择完全匹配&#xff0c;也可以获取所有匹配项。曾用它仿造Eclispe下的正则表达式插件写过一个工具。因为最近突然有几个朋友都在问这方面的…

Signal和slot的声明和连接

信号(SIGNAL)和槽(SLOT)是Qt编程的一个重要部分。这个机制可以在对象之间彼此并不了解的情况下将它们的行为联系起来。Signal和slot的声明&#xff08;一&#xff09;在Qt程序设计中&#xff0c;凡是包含signal和slot的类中都要加上Q_OBJECT的定义&#xff0c;下面的例子给出了…

重磅!深度学习知识总结和调参技巧开放下载了

近年来&#xff0c;人工智能正在进入一个蓬勃发展的新时期&#xff0c;这主要得益于深度学习和CV领域近年来的发展和成就。在这其中&#xff0c;卷积神经网络的成功也带动了更多学术和商业应用的发展和进步。为了避免“内卷”&#xff0c;更多人选择学习进阶&#xff0c;但是仍…

Oracle优化器:星型转换

Oracle 8i中引入了星型转换(star transformation)的优化器新特性以便更有效地处理星型查询。星型查询语句多用于基于星型模型设计的数据仓库应用中。星型模型的称谓源于该种模型以图形化表现时看起来形似一颗海星。这颗星的中央会由一个或多个事实表(fact tables)组成&#xff…

php安装模式mod_php和Fastcgi的选择与对比

安装php又面临到了模式的选择&#xff0c;以前都是选择mod_php模式&#xff0c;因为这样安装比较方便哈&#xff0c;今天突然关心起FastCGI这种模式&#xff0c;败毒了一把&#xff0c;找到了一些关于mod_php和Fastcgi的选择与对比这方面的讨论&#xff0c;现在发出来留一个记号…

暴雨之后,评估与重建可以用这个数据集

作者&#xff1a;神经星星来源&#xff1a;HyperAI超神经场景描述&#xff1a;连续多日的暴雨给郑州和河南部分城市&#xff0c;带来了严重的洪涝灾害&#xff0c;牵动了全国人民的心。灾难面前&#xff0c;现阶段的科技和具体解决方案&#xff0c;也能发挥出关键作用。关键词&…

从jQuery的缓存到事件监听

很久以前&#xff0c;我还在cnblogs里面逛的时候就提出过一个问题&#xff08;刚找了半天没找到&#xff09;。不知道大家有没有发现&#xff0c;用jQuery选择器"选择"之后的DOM上会添加jQuery*********属性。 <DIV idd1 jQuery1294122065250"1">abc…

对一些品种数量校正

update sphwph set shl1-1 where spidSPH00002323 and piciJHAYMA00017433_5 and hwHWI00000022 update sphwph set shl-11 where spidSPH00002323 and piciJHAYMA00021159_2 and hwHWI00000022 3月7日调拨后少了398 update sphwph set shl0398 where piciJHAYMA00024241_1 an…

收藏喜+1!值得使用的100个Python小技巧

目前Python可以说是非常流行&#xff0c;在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;很容易上手。你可以用它来完成很多任务&#xff0c;比如数据科学、机器学习、Web开发、脚本编写、自动化等。下面&#xff0c;给大家…

一款基jquery超炫的动画导航菜单

今天给大家分享一款基jquery超炫的动画导航菜单。这款导航菜单&#xff0c;初始时页面中间一个按钮&#xff0c;单击按钮&#xff0c;菜单从左侧飞入页中。再次单击按钮&#xff0c;导航飞入左侧消息。动画效果很非常炫。一起看下效果图&#xff1a; 在线预览 源码下载 实现的…

如何用C#动态编译、执行代码

在开始之前&#xff0c;先熟悉几个类及部分属性、方法&#xff1a;CSharpCodeProvider、ICodeCompiler、CompilerParameters、CompilerResults、Assembly。  一、CSharpCodeProvider    提供对C#代码生成器和代码编译器的实例的访问。如果要动态生成VB代码&#xff0c;可…

【解决】MySql 5.6 运行崩溃错误

【解决】MySql 5.6 运行崩溃错误 最近弄了一台云主机&#xff0c;配置是20G磁盘空间&#xff0c;1G运行内存的Linux服务器。在上面安装了LAMP&#xff08;RHEL7.2Apache2.4MySql5.6PHP5.6&#xff09;&#xff0c;然后搭建wordpress网站&#xff0c;可是网站运行没多久&#xf…

制作安全网站的checklist

原作者charlee、原始链接 http://tech.idv2.com/2008/04/19/secure-website-checklist/ fcicq最近在IPA上看到一篇安全相关的文章&#xff0c;它的最末尾有个checklist&#xff0c;于是催我把它翻译了。前几天比较忙&#xff0c;周末没什么事儿了&#xff0c;就翻译一下吧。 原…

百变冰冰!手把手教你实现CVPR2021最新妆容迁移算法

作者&#xff1a;小潘师兄来源&#xff1a;AI算法与图像处理简介在本文中&#xff0c;我们从不同的角度将妆容迁移问题分解为两步提取-分配过程。为此&#xff0c;我们提出了一种基于风格的可控GAN模型&#xff0c;该模型由三个部分组成&#xff0c;每个部分分别对应于目标风格…

Vlan 4096的限制原因

为什么80%的码农都做不了架构师&#xff1f;>>> VLAN配置的最大可能值为4094&#xff0c;它的由来如下所述&#xff1a; IEEE802.1q协议也就是“Virtual Bridged Local Area Networks”&#xff08;虚拟桥接局域网&#xff0c;简称虚拟局域网&#xff09;协议&#…

Hive 数据模型

Hive 数据模型 Hive 数据表有五种类型&#xff1a;内部表&#xff0c;外部表&#xff0c;分区表&#xff0c;桶表&#xff0c;视图表&#xff0c;默认以 tab 分隔 * MySQL (Oracle) 表默认以逗号分隔&#xff0c;因此&#xff0c;要想导入 MySQL(Oracle) 数据&#xff0c;需要设…

完整中英文世界国家级联下拉列表插件【前端版】

为什么80%的码农都做不了架构师&#xff1f;>>> 这个小东西是之前小项目上临时增加功能的产物&#xff0c;那时候在网上找了很久都没有能用的插件&#xff0c;要么是数据残缺少得可怜&#xff0c;还有就是实现手段非常低效不可维护那种&#xff0c;各种奇拔问题&am…

何时使用margin和padding?

margin和padding的意义相信大家都很清楚&#xff0c;可是在具体应用中&#xff0c;到底应该使用哪一个&#xff0c;就比较难于判断了。 这篇文章 说得挺清楚的&#xff0c;在这里翻译一下&#xff0c;供参考。 何时应当使用margin 需要在border外侧添加空白时。 空白处不需要…

10年IT老兵给新人程序员的几点建议

【CSDN 编者按】对于很多计算机专业的同学而言&#xff0c;“进大厂”已经成为毕业后职业道路的首选。但是面试官最喜欢什么样的应届生你知道吗&#xff1f;在校期间应该为找工作做哪些准备&#xff1f;除了技术好&#xff0c;在职场中还有哪些必备软实力&#xff1f;今天&…

asp.net文件上传下载的简单实现

使用FileUpload上传&#xff1a; protected void btnUpload_Click(object sender, EventArgs e) { if (FileUpload1.HasFile) { /*通过文件扩展名判断文件类型*/ string fileExt System.IO.Path.Ge…

JAVA数组的定义及用法

数组是有序数据的集合&#xff0c;数组中的每一个元素具有同样的数组名和下标来唯一地确定数组中的元素。 1. 一维数组 1.1 一维数组的定义 type arrayName[]; type[] arrayName; 当中类型(type)能够为Java中随意的数据类型&#xff0c;包含简单类型组合类型&#xff0c;数组名…

英特尔公布新技术路线图,将为 AWS、高通代工芯片

编译|刘春霖出品|AI科技大本营(ID:rgznai100)图源|IC photo今天英特尔宣布其旗下的工厂将开始制造高通芯片&#xff0c;并公布了公司有史以来最详细的制程工艺和封装技术路线图&#xff0c;希望在 2025 年前赶上台积电、三星电子。除了公布其近十多年来首个全新晶体管架构 Ribb…

epoll相关资料整理

http://www.cppblog.com/converse/archive/2008/10/13/63928.htmlepoll相关资料整理 学习epoll有一段时间了,最近终于有一个服务器采用了epoll模型,从中积累了一些epoll的资料.个人感觉目前可以找到的epoll相关的资料太少了,因为epoll仅被linux 2.6以上版本内核所支持,它的应用…

18.绝对路径和相对路径

什么是绝对路径&#xff08;Absolute Pathname&#xff09;&#xff1f; 1.绝对路径必定由“/”开头 2.绝对路径是为档案/文件的所在位置做指向 3.在任何时候&#xff0c;都可以用绝对路径来找到我们想要的文件 PS&#xff1a;绝对路径只对当前所在目录有效。 什么是相对路径&a…

IE的box模型显示bug

原作者charlee、原始链接http://tech.idv2.com/2007/01/02/ie-box-model-bug/以及本声明。 box模型即由<div>等块元素的 margin、padding、border、width、height 等属性构成的显示模型&#xff0c;它是CSS布局的基础。通过设置<div>的各种属性&#xff0c;可以得到…

AI 能匹敌程序员了吗?OpenAI 新研究展​示 NLP 大模型的局限性

作者&#xff1a;Ben Dickson来源&#xff1a;数据实战派Codex在一篇新论文中&#xff0c;OpenAI 的研究人员展示了 Codex 的详细信息&#xff0c;它是一种生成软件源代码的深度学习模型。Codex 可以为 OpenAI 和 GitHub 联合开发的 “AI 配对程序员” 工具 Copilot 提供支持。…

MSLicensing​中断远程桌面连接

---------------------------中断远程桌面连接---------------------------客户端无法建立跟远程计算机的连接。导致这个错误的可能的原因是:1) 远程计算机上的远程连接可能没有启用。2) 已超出远程计算机上的连接最大数。3) 建立连接时出现了一个网络错误。------------------…

如何恢复,迁移,添加, 删除 Voting Disks

如何恢复&#xff0c;迁移&#xff0c;添加, 删除 Voting Disks 恢复流程 在11gR2 之前&#xff0c;我们可以直接直接使用dd命令对voting disk进行备份。 DD示例 备份votedisk盘&#xff1a; [rootraw1 bin]# dd if/dev/raw/raw2 of/home/oracle/voting_disk.bak 恢复votedisk盘…