Heim >Backend-Entwicklung >PHP-Tutorial >php-fpm执行流程源码浅析

php-fpm执行流程源码浅析

WBOY
WBOYOriginal
2016-06-23 13:38:531251Durchsuche

作者:zhanhailiang 日期:2015-03-09

sapi\fpm\fpm\fpm_main.c:@main;

  1. fcgi_init()->fcgi_setup_signals(); 设置信号处理方法;

    sigaction(SIGUSR1, &new_sa, NULL);
    sigaction(SIGTERM, &new_sa, NULL);
    sigaction(SIGPIPE, NULL, &old_sa);

  2. sapi_startup(&cgi_sapi_module);
    ->sapi_globals_ctor(&sapi_globals); 初始化全局变量; 
    ->reentrancy_startup();

  3. fcgi_fd = fpm_run(&max_requests); 进程初始化,调用fork()创建进程

  4. fcgi_init_request(&request, fcgi_fd); 请求初始化;

  5. while (fcgi_accept_request(&request) >= 0) {
    5.1. init_request_info; 请求初始化; SG(request_info), SG(sapi_headers)
    5.2. fpm_request_info(); 
    5.3. php_request_startup(TSRMLS_C); 
    -> php_start_sapi(); 请求全局变量初始化; 
    -> sapi_activate(TSRMLS_C); 请求HTTP头信息初始化; 
    -> php_hash_environment(TSRMLS_C); 请求环境变量初始倾听; 如$_GET,$_POST,$_ENV,$_SERVER,$_COOKIE,$_FILES就是在这步实始化; $_REQUEST根据jit_initialization判断是否需要实时初始化; 
    5.4. fpm_status_handle_request(TSRMLS_C); 
    5.5. php_fopen_primary_script(&file_handle TSRMLS_CC); 打开脚本; 
    5.5. fpm_request_executing();
    5.7. php_execute_script(&file_handle TSRMLS_CC); 执行脚本; 
    5.8. fpm_request_end(TSRMLS_C); 
    5.9. php_request_shutdown((void *) 0); 请求结束, 释放请求生命周期中申请的资源;

  6. fcgi_shutdown(); 释放申请的持久化资源

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn