From 224d2479b39ac02a76c611423b784e9487db65c3 Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Sat, 4 Dec 2004 07:16:44 +0000 Subject: Add apache_reset_timeout() function for Apache1. This is needed because Apache1 only resets the write timer, which defaults to 300 seconds, on a successful write. That is, if the client has gone away and Apache attempts a write which fails it will set the conn->aborted flag but not reset the timeout. Assuming the PHP script is running in ignore_user_abort mode we ignore the aborted flag, but we'll still get blown out of the water 300 seconds after the failed write unless we periodically reset the timer. With set_time_limit(0), ignore_user_abort(true) and periodic apache_reset_timeout() calls we can theoretically run forever which is why I disabled this call in safe mode. --- sapi/apache/php_apache.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'sapi/apache/php_apache.c') diff --git a/sapi/apache/php_apache.c b/sapi/apache/php_apache.c index a52e95d19b..6f98f3ecc9 100644 --- a/sapi/apache/php_apache.c +++ b/sapi/apache/php_apache.c @@ -47,6 +47,7 @@ PHP_FUNCTION(apache_child_terminate); PHP_FUNCTION(apache_setenv); PHP_FUNCTION(apache_get_version); PHP_FUNCTION(apache_get_modules); +PHP_FUNCTION(apache_reset_timeout); PHP_MINFO_FUNCTION(apache); @@ -536,6 +537,20 @@ PHP_FUNCTION(apache_get_modules) } /* }}} */ +/* {{{ proto array apache_reset_timeout(void) + Reset the Apache write timer */ +PHP_FUNCTION(apache_reset_timeout) +{ + if (PG(safe_mode)) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot reset the Apache timeout in safe mode"); + RETURN_FALSE; + } + + ap_reset_timeout((request_rec *)SG(server_context)); + RETURN_TRUE; +} +/* }}} */ + /* * Local variables: * tab-width: 4 -- cgit v1.2.1