Keeping PHP Execution Alive Post-HTTP Response
In environments where PHP runs as Apache's mod_php, a common challenge arises in maintaining PHP execution after sending an HTTP response to the client. This constraint stems from the need to report error messages to an application within a specific timeout duration.
To address this issue, the key lies in sending the HTTP response as early as possible without interrupting ongoing operations. One effective method involves utilizing the following code snippet:
ob_end_clean(); header("Connection: close"); ignore_user_abort(); // optional ob_start(); echo ('Text the user will see'); $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); session_write_close(); // Added per suggestion // Do processing here sleep(30); echo('Text user will never see');
This snippet initially flushes any pending output and configures the HTTP connection to close. By ignoring user-initiated abort attempts and specifying the content length, the HTTP response is effectively dispatched. Subsequently, ongoing processing can be executed, such as database operations or email sending.
By employing this method, PHP can send a complete HTTP response to the client and continue execution for a specified time period, effectively resolving the issue of error reporting limitations imposed by external applications. This approach is particularly useful in scenarios where time-consuming operations must be performed without exceeding predetermined timeouts.
The above is the detailed content of How can I keep PHP execution alive after sending the HTTP response to the client?. For more information, please follow other related articles on the PHP Chinese website!