|
cvs: pecl /http http_response_object.c php_http_response_object.h: msg#00129php.pecl.cvs
mike Fri Jul 22 11:28:50 2005 EDT Modified files: /pecl/http http_response_object.c php_http_response_object.h Log: - added capture mode to HttpResponse http://cvs.php.net/diff.php/pecl/http/http_response_object.c?r1=1.14&r2=1.15&ty=u Index: pecl/http/http_response_object.c diff -u pecl/http/http_response_object.c:1.14 pecl/http/http_response_object.c:1.15 --- pecl/http/http_response_object.c:1.14 Fri Jul 22 08:39:12 2005 +++ pecl/http/http_response_object.c Fri Jul 22 11:28:48 2005 @@ -13,7 +13,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: http_response_object.c,v 1.14 2005/07/22 12:39:12 mike Exp $ */ +/* $Id: http_response_object.c,v 1.15 2005/07/22 15:28:48 mike Exp $ */ #ifdef HAVE_CONFIG_H @@ -109,6 +109,8 @@ HTTP_ARG_VAL(clean_ob, 0) HTTP_END_ARGS; +HTTP_EMPTY_ARGS(capture, 0); + #define http_response_object_declare_default_properties() _http_response_object_declare_default_properties(TSRMLS_C) static inline void _http_response_object_declare_default_properties(TSRMLS_D); @@ -149,6 +151,7 @@ HTTP_RESPONSE_ME(getStream, ZEND_ACC_PUBLIC) HTTP_RESPONSE_ME(send, ZEND_ACC_PUBLIC) + HTTP_RESPONSE_ME(capture, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; @@ -599,7 +602,7 @@ */ PHP_METHOD(HttpResponse, send) { - zval *do_cache, *do_gzip; + zval *do_cache, *do_gzip, *sent; zend_bool clean_ob = 1; if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &clean_ob)) { @@ -609,6 +612,32 @@ http_error(E_WARNING, HTTP_E_HEADER, "Cannot send HttpResponse, headers have already been sent"); RETURN_FALSE; } + + sent = GET_STATIC_PROP(sent); + if (Z_LVAL_P(sent)) { + http_error(E_WARNING, HTTP_E_UNKOWN, "Cannot send HttpResponse, response has already been sent"); + } else { + Z_LVAL_P(sent) = 1; + } + + /* capture mode */ + if (Z_LVAL_P(GET_STATIC_PROP(catch))) { + zval the_data; + + INIT_PZVAL(&the_data); + php_ob_get_buffer(&the_data TSRMLS_CC); + + USE_STATIC_PROP(); + SET_STATIC_PROP(data, &the_data); + ZVAL_LONG(GET_STATIC_PROP(mode), SEND_DATA); + + if (!Z_STRLEN_P(GET_STATIC_PROP(eTag))) { + SET_STATIC_PROP_STRING(eTag, http_etag(Z_STRVAL(the_data), Z_STRLEN(the_data), SEND_DATA), 0); + } + zval_dtor(&the_data); + + clean_ob = 1; + } if (clean_ob) { /* interrupt on-the-fly etag generation */ @@ -701,6 +730,43 @@ } /* }}} */ +/* {{{ proto void HttpResponse::capture() + * + * Capture script output. + */ +PHP_METHOD(HttpResponse, capture) +{ + zval do_catch; + + NO_ARGS; + + INIT_PZVAL(&do_catch); + ZVAL_LONG(&do_catch, 1); + USE_STATIC_PROP(); + SET_STATIC_PROP(catch, &do_catch); + + php_end_ob_buffers(0 TSRMLS_CC); + php_start_ob_buffer(NULL, 0, 0 TSRMLS_CC); + + /* register shutdown function */ + { + zval func, retval, arg, *argp[1]; + + INIT_PZVAL(&arg); + INIT_PZVAL(&func); + INIT_PZVAL(&retval); + ZVAL_STRINGL(&func, "register_shutdown_function", lenof("register_shutdown_function"), 0); + + array_init(&arg); + add_next_index_stringl(&arg, "HttpResponse", lenof("HttpResponse"), 1); + add_next_index_stringl(&arg, "send", lenof("send"), 1); + argp[0] = &arg; + call_user_function(EG(function_table), NULL, &func, &retval, 1, argp TSRMLS_CC); + zval_dtor(&arg); + } +} +/* }}} */ + #endif /* ZEND_ENGINE_2 */ /* http://cvs.php.net/diff.php/pecl/http/php_http_response_object.h?r1=1.4&r2=1.5&ty=u Index: pecl/http/php_http_response_object.h diff -u pecl/http/php_http_response_object.h:1.4 pecl/http/php_http_response_object.h:1.5 --- pecl/http/php_http_response_object.h:1.4 Wed Jul 20 11:01:27 2005 +++ pecl/http/php_http_response_object.h Fri Jul 22 11:28:48 2005 @@ -13,7 +13,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_http_response_object.h,v 1.4 2005/07/20 15:01:27 mike Exp $ */ +/* $Id: php_http_response_object.h,v 1.5 2005/07/22 15:28:48 mike Exp $ */ #ifndef PHP_HTTP_RESPONSE_OBJECT_H #define PHP_HTTP_RESPONSE_OBJECT_H @@ -48,6 +48,7 @@ PHP_METHOD(HttpResponse, setStream); PHP_METHOD(HttpResponse, getStream); PHP_METHOD(HttpResponse, send); +PHP_METHOD(HttpResponse, capture); #endif #endif |
|
| <Prev in Thread] | Current Thread | [Next in Thread> |
|---|---|---|
| Previous by Date: | cvs: pecl /pdo pdo_stmt.c: 00129, Marcus Boerger |
|---|---|
| Next by Date: | cvs: pecl /http http_response_object.c: 00129, Michael Wallner |
| Previous by Thread: | cvs: pecl /pdo pdo_stmt.ci: 00129, Marcus Boerger |
| Next by Thread: | cvs: pecl /http funcsummary.php http_response_object.c /http/docs functions.html: 00129, Michael Wallner |
| Indexes: | [Date] [Thread] [Top] [All Lists] |
| News | FAQ | advertise |