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 相关文章推荐
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP 编程安全性小结
Jan 08 PHP
检测png图片是否完整的php代码
Sep 06 PHP
php的ajax简单实例
Feb 27 PHP
Yii查询生成器(Query Builder)用法实例教程
Sep 04 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
PHP抽象类与接口的区别详解
Mar 21 PHP
PHP回调函数简单用法示例
May 08 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 30 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对象类型判断
2008/08/27 PHP
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
深入php define()函数以及defined()函数的用法详解
2013/06/05 PHP
PHP多例模式介绍
2013/06/24 PHP
PHP base64编码后解码乱码的解决办法
2014/06/19 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JavaScript的public、private和privileged模式
2009/12/28 Javascript
js定义对象或数组直接量时各浏览器对多余逗号的处理(json)
2011/03/05 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
浅谈js中的闭包
2015/03/16 Javascript
jquery实现键盘左右翻页特效
2015/04/30 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
判断数组的最佳方法(推荐)
2016/10/11 Javascript
JS获取鼠标位置距浏览器窗口距离的方法示例
2017/04/11 Javascript
React如何利用相对于根目录进行引用组件详解
2017/10/09 Javascript
详解使用webpack构建多页面应用
2017/12/21 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
简单了解Python中的几种函数
2017/11/03 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Python实现FLV视频拼接功能
2020/01/21 Python
如何理解python对象
2020/06/21 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
Subside Sports德国:足球球衣和球迷商品
2019/06/08 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
元旦红领巾广播稿
2014/02/19 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
《风娃娃》教学反思
2016/02/18 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python