Index: sapi/cgi/cgi_main.c =================================================================== RCS file: /repository/php-src/sapi/cgi/cgi_main.c,v retrieving revision 1.267.2.15.2.56 diff -u -r1.267.2.15.2.56 cgi_main.c --- sapi/cgi/cgi_main.c 9 Apr 2008 09:16:40 -0000 1.267.2.15.2.56 +++ sapi/cgi/cgi_main.c 9 Aug 2008 23:19:57 -0000 @@ -1230,6 +1230,28 @@ } /* }}} */ +PHP_FUNCTION(fastcgi_finish_request) +{ + fcgi_request *request = (fcgi_request*) SG(server_context); + + if (fcgi_is_fastcgi() && request->fd >= 0) { + + php_end_ob_buffers(1 TSRMLS_CC); + php_header(TSRMLS_C); + + fcgi_flush(request, 1); + fcgi_close(request, 0, 0); + RETURN_TRUE; + } + + RETURN_FALSE; +} + +function_entry cgi_fcgi_sapi_functions[] = { + PHP_FE(fastcgi_finish_request, NULL) + {NULL, NULL, NULL} +}; + static zend_module_entry cgi_module_entry = { STANDARD_MODULE_HEADER, #if PHP_FASTCGI @@ -1237,7 +1259,7 @@ #else "cgi", #endif - NULL, + cgi_fcgi_sapi_functions, PHP_MINIT(cgi), PHP_MSHUTDOWN(cgi), NULL, Index: sapi/cgi/fastcgi.c =================================================================== RCS file: /repository/php-src/sapi/cgi/fastcgi.c,v retrieving revision 1.4.2.13.2.30 diff -u -r1.4.2.13.2.30 fastcgi.c --- sapi/cgi/fastcgi.c 3 Apr 2008 10:24:44 -0000 1.4.2.13.2.30 +++ sapi/cgi/fastcgi.c 9 Aug 2008 23:19:58 -0000 @@ -829,7 +829,7 @@ return n; } -static inline void fcgi_close(fcgi_request *req, int force, int destroy) +void fcgi_close(fcgi_request *req, int force, int destroy) { if (destroy) { zend_hash_destroy(&req->env); Index: sapi/cgi/fastcgi.h =================================================================== RCS file: /repository/php-src/sapi/cgi/fastcgi.h,v retrieving revision 1.2.2.4.2.6 diff -u -r1.2.2.4.2.6 fastcgi.h --- sapi/cgi/fastcgi.h 31 Dec 2007 07:20:16 -0000 1.2.2.4.2.6 +++ sapi/cgi/fastcgi.h 9 Aug 2008 23:19:58 -0000 @@ -128,6 +128,8 @@ int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len); int fcgi_flush(fcgi_request *req, int close); +void fcgi_close(fcgi_request *req, int force, int destroy); + #ifdef PHP_WIN32 void fcgi_impersonate(void); #endif