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设计模式 Singleton(单例模式)
Jun 26 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
使用php发送有附件的电子邮件-(PHPMailer使用的实例分析)
Apr 26 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
php实现图片缩放功能类
Dec 18 PHP
PHP合并静态文件详解
Nov 14 PHP
php中JSON的使用方法
Apr 30 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
php微信高级接口群发 多客服
Jun 23 PHP
php数组指针函数功能及用法示例
Feb 11 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 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采集类snoopy详细介绍(snoopy使用教程)
2014/06/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
PHP面向对象五大原则之接口隔离原则(ISP)详解
2018/04/04 PHP
php post json参数的传递和接收处理方法
2018/05/31 PHP
JS跨域代码片段
2012/08/30 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JavaScript学习心得之概述
2015/01/20 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
nodejs进阶(6)—连接MySQL数据库示例
2017/01/07 NodeJs
vue-hook-form使用详解
2017/04/07 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
完美解决手机浏览器顶部下拉出现网页源或刷新的问题
2017/11/30 Javascript
nodejs+mongodb aggregate级联查询操作示例
2018/03/17 NodeJs
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
2019/08/13 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python Mysql自动备份脚本
2008/07/14 Python
python函数缺省值与引用学习笔记分享
2013/02/10 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
PyQt5实现从主窗口打开子窗口的方法
2019/06/19 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
销售类个人求职信范文
2013/09/25 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python