php学习笔记之PHP扩展开发教程

我们先假设需要这样一个扩展,提供一个叫tao_string的函数,他的主要作用是返回一段字符。对应的PHP代码可能是这样:

 代码如下 复制代码

function tao_string($str){
$result = $str;
return $result;
}

第一步,生成代码
PHP为了扩展开发的方便,提供了一个类似代码生成器的工具ext_skel,具体可以参见php.net官方的说明 (https://svn.php.net/repository/php/php-src/trunk/README.EXT_SKEL)。

创建一个文件tao.skel,它的内容为

string tao_string(string str)

就是告诉ext_skel这个东西,我们要做的扩展里面有个函数叫tao_string。然后执行

 代码如下 复制代码

cd MooENV/src/php-5.3.8/ext/
./ext_skel --extname=tao --proto=tao.skel
cd tao/

这时候,tao这个扩展的代码框架就已经出来了。

第二步,修改配置
然后修改config.m4文件将10、11、12三行最前面的dnl删除掉,就是将

 代码如下 复制代码

dnl PHP_ARG_WITH(tao, for tao support,
dnl Make sure that the comment is aligned:
dnl [  --with-tao             Include tao support])

修改为

PHP_ARG_WITH(tao, for tao support,
Make sure that the comment is aligned:
[  --with-tao             Include tao support])

第三步,实现功能
修改源码tao.c文件
找到将tao_string这个函数修改为

 代码如下 复制代码

PHP_FUNCTION(tao_string)
{
char *str = NULL;
int argc = ZEND_NUM_ARGS();
int str_len;
char *result;

if (zend_parse_parameters(argc TSRMLS_CC, "s", &str, &str_len) == FAILURE)
return;

str_len = spprintf(&result, 0, "wo shi %.78s", str);
RETURN_STRINGL(result, str_len, 0);
}

第四步,编译扩展
保存后,开始编译

 代码如下 复制代码

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make

第五步,添加扩展
这时候,一切顺利的话,该扩展已经在modules/tao.so这个位置了。下面就是将这个扩展加入到PHP中去,让我们PHP程序可以调用到。

 代码如下 复制代码

cp modules/tao.so /usr/local/php/ext/
vim /usr/local/php/etc/php.ini
extension=/usr/local/php/ext/tao.so #在php.ini文件最后增加这一行
service php-fpm restart #重启PHP服务
cp tao.php /data/www/wwwroot/default/

接下来就可以访问tao.php这个文件,测试了

时间: 2024-09-24 21:22:57

php学习笔记之PHP扩展开发教程的相关文章

PHP扩展开发教程(总结)_php实例

PHP是一种解释型的语言,对于用户而言,我们精心的控制内存意味着easier prototyping和更少的崩溃!当我们深入到内核之后,所有的安全防线都已经被越过,最终还是要依赖于真正有责任心的软件工程师来保证系统的稳定运行. 1.线程安全宏定义 在TSRM/TSRM.h文件中有如下定义 #define TSRMLS_FETCH()       void ***tsrm_ls = (void ***) ts_resource_ex(0, NULL) #define TSRMLS_FETCH_FR

[ExtJS5学习笔记]第十二节 Extjs5开发遇到的问题列表记录

本文作者:sushengmiyan ------------------------------------------------------------------------------------------------------------------------------------ 查找组件的方法Ext.getCmp方法有错误提示 问题重现: 定义了多个组件,给组件起了ID和alias名称,后面想使用组件,发现使用Ext.getCmp的时候,运行期有报错如下: TypeErro

halcon学习笔记——机器视觉工程应用的开发思路【转】

转自:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html 机器视觉工程应用主要可划分为硬件和软件两大部分. 硬件:工程应用的第一步就是硬件选型.硬件选型很关键,因为它是你后面工作的基础.主要是光源.工业相机和镜头选择. 软件:目前业内商业库主要有Halcon,康耐视,DALSA,evision,NI等,开源库有OpenCV.其中NI的labview+vision模块. 机器视觉工程应用的基本开发思路是: 一.图像采集

linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程_php技巧

本文实例讲述了linux平台编译安装PHP7并安装Redis扩展与Swoole扩展的方法.分享给大家供大家参考,具体如下: 前面<PHP7安装Redis扩展教程[Linux与Windows平台]>一文告诉读者简单的安装Redis的方法,下面我们来实现在linux中编译安装PHP7并安装Redis扩展与Swoole扩展的方法. 编译安装PHP7并安装Redis扩展Swoole扩展: 在编译php7的机器上已经有编译安装过php5.3以上的版本,从而依赖库都有了 本php7是编译成fpm-php

VC文件过滤系统驱动开发Filemon学习笔记

WINDOWS文件过滤系统驱动开发,可用于硬盘还原,防病毒,文件安全防护,文件加密 等诸多领域.而掌握核心层的理论及实践,对于成为一名优秀的开发人员不可或缺. WINDOWS文件过滤系统驱动开发的两个经典例子,Filemon与SFilter,初学者在经 过一定的理论积累后,对此两个例子代码的研究分析,会是步入驱动开发殿堂的重要一步 ,相信一定的理论积累以及贯穿剖析理解此两个例程后,就有能力开始进行文件过滤系统 驱动开发的实际工作了. 对于SFilter例子的讲解,楚狂人的教程已经比较流行, 而F

PHP扩展开发入门教程

 这篇文章主要介绍了PHP扩展开发入门教程,本文讲解了使用C语言在Linux系统下开发一个PHP扩展应该具备的最基本知识,需要的朋友可以参考下     PHP扩展开发 我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩展应该具备的最基本知识.水平较低,难免有错误,望指出. 准备工作 首先要获取一份PHP源码(可以从Github上签出,或者到官网上下载最新的稳定版),然后编译之.为了加快编译速度,我们推荐禁用所有额外的扩展(使用--dis

VSTO 学习笔记(十)Office 2010 Ribbon开发

原文:VSTO 学习笔记(十)Office 2010 Ribbon开发 微软的Office系列办公套件从Office 2007开始首次引入了Ribbon导航菜单模式,其将一系列相关的功能集成在一个个Ribbon中,便于集中管理.操作.这种Ribbon是高度可定制的,用户可以将自己常用的功能进行单独设置,提高工作效率.但是由于Office 2003时代用户的操作习惯已经养成,结果到了Office 2007很多菜单.按钮都找不到了,着实有些尴尬.经过一段时间的适应,相信大多数用户已经习惯Ribbon

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

PHP扩展开发入门教程_php实例

PHP扩展开发 我准备在此系列博文中总结我有关PHP扩展开发的学习和感悟,力图简单清晰地描述在Linux系统下开发一个PHP扩展应该具备的最基本知识.水平较低,难免有错误,望指出. 准备工作 首先要获取一份PHP源码(可以从Github上签出,或者到官网上下载最新的稳定版),然后编译之.为了加快编译速度,我们推荐禁用所有额外的扩展(使用--disable-all选项),但最好打开debug(使用--enable-debug选项)和线程安全(使用--enable-maintainer-zts),但