设为首页 收藏本站
查看: 435|回复: 0

[经验分享] 自己写PHP扩展之创建一个普通变量

[复制链接]

尚未签到

发表于 2017-4-3 06:47:44 | 显示全部楼层 |阅读模式
声明:本文为斯人原创,全部为作者一一分析得之,有不对的地方望赐教。
欢迎转载,转载请注明出处 。
本文地址: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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359316-1-1.html 上篇帖子: 续:PHP做Web项目的优缺点 下篇帖子: PHP编程中5个良好习惯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表