php内核两大流程之启动php的核心代码段		step 1: start the sapiextern zend_module_entry php_apache_module;static int php_apache2_startup(sapi_module_struct *sapi_module){        if (php_module_startup(sapi_module, &php_apache_module, 1)==failure) {                return failure;        }        return success;}step 2: start the phpint php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules){        zend_utility_functions zuf;        zend_utility_values zuv;	.....	sapi_module = *sf;	php_output_startup();        zuf.error_function = php_error_cb;        zuf.printf_function = php_printf;        zuf.write_function = php_output_wrapper;        zuf.fopen_function = php_fopen_wrapper_for_zend;        zuf.message_handler = php_message_handler_for_zend;        zuf.block_interruptions = sapi_module.block_interruptions;        zuf.unblock_interruptions = sapi_module.unblock_interruptions;        zuf.get_configuration_directive = php_get_configuration_directive_for_zend;        zuf.ticks_function = php_run_ticks;        zuf.on_timeout = php_on_timeout;        zuf.stream_open_function = php_stream_open_for_zend;        zuf.vspprintf_function = vspprintf;        zuf.getenv_function = sapi_getenv;        zuf.resolve_path_function = php_resolve_path_for_zend;        zend_startup(&zuf, null tsrmls_cc);	......	gc_globals_ctor(tsrmls_c);	......        /* register php core ini entries */        register_ini_entries();        /* register zend ini entries */        zend_register_standard_ini_entries(tsrmls_c);        /* disable realpath cache if an open_basedir is set */        if (pg(open_basedir) && *pg(open_basedir)) {                cwdg(realpath_cache_size_limit) = 0;        }        /* initialize stream wrappers registry         * (this uses configuration parameters from php.ini)         */        if (php_init_stream_wrappers(module_number tsrmls_cc) == failure)       {                php_printf(php:  unable to initialize stream url wrappers.\n);                return failure;        }        /* startup extensions staticly compiled in */        if (php_register_internal_extensions_func(tsrmls_c) == failure) {                php_printf(unable to start builtin modules\n);                return failure;        }        /* start additional php extensions */        php_register_extensions_bc(additional_modules, num_additional_modules tsrmls_cc);        /* load and startup extensions compiled as shared objects (aka dlls)           as requested by php.ini entries           theese are loaded after initialization of internal extensions           as extensions *might* rely on things from ext/standard           which is always an internal extension and to be initialized           ahead of all other internals         */        php_ini_register_extensions(tsrmls_c);        zend_startup_modules(tsrmls_c);        /* start zend extensions */        zend_startup_extensions();	.....}int zend_startup(zend_utility_functions *utility_functions, char **extensions tsrmls_dc) /* {{{ */{        zend_compiler_globals *compiler_globals;        zend_executor_globals *executor_globals;		......        zend_compile_file = compile_file;        zend_execute_ex = execute_ex;        zend_execute_internal = null;        zend_init_opcodes_handlers();		......}
http://www.bkjia.com/phpjc/914779.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/914779.htmltecharticlephp内核两大流程之启动php的核心代码段 step 1: start the sapiextern zend_module_entry php_apache_module;static int php_apache2_startup(sapi_module_struct *sapi_module)...
   
 
   