Home > Article > Backend Development > Detailed explanation of how php works
1. All PHP applications are completed through WEB server (such as IIS, Nginx or Apache) and PHP engine program interpretation and execution. The working process:
(1) When the user enters the browser address Enter the file name of the PHP page to be accessed, then trigger a web request and transmit the request to the WEB server.
(2) The WEB server accepts this request and determines it to be a PHP request based on its suffix. The WEB server calls out the PHP application the user wants to access from the hard disk or memory and sends it to the PHP engine. program.
(3) The PHP engine program will scan the file sent from the WEB server from beginning to end, read it from the background according to the command, process the data, and dynamically generate the corresponding HTML page.
(4) The PHP engine will generate an HTML page and return it to the WEB server. The WEB server then returns the HTML page to the client browser.
2. PHP operating mode:
1) cgi Common Gateway Interface (Common Gateway Interface))
2) fast-cgi resident (long-live) type CGI
3) cli command line operation (Command Line Interface)
4) web module mode (module mode run by web servers such as apache)
Additional explanation :
1) Module mode:
Module mode is integrated in the form of mod_php5 module. At this time, the function of mod_php5 module is to receive PHP file requests passed by Apache, and process these requests, and then Return the processed results to Apache. If we configure the PHP module (mod_php5) in its configuration file before Apache starts, the PHP module registers the ap_hook_post_config hook of apache2 and starts this module when Apache starts to accept requests for PHP files.
In addition to this loading method at startup, Apache's modules can be dynamically loaded at runtime, which means that the server can be functionally expanded without recompiling the source code, or even needing to stop at all. server. All we need to do is to send the signal HUP or AP_SIG_GRACEFUL to the server to notify the server to reload the module. But before dynamic loading, we need to compile the module into a dynamic link library. Dynamic loading at this time is to load the dynamic link library. The processing of dynamic link libraries in Apache is completed through the module mod_so, so the mod_so module cannot be dynamically loaded, it can only be statically compiled into the core of Apache. This means it is started along with Apache.
2) PHP running mode in Nginx (Nginx+ PHP-FPM)
Please see the nginx + php principle section for details
Supplementary:
1. cgi, fast-cgi protocol
History of cgi
The full name of CGI is "Common Gateway Interface", the HTTP server communicates with your or other machines A tool for "talking" to programs on a network server, which must run on a network server. CGI can be written in any language as long as the language has standard input, output and environment variables. Such as php, perl, tcl, etc.
Early webservers only processed static files such as html, but with the development of technology, dynamic languages such as php appeared. The webserver cannot handle it, what should I do? Then let the php interpreter handle it! But how does the php interpreter communicate with the webserver?
In order to solve the communication problem between different language interpreters (such as php, python interpreters) and webserver, the cgi protocol appeared. As long as you write a program according to the cgi protocol, you can achieve communication between the language interpreter and the webserver. Such as php-cgi program.
Improvements of fast-cgi
With the cgi protocol, the problem of communication between the php interpreter and the webserver is solved. The webserver can finally handle dynamic languages. However, every time the webserver receives a request, it will fork a cgi process, and then kill the process after the request is completed. If there are 10,000 requests, the php-cgi process needs to be forked and killed 10,000 times. Have you ever found it to be a waste of resources? As a result, an improved version of cgi, fast-cgi, appeared.
fast-cgi will not kill the process after each request is processed, but retain the process so that the process can handle multiple requests at one time. In this way, there is no need to re-fork a process every time, which greatly improves efficiency. FastCGI is a language-independent, scalable architecture CGI open extension. Its main behavior is to keep the CGI interpreter process in memory and thus obtain higher performance. As we all know, repeated loading of the CGI interpreter is the main reason for low CGI performance. If the CGI interpreter remains in memory and accepts FastCGI process manager scheduling, it can provide good performance, scalability, Fail-Over features, etc.
2. What is php-fpm
PHP-FPM is a PHP FastCGI manager, which is only used for PHP. PHP-FPM is actually a patch of the PHP source code, designed to integrate FastCGI process management into the PHP package. PHP-FPM provides a better PHP process management method, which can effectively control memory and processes, and smoothly reload PHP configuration.
The process includes two types of processes: master process and worker process.
There is only one master process, which is responsible for listening to the port and receiving requests from the Web Server. There are generally multiple worker processes (the specific number is configured according to actual needs). Each process has a PHP interpreter embedded inside it, which is PHP Where the code actually executes.
related suggestion:
Analysis of working principles of apache and php
The above is the detailed content of Detailed explanation of how php works. For more information, please follow other related articles on the PHP Chinese website!