From: Rasmus Lerdorf Date: Sat, 4 Dec 2004 07:16:44 +0000 (+0000) Subject: Add apache_reset_timeout() function for Apache1. This is needed because X-Git-Tag: RELEASE_0_2~581 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=224d2479b39ac02a76c611423b784e9487db65c3;p=php 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. --- diff --git a/NEWS b/NEWS index ce8123ee22..e282067b11 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,7 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2004, PHP 5.1.0 +- Add apache_reset_timeout() Apache1 function. (Rasmus) - Make request start time be available via $_SERVER['REQUEST_TIME']. (Ilia) - Allow gettimeofday() return a float if optional argument is specified. (Ilia) - Added sqlite_fetch_column_types() 3rd argument for arrays. (Ilia) 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