首页 > php教程 > php手册 > 正文

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

php中文网
发布: 2016-06-13 09:20:37
原创
1566人浏览过

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();
	
	......
}
登录后复制

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号