PHP Life Cycle

The PHP life cycle refers to the sequence of stages that PHP goes through from the moment a request is received until the response is sent back to the client. Here's a detailed breakdown:

1. Request Initiation

  • A client (web browser, API caller, etc.) sends a request to the web server

  • The web server (Apache, Nginx, etc.) recognizes the request as needing PHP processing

2. PHP Startup

  • The PHP interpreter is initialized (if not already running)

  • PHP loads its core extensions and configuration (php.ini)

  • Memory structures are initialized

3. Module Initialization (MINIT)

  • Each PHP extension executes its Module Initialization routine

  • Global variables are initialized

  • Resource types are registered

  • This happens once when PHP starts (for SAPI modules like mod_php)

4. Request Initialization (RINIT)

  • For each new request, PHP initializes the request-specific environment

  • Superglobals ($_GET, $_POST, etc.) are populated

  • Each extension's Request Initialization function is called

5. Script Execution

  • The PHP script is compiled to opcodes (if not cached)

  • The opcodes are executed

  • This is where your actual PHP code runs

  • Database connections, calculations, etc. happen here

6. Request Shutdown (RSHUTDOWN)

  • All request-specific resources are cleaned up

  • Sessions are written and closed

  • Output is sent to the web server

  • Each extension's Request Shutdown function is called

7. Module Shutdown (MSHUTDOWN)

  • When PHP is shutting down completely (e.g., web server restart)

  • All extensions clean up their global resources

  • This happens once when PHP terminates

Additional Notes for Different SAPIs:

  • Web Server (mod_php, PHP-FPM): MINIT/MSHUTDOWN happen once when server starts/stops; RINIT/RSHUTDOWN happen per request

  • CLI: Similar to web but for a single "request" (script execution)

  • Embedded: Lifecycle is controlled by the host application

Optimization Points:

  • Opcode caching (OPcache) skips compilation on subsequent requests

  • Persistent database connections can survive between requests

  • Preloading (PHP 7.4+) allows loading classes before requests

Understanding this lifecycle helps in writing more efficient PHP applications and debugging complex issues.

To Top