php內核分析之全局變量

同學們,一定要努力學習哦,因爲知識是不會辜負你的。以下是本站小編精心爲大家整理的php內核分析之全局變量,希望對大家學習PHP的.同學有所幫助!更多內容請關注應屆畢業生網!

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];

};