自己写PHP扩展之创建一个普通变量

17 篇文章 0 订阅
声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。
欢迎转载,转载请注明出处 。
本文地址: http://imsiren.com/archives/568

PHP写扩展..

如果您还么有读   原:用C/C++扩展PHP

建议您先看一下  这篇文章..

今天来个简单的..我们用扩展方式创建一个变量 $siren.

然后在PHP文件里面输出这个变量.

1. 执行源码目录中的 ext_skel –extname=siren

执行成功过后就会在php-src/ext/目录下生成一个siren的文件件,里面包含了扩展的基本结构.

2.修改config.m4

因为我的系统是Linux所以要修改此文件,我们采用so模块的形式加载,所以编辑config.m4文件

dnl PHP_ARG_WITH(siren, for siren support,
dnl Make sure that the comment is aligned:
dnl [  --with-siren             Include siren support])
去掉1,3行的注释dnl,这样我们就可以用PHP以模块的形式加载..具体可以参见我上一篇文章 http://imsiren.com/archives/547

3.编辑php_siren.h

此文件是一个头文件,包含了我们函数的定义.

我要新建一个variable函数,首先需要在此文件里面加一行代码:PHP_FUNCTION(variable); 可以理解为声明一个函数

4.修改siren.c源文件

在siren_functions数组里面添加一行 PHP_FE(variable,NULL);

然后在 最下面添加如下代码

PHP_FUNCTION(variable){
        zval* val;
        MAKE_STD_ZVAL(val);
        ZVAL_STRING(val,"this is siren",1);
        ZEND_SET_SYMBOL(EG(active_symbol_table),"siren",val);
}

zval接口用来保存变量的信息
MAKE_STD_ZVAL宏用来分配内存空间
ZVAL_STRING宏给zval结构设置信息.
const char *__s=(s);                    \
Z_STRLEN_P(z) = strlen(__s);    \
Z_STRVAL_P(z) = (duplicate?estrndup(__s, Z_STRLEN_P(z)):(char*)__s);\
Z_TYPE_P(z) = IS_STRING;

如果不懂 请参见 原创:PHP内核研究:HASH表和变量
最后在php-src/ext/siren目录下执行
1. php安装目录/bin/phpize
2. ./configure –with-php-config=/php安装目录/bin/php-config
3. make && make install
这样 执行后就会在 php的扩展目录下生成一个 siren.so文件
4. 修改php.ini extension=siren.so 开启扩展
5. 编写PHP文件 执行 variable(); 然后 echo $siren;
看看是不是输出了 “this is siren”呢?
怎么样 是不是很简单..

原文出处: http://imsiren.com/archives/568

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值