浅谈PHP源码六:关于stream_get_wrappers函数

浅谈PHP源码六:关于stream_get_wrappers函数

内容导读

收集整理的这篇技术教程文章主要介绍了浅谈PHP源码六:关于stream_get_wrappers函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2834字,纯文字阅读大概需要5分钟

内容图文

这篇文章主要介绍了关于浅谈PHP源码六:关于stream_get_wrappers函数,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

stream_get_wrappers

(PHP 5)

stream_get_wrappers — 返回注册的数据流列表
Description

array stream_get_wrappers ( void )

Returns an indexed array containing the name of all stream wrappers available on the running system.

在某次其他函数的实现过程中需要知道url_stream_wrappers_hash变量的来源,
从而发现此函数也是从url_stream_wrappers_hash变量直接读取数据,
于是有了对于此函数和url_stream_wrappers_hash变量的跟踪过程。
首先在standard文件夹下的streamsfuncs.c文件中包含了此扩展的实现
其路径如下:

 ==>PHP_FUNCTION(stream_get_wrappers)



//

streamsfuncs.c 548行
 ==>#define php_stream_get_url_stream_wrappers_hash() _php_stream_get_url_stream_wrappers_hash(TSRMLS_C)

//

php_stream.h

552行
 ==>PHPAPI HashTable *_php_stream_get_url_stream_wrappers_hash(TSRMLS_D)



//

streams/streams.c

58行
 ==>static HashTable url_stream_wrappers_hash;

//

全局静态变量,

从此函数的代码中我们可以看出它是直接遍历php_stream_get_url_stream_wrappers_hash()函数的返回值,生成一个字符串数组
php_stream_get_url_stream_wrappers_hash()函数

而函数直接调用全局变量中的数据,此变量初始化和注册过程跟踪如下:

url_stream_wrappers_hash初始化位置:==>int php_init_stream_wrappers(int module_number TSRMLS_DC)

//

streams.c

 1395行
初始化数据流引用位置:==> if (php_init_stream_wrappers(module_number TSRMLS_CC) == FAILURE)

 //

main.c 1765行,初始化,注册数据流 添加默认注册的流程如下:==> zend_startup_modules(TSRMLS_C);

//

main.c 1843行,添加注册数据流==>zend_hash_apply(&module_registry, (apply_func_t)zend_startup_module_ex TSRMLS_CC);

//

zend_API.c

1519行==>ZEND_API int zend_startup_module_ex(zend_module_entry *module TSRMLS_DC)

//

zend_API.c 1424行

==>if (module->module_startup_func) {

//

zend_API.c

1470行==>PHP_MINIT_FUNCTION(basic)

//

basic_functions.c

 3973行==> php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC); php_register_url_stream_wrapper("file", &php_plain_files_wrapper TSRMLS_CC); php_register_url_stream_wrapper("data", &php_stream_rfc2397_wrapper TSRMLS_CC);#ifndef PHP_CURL_URL_WRAPPERS php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC); php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);#endif


//

 basic_functions.c

4073行,添加过程==>php_register_url_stream_wrapper

//

main/streams/streams.c

1450行

此次跟踪的时间跨度为一周,也算是经历几多磨难。但是最后总算是弄清楚其来源。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

浅谈PHP源码五:关于array 数组的创建

浅谈PHP源码四:关于count函数

浅谈PHP源码三:关于strrchr, strstr, stristr函数

以上就是浅谈PHP源码六:关于stream_get_wrappers函数的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的浅谈PHP源码六:关于stream_get_wrappers函数全部内容,希望文章能够帮你解决浅谈PHP源码六:关于stream_get_wrappers函数所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com