zoukankan      html  css  js  c++  java
  • 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];
    };
    
  • 相关阅读:
    MFC学习笔记2添加资源
    汇编语言基础教程数据类型
    MFC学习笔记3引用资源
    asp.net MVC留言本示例
    汇编语言学习笔记按指定的字体输出文本
    C#(winform)项目中自制alert提示窗体并引用系统图标资源
    报表打印(rdlc)
    在内存中序列化,反序列化对象实体 来完成对象实体的深拷贝
    Hibernate中ORA01502错误的解 ...
    NHibernate的调试技巧和Log4Net配置
  • 原文地址:https://www.cnblogs.com/yjf512/p/6097937.html
Copyright © 2011-2022 走看看