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
加强版phplib的DB类
Mar 31 PHP
编写漂亮的代码 - 将后台程序与前端程序分开
Apr 23 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
Jun 03 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
关于js和php对url编码的处理方法
Mar 04 PHP
CI框架中libraries,helpers,hooks文件夹详细说明
Jun 10 PHP
PHP中的插件机制原理和实例
Jul 08 PHP
PHP SESSION的增加、删除、修改、查看操作
Mar 20 PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 PHP
Laravel框架基础语法与知识点整理【模板变量、输出、include引入子视图等】
Dec 03 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生成带有雪花背景的验证码
2006/10/09 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP基于文件存储实现缓存的方法
2015/07/20 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
prototype 1.5相关知识及他人笔记
2006/12/16 Javascript
选择TreeView控件的树状数据节点的JS方法(jquery)
2010/02/06 Javascript
原生JavaScript实现合并多个数组示例
2014/09/21 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
Node.js模块封装及使用方法
2016/03/06 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
python批量提交沙箱问题实例
2014/10/08 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
Python中is与==判断的区别
2017/03/28 Python
Python 多线程Threading初学教程
2017/08/22 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
python re模块findall()函数实例解析
2018/01/19 Python
python scipy求解非线性方程的方法(fsolve/root)
2018/11/12 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
django之自定义软删除Model的方法
2019/08/14 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
Python实现一个优先级队列的方法
2020/07/31 Python
python 解决selenium 中的 .clear()方法失效问题
2020/09/01 Python
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
法学毕业生自我鉴定
2013/11/08 职场文书
幼儿园教师工作制度
2014/01/22 职场文书
海洋科学专业求职信
2014/08/10 职场文书
民事起诉书范本
2015/05/19 职场文书
感恩父母主题班会
2015/08/12 职场文书
《西门豹》教学反思
2016/02/23 职场文书
MYSQL 无法识别中文的永久解决方法
2021/06/03 MySQL