一般情況下,FastCGI的整個工作流程是這樣的:
Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
FastCGI進程管理器自身初始化,啟動多個CGI解譯器進程(可見多個php-cgi)並等待來自Web Server的串連。
當用戶端請求到達Web Server時,FastCGI進程管理器選擇並串連到一個CGI解譯器。 Web server將CGI環境變數和標準輸入發送到FastCGI子進程php-cgi。
FastCGI子進程完成處理後將標準輸出和錯誤資訊從同一串連返回Web Server。當FastCGI子進程關閉串連時, 請求便告處理完成。FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個串連。 在CGI模式中,php-cgi在此便退出了。PHP的CGI實現了Fastcgi協議,是一個TCP或UDP協議的伺服器接受來自Web伺服器的請求, 當啟動時建立TCP/UDP協議的伺服器的socket監聽,並接收相關請求進行處理。隨後就進入了PHP的生命週期: 模組初始化,sapi初始化,處理PHP請求,模組關閉,sapi關閉等就構成了整個CGI的生命週期。
static sapi_module_struct cgi_sapi_module = {"cgi-fcgi",/* name */"CGI/FastCGI",/* pretty name */php_cgi_startup,/* startup */php_module_shutdown_wrapper,/* shutdown */sapi_cgi_activate,/* activate */sapi_cgi_deactivate,/* deactivate */sapi_cgi_ub_write,/* unbuffered write */sapi_cgi_flush,/* flush */NULL,/* get uid */sapi_cgi_getenv,/* getenv */php_error,/* error handler */NULL,/* header handler */sapi_cgi_send_headers,/* send headers handler */NULL,/* send header handler */sapi_cgi_read_post,/* read POST data */sapi_cgi_read_cookies,/* read Cookies */sapi_cgi_register_variables,/* register server variables */sapi_cgi_log_message,/* Log message */NULL,/* Get request time */NULL,/* Child terminate */STANDARD_SAPI_MODULE_PROPERTIES};
以上就介紹了PHP SAPI介面,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。