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代码DOS造成用光网络带宽
Mar 01 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
浅析PHP中Collection 类的设计
Jun 21 PHP
php实现监听事件
Nov 06 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
php中遍历二维数组并以表格的形式输出的方法
Jan 03 PHP
PHP的mysqli_stmt_init()函数讲解
Jan 24 PHP
Laravel中获取IP的真实地理位置
Apr 01 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 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基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
全面兼容的javascript时间格式化函数(比较实用)
2014/05/14 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[00:09]DOTA2新版本PA至宝特效动作展示
2014/11/19 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
Python下singleton模式的实现方法
2014/07/16 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python验证码识别教程之灰度处理、二值化、降噪与tesserocr识别
2018/06/04 Python
Python实现合并excel表格的方法分析
2019/04/13 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
追悼会上的答谢词
2014/01/10 职场文书
班组长竞聘书
2014/03/31 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
企业仓管员岗位职责
2014/06/15 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
团员个人年度总结
2015/02/26 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
Meta增速拉垮,元宇宙难当重任
2022/04/29 数码科技