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.
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)
PHP_FUNCTION(apache_setenv);
PHP_FUNCTION(apache_get_version);
PHP_FUNCTION(apache_get_modules);
+PHP_FUNCTION(apache_reset_timeout);
PHP_MINFO_FUNCTION(apache);
}
/* }}} */
+/* {{{ 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