>백엔드 개발 >PHP 튜토리얼 >PHP 소스 코드 6에 대한 간략한 논의: stream_get_wrappers 함수에 대하여

PHP 소스 코드 6에 대한 간략한 논의: stream_get_wrappers 함수에 대하여

不言
不言원래의
2018-06-28 16:47:311760검색

이 글에서는 주로 PHP 소스 코드 6에 대해 소개합니다. stream_get_wrappers 함수에 대해서는 특정 참조 값이 있습니다. 이제 필요한 친구들이 참조할 수 있습니다.

stream_get_wrappers

(PHP 5)

stream_get_wrappers — Return 등록된 데이터 스트림 목록
Description

array stream_get_wrappers (void)

실행 중인 시스템에서 사용할 수 있는 모든 스트림 래퍼의 이름이 포함된 인덱스 배열을 반환합니다.

다른 스트림을 구현하는 동안 url_stream_wrappers_hash 변수의 소스를 알아야 합니다.
따라서 이 함수도 url_stream_wrappers_hash 변수에서 데이터를 직접 읽는다는 사실을 발견했습니다.
그래서 이 함수와 url_stream_wrappers_hash 변수에 대한 추적 프로세스가 있습니다.
먼저 이 확장 기능의 구현은 표준 폴더 아래의 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 소스 코드 5에 대한 간략한 토론: 배열 배열 생성에 대해

PHP 소스 코드 4에 대한 간략한 토론: 카운트 함수에 대해

에 대한 간략한 토론 PHP 소스 코드 3: strrchr, strstr, stristr 함수 정보

위 내용은 PHP 소스 코드 6에 대한 간략한 논의: stream_get_wrappers 함수에 대하여의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.