php调用c接口无错版介绍

前端之家收集整理的这篇文章主要介绍了php调用c接口无错版介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

1.首先是要安装好PHP2.进入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,
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文件,不同的机器位置会不一样

403/20140311094817.png">

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()

403/20140311094934.png">也可以适用PHP -m命令

先用
#which PHP
找到PHP所在目录,不同机器目录不一样
#/usr/bin/PHP -m

403/20140311095049.png">

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相关文章