欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

php内核分析(三)-全局变量

程序员文章站 2022-06-02 13:27:05
...
摘要:这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linuxCGCG是从全局的compiler_global中获取属性值,里面存储的就是编译过程使用到的全局变量。struct _zend_compiler_globals { zend_stack loop_var_stack; zen ...

这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux

CG

CG是从全局的compiler_global中获取属性值,里面存储的就是编译过程使用到的全局变量。

01    struct _zend_compiler_globals {    
02        zend_stack loop_var_stack;    
03    
04        zend_class_entry *active_class_entry;    
05    
06        zend_string *compiled_filename;    
07    
08        int zend_lineno;    
09    
10        zend_op_array *active_op_array;    
11    
12        HashTable *function_table;    /* function symbol table */    
13        HashTable *class_table;        /* class table */    
14    
15        HashTable filenames_table;    
16    
17        HashTable *auto_globals;    
18    
19        zend_bool parse_error;    
20        zend_bool in_compilation;    
21        zend_bool short_tags;    
22    
23        zend_bool unclean_shutdown;    
24    
25        zend_bool ini_parser_unbuffered_errors;    
26    
27        zend_llist open_files;    
28    
29        struct _zend_ini_parser_param *ini_parser_param;    
30    
31        uint32_t start_lineno; // 执行文件开始执行的行号    
32        zend_bool increment_lineno;    
33    
34        zend_string *doc_comment;    
35        uint32_t extra_fn_flags;    
36    
37        uint32_t compiler_options; /* set of ZEND_COMPILE_* constants */    
38    
39        HashTable const_filenames;    
40    
41        zend_oparray_context context;    
42        zend_file_context file_context;    
43    
44        zend_arena *arena;    
45    
46        zend_string *empty_string;    
47        zend_string *one_char_string[256];    
48        zend_string **known_strings;    
49        uint32_t    known_strings_count;    
50    
51        HashTable interned_strings;    
52    
53        const zend_encoding **script_encoding_list;    
54        size_t script_encoding_list_size;    
55        zend_bool multibyte;    
56        zend_bool detect_unicode;    
57        zend_bool encoding_declared;    
58    
59        zend_ast *ast;    
60        zend_arena *ast_arena;    
61    
62        zend_stack delayed_oplines_stack;    
63    
64    #ifdef ZTS    
65        zval **static_members_table;    
66        int last_static_member;    
67    #endif    
68    };

SG

01    SG是从全局的sapi_global中获取属性值    
02    
03    // TODO:更新    
04    typedef struct _sapi_globals_struct {    
05        void *server_context;    
06        sapi_request_info request_info; // 请求信息    
07        sapi_headers_struct sapi_headers;    
08        int64_t read_post_bytes;    
09        unsigned char post_read;    
10        unsigned char headers_sent;    
11        zend_stat_t global_stat;    
12        char *default_mimetype;    
13        char *default_charset;    
14        HashTable *rfc1867_uploaded_files;    
15        zend_long post_max_size;    
16        int options;    
17        zend_bool sapi_started;    
18        double global_request_time;    
19        HashTable known_post_content_types;    
20        zval callback_func;    
21        zend_fcall_info_cache fci_cache;    
22    } sapi_globals_struct;

EG

EG是从executor_globals中获取变量

01    // TODO: 更新    
02    struct _zend_executor_globals {    
03        zval uninitialized_zval;    
04        zval error_zval;    
05    
06        /* symbol table cache */    
07        zend_array *symtable_cache[SYMTABLE_CACHE_SIZE];    
08        zend_array **symtable_cache_limit;    
09        zend_array **symtable_cache_ptr;    
10    
11        zend_array symbol_table;        /* main symbol table */    
12    
13        HashTable included_files;    /* files already included */    
14    
15        JMP_BUF *bailout;    
16    
17        int error_reporting;    
18        int exit_status;    
19    
20        HashTable *function_table;    /* function symbol table */    
21        HashTable *class_table;        /* class table */    
22        HashTable *zend_constants;    /* constants table */    
23    
24        zval          *vm_stack_top;    
25        zval          *vm_stack_end;    
26        zend_vm_stack  vm_stack;    
27    
28        struct _zend_execute_data *current_execute_data;    
29        zend_class_entry *fake_scope; /* used to avoid checks accessing properties */    
30    
31        zend_long precision;    
32    
33        int ticks_count;    
34    
35        HashTable *in_autoload;    
36        zend_function *autoload_func;    
37        zend_bool full_tables_cleanup;    
38    
39        /* for extended information support */    
40        zend_bool no_extensions;    
41    
42        zend_bool vm_interrupt;    
43        zend_bool timed_out;    
44        zend_long hard_timeout;    
45    
46    #ifdef ZEND_WIN32    
47        OSVERSIONINFOEX windows_version_info;    
48    #endif    
49    
50        HashTable regular_list;    
51        HashTable persistent_list;    
52    
53        int user_error_handler_error_reporting;    
54        zval user_error_handler;    
55        zval user_exception_handler;    
56        zend_stack user_error_handlers_error_reporting;    
57        zend_stack user_error_handlers;    
58        zend_stack user_exception_handlers;    
59    
60        zend_error_handling_t  error_handling;    
61        zend_class_entry      *exception_class;    
62    
63        /* timeout support */    
64        zend_long timeout_seconds;    
65    
66        int lambda_count;    
67    
68        HashTable *ini_directives;    
69        HashTable *modified_ini_directives;    
70        zend_ini_entry *error_reporting_ini_entry;    
71    
72        zend_objects_store objects_store;    
73        zend_object *exception, *prev_exception;    
74        const zend_op *opline_before_exception;    
75        zend_op exception_op[3];    
76    
77        struct _zend_module_entry *current_module;    
78    
79        zend_bool active;    
80        zend_bool valid_symbol_table;    
81    
82        zend_long assertions;    
83    
84        uint32_t           ht_iterators_count;     /* number of allocatd slots */    
85        uint32_t           ht_iterators_used;      /* number of used slots */    
86        HashTableIterator *ht_iterators;    
87        HashTableIterator  ht_iterators_slots[16];    
88    
89        void *saved_fpu_cw_ptr;    
90    #if XPFPA_HAVE_CW    
91        XPFPA_CW_DATATYPE saved_fpu_cw;    
92    #endif    
93    
94        zend_function trampoline;    
95        zend_op       call_trampoline_op;    
96    
97        void *reserved[ZEND_MAX_RESERVED_RESOURCES];    
98    };

以上就是php内核分析(三)-全局变量的内容,更多相关内容请关注PHP中文网(www.php.cn)!