linux下 C语言对 php 扩展


Posted in PHP onDecember 14, 2008

一,搭建php环境
下载php 5.2.6 源码 并解压
编译安装,搭建php环境

二,创建扩展项目

进入源码目录
cd php5.2.6/ext/
./ext_skel --extname=my_ext
创建名字为my_ext的项目,最终会生成my_ext.so

三,更改配置和程序
$ vi ext/my_ext/config.m4

根据你自己的选择将

dnl PHP_ARG_WITH(my_ext, for my_ext support,
dnl Make sure that the comment is aligned:

dnl [  --with-my_ext             Include my_ext support])
修改成

PHP_ARG_WITH(my_ext, for my_ext support,
Make sure that the comment is aligned:

[  --with-my_ext             Include my_ext support])
或者将

dnl PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,
dnl Make sure that the comment is aligned:

dnl [  --enable-my_ext           Enable my_ext support])
修改成

PHP_ARG_ENABLE(my_ext, whether to enable my_ext support,

Make sure that the comment is aligned:
[  --enable-my_ext           Enable my_ext support])

$ vi ext/my_ext/php_my_ext.h


PHP_FUNCTION(confirm_my_ext_compiled);       /* For testing, remove later. */
更改为
PHP_FUNCTION(say_hello);    

$ vi ext/my_ext/my_ext.c


zend_function_entry php5cpp_functions[] = {
        PHP_FE(confirm_my_ext_compiled,      NULL) /* For testing, remove later. */
        {NULL, NULL, NULL}      /* Must be the last line in php5cpp_functions[] */
};
更改为
zend_function_entry php5cpp_functions[] = {
        PHP_FE(say_hello,       NULL)         
        {NULL, NULL, NULL}      /* Must be the last line in php5cpp_functions[] */
};

在最后添加:
PHP_FUNCTION(say_hello)
{
        zend_printf("hello world\n");
}

四,编译
$ cd my_ext
$ /usr/local/php/bin/phpize
ps: 如果出现:Cannot find autoconf.……的错误信息,则需要安装 autoconf (安装过程略)
$ ./configure  --with-php-config=/usr/local/php/bin/php-config
$ make

这时会编译出 my_ext/modules/my_ext.so

五,配置php.ini
将my_ext.so放入/usr/local/php/ext/目录

$ vi php.ini

修改添加如下:
extension_dir = '/usr/local/php/ext/'
extension=my_ext.so  

六,测试
$ vi test.php
<?php
   say_hello();
?>

$ /usr/local/php/bin/php test.php
hello world.

则大功告成

ps:如有问题请留言,大家共同探讨

PHP 相关文章推荐
set_include_path在win和linux下的区别
Jan 10 PHP
php 404错误页面实现代码
Jun 22 PHP
PHP测试程序运行时间的类
Feb 05 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
memcache命令启动参数中文解释
Jan 13 PHP
PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法
May 10 PHP
学习php开源项目的源码指南
Dec 21 PHP
php查询操作实现投票功能
May 09 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
PHP实现简单日历类编写
Aug 28 PHP
php 文件状态缓存带来的问题
Dec 14 #PHP
快速开发一个PHP扩展图文教程
Dec 12 #PHP
PHP Google的translate API代码
Dec 10 #PHP
php escape URL编码
Dec 10 #PHP
php 破解防盗链图片函数
Dec 09 #PHP
中英文字符串翻转函数
Dec 09 #PHP
php2html php生成静态页函数
Dec 08 #PHP
You might like
php设计模式 Builder(建造者模式)
2011/06/26 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
浅析PHP开发规范
2018/02/05 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
js中的window.open返回object的错误的解决方法
2009/08/15 Javascript
jquery的clone方法应用于textarea和select的bug修复
2014/06/26 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
简单了解vue中父子组件如何相互传递值(基础向)
2019/07/12 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
JavaScript实现PC端四格密码输入框功能
2020/02/19 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
vue+koa2搭建mock数据环境的详细教程
2020/05/18 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
[50:48]LGD vs CHAOS 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
简单谈谈python的反射机制
2016/06/28 Python
python 链接和操作 memcache方法
2017/03/04 Python
python PyAutoGUI 模拟鼠标键盘操作和截屏功能
2019/08/04 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
攀岩、滑雪、徒步旅行装备:Black Diamond Equipment
2019/08/16 全球购物
房地产出纳岗位职责
2013/12/01 职场文书
银行职业规划书范文
2013/12/28 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
另类冲刺标语
2014/06/24 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers