随笔分类 -  php-src

[php-src] Php内核的有趣高频宏
摘要:内容均以php-5.6.14为例. 1. EXPECTED 和 UNEXPECTED 宏,用在判断条件的时候。 ./Zend/zend.h:390 #if (defined (__GNUC__) && __GNUC__ > 2 ) && !defined(DARWIN) && !defined(__ 阅读全文

posted @ 2020-05-14 23:16 ercom 阅读(359) 评论(0) 推荐(0)

[php-src] Php扩展开发的琐碎注意点、细节
摘要:内容均以php-5.6.14为例. 函数中接收的字符串参数长度不包含结尾的0,在 zend_update_property 中,长度的参数是 int len,一般都使用 ZEND_STRL(NAME)自动填充字符串和长度,它的长度实现是 sizeof(NAME) - 1,它也不需要结尾的0; #un 阅读全文

posted @ 2020-05-14 23:14 ercom 阅读(358) 评论(0) 推荐(0)

[php-src] Php扩展的多文件编译
摘要:内容均以php5.6.14为例. 假设有模块 foo,php_foo.h 和 foo.c 是固有文件,额外的C文件如果要加入编译,大致有五步。 1. 新增头文件 foo_bar.h #ifndef FOO_BAR_H #define FOO_BAR_H extern zend_class_entry 阅读全文

posted @ 2016-07-23 23:12 ercom 阅读(646) 评论(0) 推荐(0)

[php-src]Php扩展的内存泄漏处理思路
摘要:内容均以php5.6.14为例. 一. 封装函数时产生 memory leaks. [weichen@localhost www]$ php 2.php [122,3333] [Tue Jul 10 15:34:42 2016] Script: '/home/www/2.php' /home/wei 阅读全文

posted @ 2016-07-23 16:30 ercom 阅读(2558) 评论(0) 推荐(0)

[php-src] 窥探Php内核中的数组与面向对象
摘要:内容均以php5.6.14为例. 扩展中定义一个类有以下四步: #1. 声明一个存储类信息的指针. zend_class_entry *errs_ce; #2. 定义方法的参数信息,类的方法实现. ZEND_BEGIN_ARG_INFO_EX(errs_test_arginfo, 0, 0, 1) 阅读全文

posted @ 2016-07-17 18:07 ercom 阅读(867) 评论(0) 推荐(0)

[php-src] 扩展中封装业务与 call_user_function 的使用建议
摘要:内容均以php5.6.14为例. 从一个封装 uniqid 的例子来讲。 /* {{{ wrapper of uniqid */ PHP_FUNCTION(fox) { // #1. zval *prefix, *more = NULL; zval function, *params[2] = {0 阅读全文

posted @ 2016-07-02 19:18 ercom 阅读(1061) 评论(0) 推荐(0)

[php-src] 窥探Php内核中的变量
摘要:内容均以php-5.6.14为例. 在看各种组合数据类型之前,有必要先熟悉下 Zend/zend_types.h 里面的自定义数据类型. #ifndef ZEND_TYPES_H // 防止多次 include 头文件导致预处理错误 #define ZEND_TYPES_H typedef unsi 阅读全文

posted @ 2016-04-25 23:32 ercom 阅读(1121) 评论(0) 推荐(1)

[php-src] 理解Php内核中的函数与INI
摘要:内容均以php-5.6.14为例. 一. 函数结构 内核中定义一个php函数使用 PHP_FUNCTION 宏 包装,扩展也不例外,该宏在 ./main/php.h:343 有着一系列类似以 PHP 命名的 Zend 宏包装器,它们是: /* PHP-named Zend macro wrapper 阅读全文

posted @ 2016-04-16 00:09 ercom 阅读(1969) 评论(0) 推荐(0)

[php-src]一个Php扩展的结构
摘要:内容均以php5.6.14为例. 要拥有一个PHP扩展的架子,使用源码中准备好的 /ext/ext_skel 工具,可以生成一个可运行的扩展骨架。 不加选项运行 ./ext_skel,可查看所有可用选项的帮助文字。 1) ./ext_skel --extname=myext(扩展名),自动生成扩展目 阅读全文

posted @ 2016-04-14 21:44 ercom 阅读(492) 评论(0) 推荐(0)