php的启动流程,PHP内核两大流程之启动PHP的核心代码段

Step 1: Start the sapi

extern 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 php

int 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();

......

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值