Maison >développement back-end >tutoriel php >Une brève discussion du code source PHP 6 : à propos de la fonction stream_get_wrappers
Cet article présente principalement le code source PHP 6 : concernant la fonction stream_get_wrappers, elle a une certaine valeur de référence. Maintenant, je la partage avec vous. Les amis dans le besoin peuvent s'y référer
stream_get_wrappers
(PHP 5)stream_get_wrappers — Renvoie une liste des flux de données enregistrésDescription
et constater que cette fonction lit également les données directement à partir de la variable url_stream_wrappers_hash,
il y a donc Le processus de suivi de cette fonction et la variable url_stream_wrappers_hash est terminé.
Tout d'abord, l'implémentation de cette extension est incluse dans le fichier streamsfuncs.c sous le dossier standard
Le chemin est le suivant :
==>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; // 全局静态变量,D'après le code de cette fonction, nous pouvons voir qu'elle traverse directement La valeur de retour de la fonction php_stream_get_url_stream_wrappers_hash() génère un tableau de chaînes
Fonction 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行La durée de ce suivi est d'une semaine, ce qui peut être considéré comme beaucoup d'épreuves. Mais finalement, la source a été découverte. Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois ! Recommandations associées :
Une brève discussion sur le code source PHP cinq : à propos de la création d'un tableau tableau
Un bref discussion sur le code source PHP quatre : à propos de la fonction count
Une brève discussion sur le code source PHP trois : à propos de la fonction strrchr, strstr, stristr
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!