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

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

CG

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

struct _zend_compiler_globals {
zend_stack loop_var_stack; zend_class_entry *active_class_entry; zend_string *compiled_filename; int zend_lineno; zend_op_array *active_op_array; HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */ HashTable filenames_table; HashTable *auto_globals; zend_bool parse_error;
zend_bool in_compilation;
zend_bool short_tags; zend_bool unclean_shutdown; zend_bool ini_parser_unbuffered_errors; zend_llist open_files; struct _zend_ini_parser_param *ini_parser_param; uint32_t start_lineno; // 执行文件开始执行的行号
zend_bool increment_lineno; zend_string *doc_comment;
uint32_t extra_fn_flags; uint32_t compiler_options; /* set of ZEND_COMPILE_* constants */ HashTable const_filenames; zend_oparray_context context;
zend_file_context file_context; zend_arena *arena; zend_string *empty_string;
zend_string *one_char_string[256];
zend_string **known_strings;
uint32_t known_strings_count; HashTable interned_strings; const zend_encoding **script_encoding_list;
size_t script_encoding_list_size;
zend_bool multibyte;
zend_bool detect_unicode;
zend_bool encoding_declared; zend_ast *ast;
zend_arena *ast_arena; zend_stack delayed_oplines_stack; #ifdef ZTS
zval **static_members_table;
int last_static_member;
#endif
};

SG

SG是从全局的sapi_global中获取属性值

// TODO:更新
typedef struct _sapi_globals_struct {
void *server_context;
sapi_request_info request_info; // 请求信息
sapi_headers_struct sapi_headers;
int64_t read_post_bytes;
unsigned char post_read;
unsigned char headers_sent;
zend_stat_t global_stat;
char *default_mimetype;
char *default_charset;
HashTable *rfc1867_uploaded_files;
zend_long post_max_size;
int options;
zend_bool sapi_started;
double global_request_time;
HashTable known_post_content_types;
zval callback_func;
zend_fcall_info_cache fci_cache;
} sapi_globals_struct;

EG

EG是从executor_globals中获取变量

// TODO: 更新
struct _zend_executor_globals {
zval uninitialized_zval;
zval error_zval; /* symbol table cache */
zend_array *symtable_cache[SYMTABLE_CACHE_SIZE];
zend_array **symtable_cache_limit;
zend_array **symtable_cache_ptr; zend_array symbol_table; /* main symbol table */ HashTable included_files; /* files already included */ JMP_BUF *bailout; int error_reporting;
int exit_status; HashTable *function_table; /* function symbol table */
HashTable *class_table; /* class table */
HashTable *zend_constants; /* constants table */ zval *vm_stack_top;
zval *vm_stack_end;
zend_vm_stack vm_stack; struct _zend_execute_data *current_execute_data;
zend_class_entry *fake_scope; /* used to avoid checks accessing properties */ zend_long precision; int ticks_count; HashTable *in_autoload;
zend_function *autoload_func;
zend_bool full_tables_cleanup; /* for extended information support */
zend_bool no_extensions; zend_bool vm_interrupt;
zend_bool timed_out;
zend_long hard_timeout; #ifdef ZEND_WIN32
OSVERSIONINFOEX windows_version_info;
#endif HashTable regular_list;
HashTable persistent_list; int user_error_handler_error_reporting;
zval user_error_handler;
zval user_exception_handler;
zend_stack user_error_handlers_error_reporting;
zend_stack user_error_handlers;
zend_stack user_exception_handlers; zend_error_handling_t error_handling;
zend_class_entry *exception_class; /* timeout support */
zend_long timeout_seconds; int lambda_count; HashTable *ini_directives;
HashTable *modified_ini_directives;
zend_ini_entry *error_reporting_ini_entry; zend_objects_store objects_store;
zend_object *exception, *prev_exception;
const zend_op *opline_before_exception;
zend_op exception_op[3]; struct _zend_module_entry *current_module; zend_bool active;
zend_bool valid_symbol_table; zend_long assertions; uint32_t ht_iterators_count; /* number of allocatd slots */
uint32_t ht_iterators_used; /* number of used slots */
HashTableIterator *ht_iterators;
HashTableIterator ht_iterators_slots[16]; void *saved_fpu_cw_ptr;
#if XPFPA_HAVE_CW
XPFPA_CW_DATATYPE saved_fpu_cw;
#endif zend_function trampoline;
zend_op call_trampoline_op; void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};
上一篇:Discuz教程:X3.1-x3.2后台admin.php防止直接恶意访问


下一篇:一、基于hadoop的nginx访问日志分析---解析日志篇