Preface:
My previous blogs were about how we can install php in various format. Here I am trying to elaborate php working and the steps involved during the phase. You may wonder why such an understanding of PHP working is necessary for a sysadmin job. To be honest , I was quite confused what is extensions, Zend engine and the way the total process takes.
Thanks for the excellent post by Abhinav Singh , now I know how php works ð
The PHP Structure
The PHP binary consists of three layers Core PHP, Zend Engine and Extension Layer.
Core PHP :
PHP handles communication with, and bindings to, the SAPI layer (Server Application Programming Interface, also commonly used to refer to the host environment – Apache, IIS, CLI, CGI, etc). It handles the requests, file streams, error handling and other such operations. Due to low level operations it performs , it is identical with a Kernel in the OS.
Zend Engine:
ZE acts as an interpreter between the user and the Core PHP. It converts the php scripts to the machine understandable format ie opcode generation and then transfer it to  CorePHP and converts the result to human readable form. ZE handles parsing a human-readable script into machine-readable tokens, and then executing those tokens within a process space. ZE also handles memory management, variable scope, and dispatching function calls
Extensions
Extensions are a bunch of functions, classes, streams made available to the PHP scripts, which can be used to perform certain tasks. For example, we need mysql extension to connect to MySQL database using PHP.
The Process
Now let as see how a php scripts work. For the sake of convenience here I assume that php is compiled as an apache module ( SAPI i.e. a Server API) using mod_php.so.
When apache is invoked , every child process will invoke a php interpreter with it.
The php initialization takes place with the following steps
PHP begins by initializing its core subsystems. Towards the end of this start-up routine, it loads the code for each extension and calls their Module Initialization routine . This gives each extension a chance to initialize internal variables, allocate resources, register resource handlers, and register its functions with ZE, so that if a script calls one of those functions, ZE knows which code to execute. This process is called MINT or Module Initialization
Next, PHP waits for the SAPI layer to request a page to be processed. Once the request comes in, PHP begins by asking ZE to setup an environment for the script to run in, then calls each extension’s Request Initialization function. After this the extension gets the chance to set up specific environment variables, allocate request specific resources, or perform other tasks such as auditing .
Once the request is initialized, ZE takes over by translating the PHP script into tokens, and finally to opcodes which it can step through and execute. Should one of these opcodes require an extension function to be called, ZE will bundle up the arguments for that function, and temporarily give over control until it completes.
After a script has finished executing, PHP calls the Request Shutdown function of each extension to perform any last minute cleanup (such as saving session variables to disk). Next, ZE performs a clean-up process (known as garbage collection) which effectively performs an on every variable used during the previous request.
Once completed, PHP waits for the SAPI to either request another document or signal a shut down. During shutdown, PHP again cycles through each extension calling their Module Shutdown functions, and finally shuts down its own core subsystems.
I believe this should give you some insights about php working
Further readings
https://www.supportsages.com/2010/06/php-basics/
https://www.supportsages.com/2010/06/php-cgi/
https://www.supportsages.com/2010/06/mod_php-explained/