Home  >  Article  >  Backend Development  >  php-fpm执行流程源码浅析

php-fpm执行流程源码浅析

WBOY
WBOYOriginal
2016-06-23 13:38:531187browse

作者: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(); 释放申请的持久化资源

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn