php扩展初探

1.首先生成扩展框架结构

Cd /alidata/tmp/php-5.6.23/ext

./ext_skel --extname=myext --proto=myext.fun

1)此时会生成相关文件

Configure config.h include myext.c config.m4

2)主要修改文件

Config.m4

PHP_ARG_WITH(myext, for myext support,

Make sure that the comment is aligned:

[  --with-myext             Include myext support])

dnl Otherwise use enable:

PHP_ARG_ENABLE(myext, whether to enable myext support,

Make sure that the comment is aligned:

[  --enable-myext           Enable myext support])

myext.c

1)头部文件

#ifdef HAVE_CONFIG_H

#include "config.h"

#endif

#include "php.h"

#include "php_ini.h"

#include "ext/standard/info.h"

#include "php_myext.h"

#include<stdio.h>

#include<malloc.h>    //内存管理调用

2)变量定义

static int le_myext;

3)定义函数

const zend_function_entry myext_functions[] = {

PHP_FE(myext,   NULL)           /* For testing, remove later. */

PHP_FE(myext_fork,NULL)

PHP_FE(myext_list,NULL)

//PHP_PE(myext_insert,LinkList* list, LinkListNode* node, int pos)

//PHP_PE(myext_get,LinkList* list, int pos)

//PHP_PE(myext_create,LinkList*)

//PHP_PE(myext_destroy,LinkList* list)

PHP_FE_END      /* Must be the last line in myext_functions[] */

};

4)zend模块定义

zend_module_entry myext_module_entry = {

STANDARD_MODULE_HEADER,

"myext",

myext_functions,     //代表加载定义的函数@标识

PHP_MINIT(myext),

PHP_MSHUTDOWN(myext),

PHP_RINIT(myext),               /* Replace with NULL if there‘s nothing to do at request start */

PHP_RSHUTDOWN(myext),   /* Replace with NULL if there‘s nothing to do at request end */

PHP_MINFO(myext),

PHP_MYEXT_VERSION,

STANDARD_MODULE_PROPERTIES

};

5)实现导出函数

PHP_FUNCTION(myext_list)

{

long lptr;

double dptr;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld", &lptr, &dptr) == FAILURE) {

return;

}

zend_printf("lptr value ad %ld",lptr);

zend_printf("dptr value ad %ld",dptr);

}

6)接受用户传递的参数

6.1)取得参数个数

ZEND_NUM_ARGS() TSRMLS_CC  //zend_api.h中有定义

6.2)取得实体参数

//定义变量

long lptr;

double dptr;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld", &lptr, &dptr) == FAILURE) {

return;

}

&lptr,:表示接受的参数

&dptr:表示接受的参数

//参数打印

zend_printf("lptr value ad %ld",lptr);

zend_printf("dptr value ad %ld",dptr);

7)完整的导出函数实现

PHP_FUNCTION(myext_list)

{

long lptr;

double dptr;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld", &lptr, &dptr) == FAILURE) {

return;

}

zend_printf("lptr value ad %ld",lptr);

zend_printf("dptr value ad %ld",dptr);

}

2.编辑扩展

/alidata/server/php-5.6.23/bin/phpize   压缩扩展

./configure --with-php-config=/alidata/server/php-5.6.23/bin/php-config  编译安装扩展

/alidata/server/php-5.6.23/bin/php -m   显示已经安装的扩展

3.修改php.ini

[xhprof]

extension=xhprof.so

xhprof.output_dir=/tmp

extension=swoole.so

extension=myext.so

extension=php_list.so

4.php调用

<?php

myext_list()

?>

时间: 2024-09-29 17:32:44

php扩展初探的相关文章

KMP与扩展KMP初探

KMP KMP算法主要用于字符串匹配中的单串匹配 next函数:表示当前字符失配时,应从模式串的第几位开始匹配(越大越好).即模式串的前缀与以t[i]为结尾的后缀的最长相同部分的长度. 代码如下(pascal) var s,t:string; next,ans:array[0..100] of longint; i,j:longint; begin readln(s); readln(t); next[1]:=0; {构造next} j:=0; for i:=2 to length(t) do

php扩展开发初探

2015年2月26日 15:44:41 原因: 想用PHP实现一个布隆过滤器算法, 其中要用到位运算, 但是PHP的内置的int类型不给力, 不能支持大整数的位运算 数据一旦太大, 就会变为浮点数表示, 浮点数无法参与位运算... 也试过nodejs, redis 都不行. 用java吧, 还得搭环境 就想用PHP扩展的方式,用c去实现 第一步: 用PHP命令去自动生成扩展框架 进入到PHP的源代码目录->进入ext 目录下 ./ext_skel --extname=zzbbloom 第二步:

[转载]HDFS初探之旅

转载自 http://www.cnblogs.com/xia520pi/archive/2012/05/28/2520813.html , 感谢虾皮工作室这一系列精彩的文章. Hadoop集群(第8期)_HDFS初探之旅 1.HDFS简介 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目,是分布式计算中数据存储管理的基础,是基于流数据模式访问和处理超大文件的需求而开发的,可以运行于廉价的商用服务器上.它所具有的高容错.高可靠性.高可扩展性.高

数据加密解密初探

在一次网络通信或者是进程通信中,如果传输数据采用明文的方式,那么很容易被第三方"窃听"到,安全性难以保障. 而所谓加密是让数据从明文变成密文,传输过程中是密文,传送过去之后对方接收到的也是密文.--可以理解为密文就是乱码,看不出内在的任何意义,通常也都是逐位对应的. 在接收方接收到密文之后只有把它还原为原来的样子才可以理解对方说的具体是什么,此过程就叫做解密. 所谓系统的安全要实现的目标应该包括:机密性-confidentiality,完整性-integrity 和可用性-availa

Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性,不得不说下Http协议.我们常常听到说,Http是一个无状态协议,同一个会话的连续两个请求互相不了解,他们由最新实例化的环境进行解析,除了应用本身可能已经存储在全局对象中的所有信息外,该环境不保存与会话有关的任何信息.之所以我们在使用ASP.NET WebForm开发中会感觉不到Http的无状态特

Unity3D游戏开发初探—2.初步了解3D模型基础

一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被.机械等等,比如一个大楼的3D模型图.3D模型也包括玩具和电脑模型领域. 互联网的形态一直以来都是2D模式的,但是随着3D技术的不断进步,在未来的时间里,将会有越来越多的互联网应用以3D的方式呈现给用户,包括网络视讯.电子阅读.网络游戏.虚拟社区.电子商务.远程教育等等.甚至对于旅游业,3D互联网也能

国外物联网平台初探(六):Electric Imp

国外物联网平台初探(六)--Electric Imp 马智 公司背景 Electric Imp成立于2011年,公司设立在美国加利福尼亚州洛斯阿尔托斯和英国剑桥 公司投资者包括:富士康技术集团.PTI创投.Rampart资本.Redpoint创投 ? 定位 ? Electric Imp提供的硬件.软件.操作系统.安全.API.管理工具和云端服务完全集成的创新型解决方案,能够减少产品上市时间和成本,并具备安全.可扩展和灵活的特性.Electric Imp助力实现创新性的商用和工业应用,使生产商能够

国外物联网平台初探(五):Exosite Murano

国外物联网平台初探(五)--Exosite Murano 马智 ? 定位 Murano是一个基于云的IoT软件平台,提供安全.可扩展的基础设施,支持端到端的生态系统,帮助客户安全.可扩展地开发.部署和管理应用.服务以及联网产品. ? 功能 Murano平台简化了整个IoT技术栈,可视为集成在一起的多个云软件层. Murano提供IoT基础设施.开发环境和功能集成,包括设备连接.产品管理.数据路由.服务集成(如data store/告警/第三方分析平台).应用开放API.用户认证/角色/权限和应用

[深入剖析React Native]React 初探

认识React React是一个用于构建用户界面的JavaScript库. React主要用于构建UI,很多人认为React是MVC中的V,即视图. React起源于Facebook的内部项目,用来架设Instagram的网站,并于2013年5月开源. React拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和实用它. React特点 声明式设计 - React**采用声明范式**,可以轻松描述应用. 高效 - React通过对DOM的模拟,最大限度地减少与DOM的交互. 灵活 - R