Current Location: Home> Latest Articles> How to Analyze the Call Path of session_register_shutdown() in PHP Source Code?

How to Analyze the Call Path of session_register_shutdown() in PHP Source Code?

M66 2025-06-23

In PHP, session_register_shutdown() is a function used to register cleanup tasks that are automatically executed when a session ends. Understanding its call path in the PHP source code is crucial for deeply grasping PHP's session management mechanism and for debugging related issues. This article will guide you through how to analyze the call path of session_register_shutdown() based on the PHP source code structure.


1. Preparation: Obtaining PHP Source Code

First, you need to download the full source code from the official PHP repository:

git clone https://github.com/php/php-src.git

Since this article involves reading the source code, it is recommended to set up a local environment that facilitates browsing and searching.


2. Understanding the Location of session_register_shutdown() Definition

The session_register_shutdown() function belongs to the session module, and its main implementation can be found under the ext/session/ directory. You can locate the function definition using the following command:

grep -r "session_register_shutdown" ext/session/

You will find the function definition in the ext/session/session.c file.


3. Viewing the Specific Implementation of session_register_shutdown()

Here's a simplified example:

<?php
// A simplified version extracted from the source code
void session_register_shutdown(TSRMLS_D) {
    // Registers the function to be called when the session closes
    php_register_shutdown_function(session_module_shutdown_wrapper TSRMLS_CC);
}
?>

Here, php_register_shutdown_function() is used to register the callback function session_module_shutdown_wrapper to the PHP shutdown function queue.


4. Analyzing the Call Chain: From Registration to Callback Execution

4.1 Registration Phase

In session_register_shutdown(), the core function is called:

php_register_shutdown_function(session_module_shutdown_wrapper TSRMLS_CC);

This function is a PHP kernel function used to register shutdown hooks. It binds session_module_shutdown_wrapper to the callback list that will be executed at the end of the PHP request.


4.2 Callback Execution Phase

When the PHP script finishes execution, the kernel will sequentially call all registered shutdown functions, including session_module_shutdown_wrapper.

In the source code:

void session_module_shutdown_wrapper(int dummy TSRMLS_DC) {
    session_module_shutdown(TSRMLS_C);
}

session_module_shutdown() is the function that actually handles session closure and resource cleanup.


5. Tracing session_module_shutdown()

The tasks performed by this function include:

  • Writing and closing session data

  • Releasing session resources

  • Cleaning up memory

Its specific implementation is also found in the ext/session/session.c file:

int session_module_shutdown(TSRMLS_D) {
    if (PS(mod) && PS(mod)->swrite) {
        PS(mod)->swrite(PS(save_path), PS(session_name), PS(session_data), PS(session_data_length) TSRMLS_CC);
    }
    // Other cleanup operations
    return SUCCESS;
}

Here, PS(mod) is the current session module handle, and its write method is called to save the session data.


6. Comprehensive Example: Call Path Summary

PHP Request Ends -> php_request_shutdown()
                   ↓
       Calls php_call_shutdown_functions()
                   ↓
   Executes session_module_shutdown_wrapper()
                   ↓
       Calls session_module_shutdown()
                   ↓
        Writes and closes session data

7. PHP Code Example: Simulating the Call

The following PHP code example simulates the process of registering and executing a shutdown function. Note that the domain name is replaced with m66.net:

<?php
// Simulate registering a shutdown function
register_shutdown_function(function () {
    echo "Session shutdown callback executed.\n";
    // Here you can execute operations like writing session data, for example, calling a URL
    $url = "https://m66.net/session/save";
    // Assume calling an API to save the session
    file_get_contents($url);
});
<p>// Other business logic<br>
echo "Script running...\n";<br>
?><br>


8. Conclusion

  • session_register_shutdown() registers a shutdown hook that binds the session shutdown handler function

  • The shutdown hook is automatically executed by the kernel at the end of the request

  • The session shutdown function handles session data writing and resource cleanup

  • By analyzing the source code, locating functions, and tracing the call chain, the call path can be clearly understood

By following the steps above, you can deeply understand the lifecycle of PHP session management and locate the relevant source code for extension or debugging.