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 相关文章推荐
PHP中路径问题的解决方案
Oct 09 PHP
PHP 学习路线与时间表
Feb 21 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
PHP中break及continue两个流程控制指令区别分析
Apr 18 PHP
Uncaught exception com_exception with message Failed to create COM object
Jan 11 PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 PHP
php时间戳转换的示例
Mar 31 PHP
php连接oracle数据库及查询数据的方法
Dec 29 PHP
php使用ob_flush不能每隔一秒输出原理分析
Jun 02 PHP
php版微信公众平台接口开发之智能回复开发教程
Sep 22 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 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
ECMall支持SSL连接邮件服务器的配置方法详解
2014/05/19 PHP
PHP的pcntl多进程用法实例
2015/03/19 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
PHP+Mysql分布式事务与解决方案深入理解
2021/02/27 PHP
prettify 代码高亮着色器google出品
2010/12/28 Javascript
关于javascript中的typeof和instanceof介绍
2012/12/04 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
Nodejs实现多人同时在线移动鼠标的小游戏分享
2014/12/06 NodeJs
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
JS解析XML实例分析
2015/01/30 Javascript
JavaScript中Function详解
2015/02/27 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
jQuery实现下拉菜单(内容为时间)的实时更新及图表的随动更新的方法
2016/07/07 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
JS实现瀑布流布局
2017/10/21 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
JavaScript中为事件指定处理程序的五种方式分析
2018/07/27 Javascript
JavaScript闭包原理与用法实例分析
2018/08/10 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
python计算书页码的统计数字问题实例
2014/09/26 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python处理时间日期坐标轴过程详解
2019/06/25 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
洗煤厂厂长岗位职责
2014/01/03 职场文书
顶岗实习计划书
2014/01/10 职场文书
歌颂党的演讲稿
2014/09/10 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python